openc3-cosmos-tool-cmdsender 5.10.0 → 5.10.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/560.js","mappings":"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Y,CAAC,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,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,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,EAA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","sources":["webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/ace-builds/src-min-noconflict/mode-ruby.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/ace-builds/src-min-noconflict/theme-twilight.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/ace-builds/src-noconflict/ace.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/index.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/adapters/xhr.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/axios.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/cancel/CancelToken.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/cancel/CanceledError.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/cancel/isCancel.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/Axios.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/AxiosError.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/InterceptorManager.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/buildFullPath.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/dispatchRequest.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/mergeConfig.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/settle.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/core/transformData.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/defaults/index.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/defaults/transitional.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/env/data.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/bind.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/buildURL.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/combineURLs.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/cookies.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/isAxiosError.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/null.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/parseHeaders.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/parseProtocol.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/spread.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/toFormData.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/helpers/validator.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/axios/lib/utils.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-buffer-basic-detection.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-buffer-view-core.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-buffer.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-copy-within.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-from-constructor-and-list.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-iteration-from-last.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-last-index-of.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-to-reversed.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/array-with.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/define-built-ins.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/flatten-into-array.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/ieee754.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/is-big-int-array.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/is-integral-number.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/math-log10.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/number-parse-float.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/same-value.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/string-pad-webkit-bug.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/string-pad.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/to-big-int.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/to-index.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/to-offset.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/to-positive-integer.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/to-uint8-clamped.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/typed-array-constructor.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/typed-array-constructors-require-wrappers.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/typed-array-from-species-and-list.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/typed-array-from.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/internals/typed-array-species-constructor.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.array-buffer.slice.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.array.flat-map.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.array.last-index-of.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.array.reverse.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.array.unscopables.flat-map.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.json.to-string-tag.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.math.to-string-tag.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.number.to-exponential.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.parse-float.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.string.pad-start.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.string.replace-all.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.string.search.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.symbol.async-iterator.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.symbol.to-string-tag.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.at.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.copy-within.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.every.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.fill.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.filter.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.find-index.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.find-last-index.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.find-last.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.find.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.for-each.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.includes.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.index-of.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.iterator.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.join.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.last-index-of.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.map.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.reduce-right.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.reduce.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.reverse.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.set.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.slice.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.some.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.sort.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.to-locale-string.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.to-reversed.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.to-sorted.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.to-string.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.uint8-array.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/core-js/modules/es.typed-array.with.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/sprintf-js/src/sprintf.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","webpack://@openc3/cosmos-tool-cmdsender/../../node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js"],"sourcesContent":["ace.define(\"ace/mode/ruby_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=t.constantOtherSymbol={token:\"constant.other.symbol.ruby\",regex:\"[:](?:[A-Za-z_]|[@$](?=[a-zA-Z0-9_]))[a-zA-Z0-9_]*[!=?]?\"};t.qString={token:\"string\",regex:\"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"},t.qqString={token:\"string\",regex:'[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]'},t.tString={token:\"string\",regex:\"[`](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[`]\"};var o=t.constantNumericHex={token:\"constant.numeric\",regex:\"0[xX][0-9a-fA-F](?:[0-9a-fA-F]|_(?=[0-9a-fA-F]))*\\\\b\"},u=t.constantNumericBinary={token:\"constant.numeric\",regex:/\\b(0[bB][01](?:[01]|_(?=[01]))*)\\b/},a=t.constantNumericDecimal={token:\"constant.numeric\",regex:/\\b(0[dD](?:[1-9](?:[\\d]|_(?=[\\d]))*|0))\\b/},f=t.constantNumericDecimal={token:\"constant.numeric\",regex:/\\b(0[oO]?(?:[1-7](?:[0-7]|_(?=[0-7]))*|0))\\b/},l=t.constantNumericRational={token:\"constant.numeric\",regex:/\\b([\\d]+(?:[./][\\d]+)?ri?)\\b/},c=t.constantNumericComplex={token:\"constant.numeric\",regex:/\\b([\\d]i)\\b/},h=t.constantNumericFloat={token:\"constant.numeric\",regex:\"[+-]?\\\\d(?:\\\\d|_(?=\\\\d))*(?:(?:\\\\.\\\\d(?:\\\\d|_(?=\\\\d))*)?(?:[eE][+-]?\\\\d+)?)?i?\\\\b\"},p=t.instanceVariable={token:\"variable.instance\",regex:\"@{1,2}[a-zA-Z_\\\\d]+\"},d=function(){var e=\"abort|Array|assert|assert_equal|assert_not_equal|assert_same|assert_not_same|assert_nil|assert_not_nil|assert_match|assert_no_match|assert_in_delta|assert_throws|assert_raise|assert_nothing_raised|assert_instance_of|assert_kind_of|assert_respond_to|assert_operator|assert_send|assert_difference|assert_no_difference|assert_recognizes|assert_generates|assert_response|assert_redirected_to|assert_template|assert_select|assert_select_email|assert_select_rjs|assert_select_encoded|css_select|at_exit|attr|attr_writer|attr_reader|attr_accessor|attr_accessible|autoload|binding|block_given?|callcc|caller|catch|chomp|chomp!|chop|chop!|defined?|delete_via_redirect|eval|exec|exit|exit!|fail|Float|flunk|follow_redirect!|fork|form_for|form_tag|format|gets|global_variables|gsub|gsub!|get_via_redirect|host!|https?|https!|include|Integer|lambda|link_to|link_to_unless_current|link_to_function|link_to_remote|load|local_variables|loop|open|open_session|p|print|printf|proc|putc|puts|post_via_redirect|put_via_redirect|raise|rand|raw|readline|readlines|redirect?|request_via_redirect|require|scan|select|set_trace_func|sleep|split|sprintf|srand|String|stylesheet_link_tag|syscall|system|sub|sub!|test|throw|trace_var|trap|untrace_var|atan2|cos|exp|frexp|ldexp|log|log10|sin|sqrt|tan|render|javascript_include_tag|csrf_meta_tag|label_tag|text_field_tag|submit_tag|check_box_tag|content_tag|radio_button_tag|text_area_tag|password_field_tag|hidden_field_tag|fields_for|select_tag|options_for_select|options_from_collection_for_select|collection_select|time_zone_select|select_date|select_time|select_datetime|date_select|time_select|datetime_select|select_year|select_month|select_day|select_hour|select_minute|select_second|file_field_tag|file_field|respond_to|skip_before_filter|around_filter|after_filter|verify|protect_from_forgery|rescue_from|helper_method|redirect_to|before_filter|send_data|send_file|validates_presence_of|validates_uniqueness_of|validates_length_of|validates_format_of|validates_acceptance_of|validates_associated|validates_exclusion_of|validates_inclusion_of|validates_numericality_of|validates_with|validates_each|authenticate_or_request_with_http_basic|authenticate_or_request_with_http_digest|filter_parameter_logging|match|get|post|resources|redirect|scope|assert_routing|translate|localize|extract_locale_from_tld|caches_page|expire_page|caches_action|expire_action|cache|expire_fragment|expire_cache_for|observe|cache_sweeper|has_many|has_one|belongs_to|has_and_belongs_to_many|p|warn|refine|using|module_function|extend|alias_method|private_class_method|remove_method|undef_method\",t=\"alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|__FILE__|finally|for|gem|if|in|__LINE__|module|next|not|or|private|protected|public|redo|rescue|retry|return|super|then|undef|unless|until|when|while|yield|__ENCODING__|prepend\",n=\"true|TRUE|false|FALSE|nil|NIL|ARGF|ARGV|DATA|ENV|RUBY_PLATFORM|RUBY_RELEASE_DATE|RUBY_VERSION|STDERR|STDIN|STDOUT|TOPLEVEL_BINDING|RUBY_PATCHLEVEL|RUBY_REVISION|RUBY_COPYRIGHT|RUBY_ENGINE|RUBY_ENGINE_VERSION|RUBY_DESCRIPTION\",r=\"$DEBUG|$defout|$FILENAME|$LOAD_PATH|$SAFE|$stdin|$stdout|$stderr|$VERBOSE|$!|root_url|flash|session|cookies|params|request|response|logger|self\",i=this.$keywords=this.createKeywordMapper({keyword:t,\"constant.language\":n,\"variable.language\":r,\"support.function\":e,\"invalid.deprecated\":\"debugger\"},\"identifier\"),d=\"\\\\\\\\(?:n(?:[1-7][0-7]{0,2}|0)|[nsrtvfbae'\\\"\\\\\\\\]|c(?:\\\\\\\\M-)?.|M-(?:\\\\\\\\C-|\\\\\\\\c)?.|C-(?:\\\\\\\\M-)?.|[0-7]{3}|x[\\\\da-fA-F]{2}|u[\\\\da-fA-F]{4}|u{[\\\\da-fA-F]{1,6}(?:\\\\s[\\\\da-fA-F]{1,6})*})\",v={\"(\":\")\",\"[\":\"]\",\"{\":\"}\",\"<\":\">\",\"^\":\"^\",\"|\":\"|\",\"%\":\"%\"};this.$rules={start:[{token:\"comment\",regex:\"#.*$\"},{token:\"comment.multiline\",regex:\"^=begin(?=$|\\\\s.*$)\",next:\"comment\"},{token:\"string.regexp\",regex:/[/](?=.*\\/)/,next:\"regex\"},[{token:[\"constant.other.symbol.ruby\",\"string.start\"],regex:/(:)?(\")/,push:[{token:\"constant.language.escape\",regex:d},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/\"/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/`/,push:[{token:\"constant.language.escape\",regex:d},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/`/,next:\"pop\"},{defaultToken:\"string\"}]},{token:[\"constant.other.symbol.ruby\",\"string.start\"],regex:/(:)?(')/,push:[{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"string.end\",regex:/'/,next:\"pop\"},{defaultToken:\"string\"}]},{token:\"string.start\",regex:/%[qwx]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"qStateWithoutInterpolation\",this.token}},{token:\"string.start\",regex:/%[QWX]?([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"qStateWithInterpolation\",this.token}},{token:\"constant.other.symbol.ruby\",regex:/%[si]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"sStateWithoutInterpolation\",this.token}},{token:\"constant.other.symbol.ruby\",regex:/%[SI]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"sStateWithInterpolation\",this.token}},{token:\"string.regexp\",regex:/%[r]([(\\[<{^|%])/,onMatch:function(e,t,n){n.length&&(n=[]);var r=e[e.length-1];return n.unshift(r,t),this.next=\"rState\",this.token}}],{token:\"punctuation\",regex:\"::\"},p,{token:\"variable.global\",regex:\"[$][a-zA-Z_\\\\d]+\"},{token:\"support.class\",regex:\"[A-Z][a-zA-Z_\\\\d]*\"},{token:[\"punctuation.operator\",\"support.function\"],regex:/(\\.)([a-zA-Z_\\d]+)(?=\\()/},{token:[\"punctuation.operator\",\"identifier\"],regex:/(\\.)([a-zA-Z_][a-zA-Z_\\d]*)/},{token:\"string.character\",regex:\"\\\\B\\\\?(?:\"+d+\"|\\\\S)\"},{token:\"punctuation.operator\",regex:/\\?(?=.+:)/},l,c,s,o,h,u,a,f,{token:\"constant.language.boolean\",regex:\"(?:true|false)\\\\b\"},{token:i,regex:\"[a-zA-Z_$][a-zA-Z0-9_$]*\\\\b\"},{token:\"punctuation.separator.key-value\",regex:\"=>\"},{stateName:\"heredoc\",onMatch:function(e,t,n){var r=e[2]==\"-\"||e[2]==\"~\"?\"indentedHeredoc\":\"heredoc\",i=e.split(this.splitRegex);return n.push(r,i[3]),[{type:\"constant\",value:i[1]},{type:\"string\",value:i[2]},{type:\"support.class\",value:i[3]},{type:\"string\",value:i[4]}]},regex:\"(<<[-~]?)(['\\\"`]?)([\\\\w]+)(['\\\"`]?)\",rules:{heredoc:[{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}],indentedHeredoc:[{token:\"string\",regex:\"^ +\"},{onMatch:function(e,t,n){return e===n[1]?(n.shift(),n.shift(),this.next=n[0]||\"start\",\"support.class\"):(this.next=\"\",\"string\")},regex:\".*$\",next:\"start\"}]}},{regex:\"$\",token:\"empty\",next:function(e,t){return t[0]===\"heredoc\"||t[0]===\"indentedHeredoc\"?t[0]:e}},{token:\"keyword.operator\",regex:\"!|\\\\$|%|&|\\\\*|/|\\\\-\\\\-|\\\\-|\\\\+\\\\+|\\\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\\\|\\\\||\\\\?\\\\:|\\\\*=|%=|\\\\+=|\\\\-=|&=|\\\\^=|\\\\||\\\\b(?:in|instanceof|new|delete|typeof|void)\"},{token:\"paren.lparen\",regex:\"[[({]\"},{token:\"paren.rparen\",regex:\"[\\\\])}]\",onMatch:function(e,t,n){return this.next=\"\",e==\"}\"&&n.length>1&&n[1]!=\"start\"&&(n.shift(),this.next=n.shift()),this.token}},{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.operator\",regex:/[?:,;.]/}],comment:[{token:\"comment.multiline\",regex:\"^=end(?=$|\\\\s.*$)\",next:\"start\"},{token:\"comment\",regex:\".+\"}],qStateWithInterpolation:[{token:\"string.start\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"string\"}},{token:\"constant.language.escape\",regex:d},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.end\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"string\")}},{defaultToken:\"string\"}],qStateWithoutInterpolation:[{token:\"string.start\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"string\"}},{token:\"constant.language.escape\",regex:/\\\\['\\\\]/},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"string.end\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"string\")}},{defaultToken:\"string\"}],sStateWithoutInterpolation:[{token:\"constant.other.symbol.ruby\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.other.symbol.ruby\"}},{token:\"constant.other.symbol.ruby\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.other.symbol.ruby\")}},{defaultToken:\"constant.other.symbol.ruby\"}],sStateWithInterpolation:[{token:\"constant.other.symbol.ruby\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.other.symbol.ruby\"}},{token:\"constant.language.escape\",regex:d},{token:\"constant.language.escape\",regex:/\\\\./},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"constant.other.symbol.ruby\",regex:/[)\\]>}^|%]/,onMatch:function(e,t,n){return n.length&&e===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.other.symbol.ruby\")}},{defaultToken:\"constant.other.symbol.ruby\"}],rState:[{token:\"string.regexp\",regex:/[(\\[<{]/,onMatch:function(e,t,n){return n.length&&e===n[0]?(n.unshift(e,t),this.token):\"constant.language.escape\"}},{token:\"paren.start\",regex:/#{/,push:\"start\"},{token:\"string.regexp\",regex:/\\//},{token:\"string.regexp\",regex:/[)\\]>}^|%][imxouesn]*/,onMatch:function(e,t,n){return n.length&&e[0]===v[n[0]]?(n.shift(),this.next=n.shift(),this.token):(this.next=\"\",\"constant.language.escape\")}},{include:\"regex\"},{defaultToken:\"string.regexp\"}],regex:[{token:\"regexp.keyword\",regex:/\\\\[wWdDhHsS]/},{token:\"constant.language.escape\",regex:/\\\\[AGbBzZ]/},{token:\"constant.language.escape\",regex:/\\\\g<[a-zA-Z0-9]*>/},{token:[\"constant.language.escape\",\"regexp.keyword\",\"constant.language.escape\"],regex:/(\\\\p{\\^?)(Alnum|Alpha|Blank|Cntrl|Digit|Graph|Lower|Print|Punct|Space|Upper|XDigit|Word|ASCII|Any|Assigned|Arabic|Armenian|Balinese|Bengali|Bopomofo|Braille|Buginese|Buhid|Canadian_Aboriginal|Carian|Cham|Cherokee|Common|Coptic|Cuneiform|Cypriot|Cyrillic|Deseret|Devanagari|Ethiopic|Georgian|Glagolitic|Gothic|Greek|Gujarati|Gurmukhi|Han|Hangul|Hanunoo|Hebrew|Hiragana|Inherited|Kannada|Katakana|Kayah_Li|Kharoshthi|Khmer|Lao|Latin|Lepcha|Limbu|Linear_B|Lycian|Lydian|Malayalam|Mongolian|Myanmar|New_Tai_Lue|Nko|Ogham|Ol_Chiki|Old_Italic|Old_Persian|Oriya|Osmanya|Phags_Pa|Phoenician|Rejang|Runic|Saurashtra|Shavian|Sinhala|Sundanese|Syloti_Nagri|Syriac|Tagalog|Tagbanwa|Tai_Le|Tamil|Telugu|Thaana|Thai|Tibetan|Tifinagh|Ugaritic|Vai|Yi|Ll|Lm|Lt|Lu|Lo|Mn|Mc|Me|Nd|Nl|Pc|Pd|Ps|Pe|Pi|Pf|Po|No|Sm|Sc|Sk|So|Zs|Zl|Zp|Cc|Cf|Cn|Co|Cs|N|L|M|P|S|Z|C)(})/},{token:[\"constant.language.escape\",\"invalid\",\"constant.language.escape\"],regex:/(\\\\p{\\^?)([^/]*)(})/},{token:\"regexp.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"string.regexp\",regex:/[/][imxouesn]*/,next:\"start\"},{token:\"invalid\",regex:/\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/},{token:\"constant.language.escape\",regex:/\\(\\?(?:[:=!>]|<'?[a-zA-Z]*'?>|<[=!])|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/},{token:\"constant.language.delimiter\",regex:/\\|/},{token:\"regexp.keyword\",regex:/\\[\\[:(?:alnum|alpha|blank|cntrl|digit|graph|lower|print|punct|space|upper|xdigit|word|ascii):\\]\\]/},{token:\"constant.language.escape\",regex:/\\[\\^?/,push:\"regex_character_class\"},{defaultToken:\"string.regexp\"}],regex_character_class:[{token:\"regexp.keyword\",regex:/\\\\[wWdDhHsS]/},{token:\"regexp.charclass.keyword.operator\",regex:\"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"},{token:\"constant.language.escape\",regex:/&?&?\\[\\^?/,push:\"regex_character_class\"},{token:\"constant.language.escape\",regex:\"]\",next:\"pop\"},{token:\"constant.language.escape\",regex:\"-\"},{defaultToken:\"string.regexp.characterclass\"}]},this.normalizeRules()};r.inherits(d,i),t.RubyHighlightRules=d}),ace.define(\"ace/mode/matching_brace_outdent\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\\s+$/.test(e)?/^\\s*\\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\\s*\\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define(\"ace/mode/folding/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/folding/fold_mode\",\"ace/range\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"./fold_mode\").FoldMode,s=e(\"../../range\").Range,o=e(\"../../token_iterator\").TokenIterator,u=t.FoldMode=function(){};r.inherits(u,i),function(){this.indentKeywords={\"class\":1,def:1,module:1,\"do\":1,unless:1,\"if\":1,\"while\":1,\"for\":1,until:1,begin:1,\"else\":0,elsif:0,rescue:0,ensure:0,when:0,end:-1,\"case\":1,\"=begin\":1,\"=end\":-1},this.foldingStartMarker=/(?:\\s|^)(def|do|while|class|unless|module|if|for|until|begin|else|elsif|case|rescue|ensure|when)\\b|({\\s*$)|(=begin)/,this.foldingStopMarker=/(=end(?=$|\\s.*$))|(^\\s*})|\\b(end)\\b/,this.getFoldWidget=function(e,t,n){var r=e.getLine(n),i=this.foldingStartMarker.test(r),s=this.foldingStopMarker.test(r);if(i&&!s){var o=r.match(this.foldingStartMarker);if(o[1]){if(o[1]==\"if\"||o[1]==\"else\"||o[1]==\"while\"||o[1]==\"until\"||o[1]==\"unless\"){if(o[1]==\"else\"&&/^\\s*else\\s*$/.test(r)===!1)return;if(/^\\s*(?:if|else|while|until|unless)\\s*/.test(r)===!1)return}if(o[1]==\"when\"&&/\\sthen\\s/.test(r)===!0)return;if(e.getTokenAt(n,o.index+2).type===\"keyword\")return\"start\"}else{if(!o[3])return\"start\";if(e.getTokenAt(n,o.index+1).type===\"comment.multiline\")return\"start\"}}if(t!=\"markbeginend\"||!s||i&&s)return\"\";var o=r.match(this.foldingStopMarker);if(o[3]===\"end\"){if(e.getTokenAt(n,o.index+1).type===\"keyword\")return\"end\"}else{if(!o[1])return\"end\";if(e.getTokenAt(n,o.index+1).type===\"comment.multiline\")return\"end\"}},this.getFoldWidgetRange=function(e,t,n){var r=e.doc.getLine(n),i=this.foldingStartMarker.exec(r);if(i)return i[1]||i[3]?this.rubyBlock(e,n,i.index+2):this.openingBracketBlock(e,\"{\",n,i.index);var i=this.foldingStopMarker.exec(r);if(i)return i[3]===\"end\"&&e.getTokenAt(n,i.index+1).type===\"keyword\"?this.rubyBlock(e,n,i.index+1):i[1]===\"=end\"&&e.getTokenAt(n,i.index+1).type===\"comment.multiline\"?this.rubyBlock(e,n,i.index+1):this.closingBracketBlock(e,\"}\",n,i.index+i[0].length)},this.rubyBlock=function(e,t,n,r){var i=new o(e,t,n),u=i.getCurrentToken();if(!u||u.type!=\"keyword\"&&u.type!=\"comment.multiline\")return;var a=u.value,f=e.getLine(t);switch(u.value){case\"if\":case\"unless\":case\"while\":case\"until\":var l=new RegExp(\"^\\\\s*\"+u.value);if(!l.test(f))return;var c=this.indentKeywords[a];break;case\"when\":if(/\\sthen\\s/.test(f))return;case\"elsif\":case\"rescue\":case\"ensure\":var c=1;break;case\"else\":var l=new RegExp(\"^\\\\s*\"+u.value+\"\\\\s*$\");if(!l.test(f))return;var c=1;break;default:var c=this.indentKeywords[a]}var h=[a];if(!c)return;var p=c===-1?e.getLine(t-1).length:e.getLine(t).length,d=t,v=[];v.push(i.getCurrentTokenRange()),i.step=c===-1?i.stepBackward:i.stepForward;if(u.type==\"comment.multiline\")while(u=i.step()){if(u.type!==\"comment.multiline\")continue;if(c==1){p=6;if(u.value==\"=end\")break}else if(u.value==\"=begin\")break}else while(u=i.step()){var m=!1;if(u.type!==\"keyword\")continue;var g=c*this.indentKeywords[u.value];f=e.getLine(i.getCurrentTokenRow());switch(u.value){case\"do\":for(var y=i.$tokenIndex-1;y>=0;y--){var b=i.$rowTokens[y];if(b&&(b.value==\"while\"||b.value==\"until\"||b.value==\"for\")){g=0;break}}break;case\"else\":var l=new RegExp(\"^\\\\s*\"+u.value+\"\\\\s*$\");if(!l.test(f)||a==\"case\")g=0,m=!0;break;case\"if\":case\"unless\":case\"while\":case\"until\":var l=new RegExp(\"^\\\\s*\"+u.value);l.test(f)||(g=0,m=!0);break;case\"when\":if(/\\sthen\\s/.test(f)||a==\"case\")g=0,m=!0}if(g>0)h.unshift(u.value);else if(g<=0&&m===!1){h.shift();if(!h.length){if((a==\"while\"||a==\"until\"||a==\"for\")&&u.value!=\"do\")break;if(u.value==\"do\"&&c==-1&&g!=0)break;if(u.value!=\"do\")break}g===0&&h.unshift(u.value)}}if(!u)return null;if(r)return v.push(i.getCurrentTokenRange()),v;var t=i.getCurrentTokenRow();if(c===-1){if(u.type===\"comment.multiline\")var w=6;else var w=e.getLine(t).length;return new s(t,w,d-1,p)}return new s(d,p,t-1,e.getLine(t-1).length)}}.call(u.prototype)}),ace.define(\"ace/mode/ruby\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/ruby_highlight_rules\",\"ace/mode/matching_brace_outdent\",\"ace/range\",\"ace/mode/folding/ruby\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text\").Mode,s=e(\"./ruby_highlight_rules\").RubyHighlightRules,o=e(\"./matching_brace_outdent\").MatchingBraceOutdent,u=e(\"../range\").Range,a=e(\"./folding/ruby\").FoldMode,f=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=this.$defaultBehaviour,this.foldingRules=new a,this.indentKeywords=this.foldingRules.indentKeywords};r.inherits(f,i),function(){this.lineCommentStart=\"#\",this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens;if(s.length&&s[s.length-1].type==\"comment\")return r;if(e==\"start\"){var o=t.match(/^.*[\\{\\(\\[]\\s*$/),u=t.match(/^\\s*(class|def|module)\\s.*$/),a=t.match(/.*do(\\s*|\\s+\\|.*\\|\\s*)$/),f=t.match(/^\\s*(if|else|when|elsif|unless|while|for|begin|rescue|ensure)\\s*/);if(o||u||a||f)r+=n}return r},this.checkOutdent=function(e,t,n){return/^\\s+(end|else|rescue|ensure)$/.test(t+n)||this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){var r=t.getLine(n);if(/}/.test(r))return this.$outdent.autoOutdent(t,n);var i=this.$getIndent(r),s=t.getLine(n-1),o=this.$getIndent(s),a=t.getTabString();o.length<=i.length&&i.slice(-a.length)==a&&t.remove(new u(n,i.length-a.length,n,i.length))},this.getMatching=function(e,t,n){if(t==undefined){var r=e.selection.lead;n=r.column,t=r.row}var i=e.getTokenAt(t,n);if(i&&i.value in this.indentKeywords)return this.foldingRules.rubyBlock(e,t,n,!0)},this.$id=\"ace/mode/ruby\",this.snippetFileId=\"ace/snippets/ruby\"}.call(f.prototype),t.Mode=f}); (function() {\n ace.require([\"ace/mode/ruby\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/theme/twilight-css\",[\"require\",\"exports\",\"module\"],function(e,t,n){n.exports=\".ace-twilight .ace_gutter {\\n background: #232323;\\n color: #E2E2E2\\n}\\n\\n.ace-twilight .ace_print-margin {\\n width: 1px;\\n background: #232323\\n}\\n\\n.ace-twilight {\\n background-color: #141414;\\n color: #F8F8F8\\n}\\n\\n.ace-twilight .ace_cursor {\\n color: #A7A7A7\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_selection {\\n background: rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-twilight.ace_multiselect .ace_selection.ace_start {\\n box-shadow: 0 0 3px 0px #141414;\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_step {\\n background: rgb(102, 82, 0)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_bracket {\\n margin: -1px 0 0 -1px;\\n border: 1px solid rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_active-line {\\n background: rgba(255, 255, 255, 0.031)\\n}\\n\\n.ace-twilight .ace_gutter-active-line {\\n background-color: rgba(255, 255, 255, 0.031)\\n}\\n\\n.ace-twilight .ace_marker-layer .ace_selected-word {\\n border: 1px solid rgba(221, 240, 255, 0.20)\\n}\\n\\n.ace-twilight .ace_invisible {\\n color: rgba(255, 255, 255, 0.25)\\n}\\n\\n.ace-twilight .ace_keyword,\\n.ace-twilight .ace_meta {\\n color: #CDA869\\n}\\n\\n.ace-twilight .ace_constant,\\n.ace-twilight .ace_constant.ace_character,\\n.ace-twilight .ace_constant.ace_character.ace_escape,\\n.ace-twilight .ace_constant.ace_other,\\n.ace-twilight .ace_heading,\\n.ace-twilight .ace_markup.ace_heading,\\n.ace-twilight .ace_support.ace_constant {\\n color: #CF6A4C\\n}\\n\\n.ace-twilight .ace_invalid.ace_illegal {\\n color: #F8F8F8;\\n background-color: rgba(86, 45, 86, 0.75)\\n}\\n\\n.ace-twilight .ace_invalid.ace_deprecated {\\n text-decoration: underline;\\n font-style: italic;\\n color: #D2A8A1\\n}\\n\\n.ace-twilight .ace_support {\\n color: #9B859D\\n}\\n\\n.ace-twilight .ace_fold {\\n background-color: #AC885B;\\n border-color: #F8F8F8\\n}\\n\\n.ace-twilight .ace_support.ace_function {\\n color: #DAD085\\n}\\n\\n.ace-twilight .ace_list,\\n.ace-twilight .ace_markup.ace_list,\\n.ace-twilight .ace_storage {\\n color: #F9EE98\\n}\\n\\n.ace-twilight .ace_entity.ace_name.ace_function,\\n.ace-twilight .ace_meta.ace_tag {\\n color: #AC885B\\n}\\n\\n.ace-twilight .ace_string {\\n color: #8F9D6A\\n}\\n\\n.ace-twilight .ace_string.ace_regexp {\\n color: #E9C062\\n}\\n\\n.ace-twilight .ace_comment {\\n font-style: italic;\\n color: #5F5A60\\n}\\n\\n.ace-twilight .ace_variable {\\n color: #7587A6\\n}\\n\\n.ace-twilight .ace_xml-pe {\\n color: #494949\\n}\\n\\n.ace-twilight .ace_indent-guide {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\\n}\\n\\n.ace-twilight .ace_indent-guide-active {\\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQIW2PQ1dX9zzBz5sz/ABCcBFFentLlAAAAAElFTkSuQmCC) right repeat-y;\\n}\\n\"}),ace.define(\"ace/theme/twilight\",[\"require\",\"exports\",\"module\",\"ace/theme/twilight-css\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-twilight\",t.cssText=e(\"./twilight-css\");var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass,!1)}); (function() {\n ace.require([\"ace/theme/twilight\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","/* ***** 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/lang\",[\"require\",\"exports\",\"module\"], 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 = 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};\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.supportsUnicodeFlag = function () {\n try {\n new RegExp('^.$', 'u');\n }\n catch (error) {\n return false;\n }\n return true;\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.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/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\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}\nfunction 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}\nvar messages;\nvar AppConfig = /** @class */ (function () {\n function AppConfig() {\n this.$defaultOptions = {};\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) {\n messages = value;\n };\n AppConfig.prototype.nls = function (string, params) {\n if (messages && !messages[string]) {\n warn(\"No message found for '\" + string + \"' in the provided messages, falling back to default English message.\");\n }\n var translated = messages && messages[string] || string;\n if (params) {\n translated = translated.replace(/\\$(\\$|[\\d]+)/g, function (_, name) {\n if (name == \"$\")\n return \"$\";\n return params[name];\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 (moduleName, onLoad) {\n var loadedModule, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\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.24.1\";\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 comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\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 = comparePoints;\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){/*! @license\n==========================================================================\nSproutCore -- JavaScript Application Framework\ncopyright 2006-2009, Sprout Systems Inc., Apple Inc. and contributors.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\nSproutCore and the SproutCore logo are trademarks of Sprout Systems, Inc.\n\nFor more information about SproutCore, visit http://www.sproutcore.com\n\n\n==========================================================================\n@license */\n\"use strict\";\nvar oop = require(\"./oop\");\nvar Keys = (function () {\n var ret = {\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 96: \"Numpad0\",\n 97: \"Numpad1\",\n 98: \"Numpad2\",\n 99: \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5',\n 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a',\n 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h',\n 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',\n 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',\n 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',\n 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`',\n 219: '[', 220: '\\\\', 221: ']', 222: \"'\", 111: '/', 106: '*'\n }\n };\n ret.PRINTABLE_KEYS[173] = '-';\n var name, i;\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n (function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n for (var i = Math.pow(2, mods.length); i--;) {\n ret.KEY_MODS[i] = mods.filter(function (x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n return ret;\n})();\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\";\nvar 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 }\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, 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};\nvar getModifierHash = function (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 (!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 = \"location\" in e ? e.location : e.keyLocation;\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 var location = \"location\" in e ? e.location : e.keyLocation;\n if (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 if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function (e) {\n lastKeyDownKeyCode = e.keyCode;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n }, destroyer);\n }\n else {\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 }\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 = 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(\"editor\"));\n if (host.session) {\n var row = host.session.selection.cursor.row;\n text.setAttribute(\"aria-label\", nls(\"Cursor at row $0\", [row + 1]));\n }\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, host.onCommandKey.bind(host), 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/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/range\"], 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 Range = require(\"./range\").Range;\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 () {\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 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 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 element = this.getElement();\n element.innerHTML = \"\";\n element.appendChild(domNode);\n element.style.display = \"block\";\n var position = renderer.textToScreenCoordinates(range.start.row, range.start.column);\n var cursorPos = editor.getCursorPosition();\n var labelHeight = element.clientHeight;\n var rect = renderer.scroller.getBoundingClientRect();\n var isTopdown = true;\n if (this.row > cursorPos.row) {\n isTopdown = true;\n }\n else if (this.row < cursorPos.row) {\n isTopdown = false;\n }\n if (position.pageY - labelHeight + renderer.lineHeight < rect.top) {\n isTopdown = true;\n }\n else if (position.pageY + labelHeight > rect.bottom) {\n isTopdown = false;\n }\n if (!isTopdown) {\n position.pageY -= labelHeight;\n }\n else {\n position.pageY += renderer.lineHeight;\n }\n element.style.maxWidth = rect.width - (position.pageX - rect.left) + \"px\";\n this.setPosition(position.pageX, position.pageY);\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(\"mousewheel\", 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(\"mousewheel\", 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 || e.relatedTarget == this.getElement())\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\"], 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;\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: { singular: nls(\"error\"), plural: nls(\"errors\") },\n warning: { singular: nls(\"warning\"), plural: nls(\"warnings\") },\n info: { singular: nls(\"information message\"), plural: nls(\"information messages\") }\n };\n },\n enumerable: false,\n configurable: true\n });\n GutterTooltip.prototype.showTooltip = function (row) {\n var gutter = this.editor.renderer.$gutterLayer;\n var annotationsInRow = gutter.$annotations[row];\n var annotation;\n if (annotationsInRow)\n annotation = { text: Array.from(annotationsInRow.text), type: Array.from(annotationsInRow.type) };\n else\n annotation = { text: [], type: [] };\n var fold = gutter.session.getFoldLine(row);\n if (fold && gutter.$showFoldedAnnotations) {\n var annotationsInFold = { error: [], warning: [], info: [] };\n var mostSevereAnnotationInFoldType;\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 (annotationType === \"error\") {\n mostSevereAnnotationInFoldType = \"error_fold\";\n continue;\n }\n if (annotationType === \"warning\") {\n mostSevereAnnotationInFoldType = \"warning_fold\";\n continue;\n }\n }\n }\n if (mostSevereAnnotationInFoldType === \"error_fold\" || mostSevereAnnotationInFoldType === \"warning_fold\") {\n var summaryFoldedAnnotations = \"\".concat(GutterTooltip.annotationsToSummaryString(annotationsInFold), \" in folded code.\");\n annotation.text.push(summaryFoldedAnnotations);\n annotation.type.push(mostSevereAnnotationInFoldType);\n }\n }\n if (annotation.text.length === 0)\n return this.hide();\n var annotationMessages = { error: [], warning: [], info: [] };\n var iconClassName = gutter.$useSvgGutterIcons ? \"ace_icon_svg\" : \"ace_icon\";\n for (var i = 0; i < annotation.text.length; i++) {\n var line = \"<span class='ace_\".concat(annotation.type[i], \" \").concat(iconClassName, \"' aria-label='\").concat(GutterTooltip.annotationLabels[annotation.type[i].replace(\"_fold\", \"\")].singular, \"' role=img> </span> \").concat(annotation.text[i]);\n annotationMessages[annotation.type[i].replace(\"_fold\", \"\")].push(line);\n }\n var tooltipContent = [].concat(annotationMessages.error, annotationMessages.warning, annotationMessages.info).join(\"<br>\");\n this.setHtml(tooltipContent);\n this.$element.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', 'warning', 'info'];\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) {\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 && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPallete\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\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 != \"openCommandPallete\")\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 (!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) {\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 }, 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(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 = function (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(function () {\n oop.implement(this, EventEmitter);\n this.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n this.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n this.getCursor = function () {\n return this.lead.getPosition();\n };\n this.setAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n this.setSelectionAnchor = this.setAnchor;\n this.getAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n this.getSelectionAnchor = this.getAnchor;\n this.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n this.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 this.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 this.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n this.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n this.setRange =\n this.setSelectionRange = 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 this.$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 this.$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 this.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n this.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n this.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n this.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n this.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n this.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n this.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n this.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n this.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n this.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n this.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n this.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n this.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n this.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n this.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 this.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n this.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n this.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 this.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n this.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n this.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n this.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 this.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 this.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 this.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 this.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 this.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n this.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n this.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 this.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 this.$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 this.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 this.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 this.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n this.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n this.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 this.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n this.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 this.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n this.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n this.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n this.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 this.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 this.toJSON = function () {\n if (this.rangeCount) {\n 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 {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n this.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 this.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}).call(Selection.prototype);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar config = require(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = /** @class */ (function () {\n function Tokenizer(rules) {\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 = 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 = config.reportError;\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = 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]], lang.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 = 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 = 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 if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\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 var line = session.doc.getLine(cursor.row);\n var nextLine = session.doc.getLine(cursor.row + 1);\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, 3 + indent.length, 1, 3 + 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 = 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 for (var i = 0; i < delegations.length; i++) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\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 column == \"undefined\")\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, editor) {\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/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){\"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) && !/^comment.end/.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + (/^comment.start/.test(token.type) ? token.value.length : 2);\n iterator = new TokenIterator(this, row, column);\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 (!re.test(state))\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type) && !/^comment.start/.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 if (!/^comment.end/.test(token.type)) {\n range.end.column += token.value.length - 2;\n }\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 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 token = iterator.stepForward();\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 token = iterator.stepForward();\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/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 EditSession = /** @class */ (function () {\n function EditSession(text, mode) {\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(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.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 = 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, b) {\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(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(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.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 && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(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 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.$supportsUnicodeFlag === undefined) {\n options.$supportsUnicodeFlag = lang.supportsUnicodeFlag();\n }\n try {\n new RegExp(needle, \"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.regExp)\n needle = lang.escapeRegExp(needle);\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n if (options.$supportsUnicodeFlag) {\n modifier += \"u\";\n }\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 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 += 1;\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 += 1;\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})();\nvar 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 || key });\n 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 (!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 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.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 multiSelectAction: \"forEachLine\",\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 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(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(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) {\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 = [tagNamesRanges.openTagName, tagNamesRanges.closeTagName];\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 = new 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 startRow, endRow;\n if (this.selection.isEmpty()) {\n startRow = 0;\n endRow = session.doc.getLength() - 1;\n }\n else {\n var selectedRange = this.getSelectionRange();\n startRow = selectedRange.start.row;\n endRow = selectedRange.end.row;\n }\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var line, currIndent, range;\n var tab = session.getTabString();\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 line = session.getLine(row);\n currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n 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 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), false);\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\"));\n this.renderer.scroller.classList.add(this.renderer.keyboardFocusClassName);\n this.renderer.scroller.setAttribute(\"aria-label\", nls(\"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\"));\n this.renderer.$gutter.setAttribute(\"aria-label\", nls(\"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 }\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 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 (session, row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (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/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = /** @class */ (function () {\n function UndoManager() {\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 };\n UndoManager.prototype.fromJSON = function () {\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/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: [] };\n var annoText = annotation.text;\n var annoType = annotation.type;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) {\n rowInfo.text.push(annoText);\n rowInfo.type.push(annoType);\n }\n var className = annotation.className;\n if (className)\n rowInfo.className = className;\n else if (annoType == \"error\")\n rowInfo.className = \" ace_error\";\n else if (annoType == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (annoType == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\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;\n 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_warning\") {\n annotationInFold = true;\n foldAnnotationClass = \" ace_warning_fold\";\n continue;\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(\"Toggle code folding, rows $0 through $1\", [foldRange.start.row + 1, foldRange.end.row + 1]));\n else {\n if (fold)\n foldWidget.setAttribute(\"aria-label\", nls(\"Toggle code folding, rows $0 through $1\", [fold.start.row + 1, fold.end.row + 1]));\n else\n foldWidget.setAttribute(\"aria-label\", nls(\"Toggle code folding, row $0\", [row + 1]));\n }\n if (isClosedFold) {\n foldWidget.setAttribute(\"aria-expanded\", \"false\");\n foldWidget.setAttribute(\"title\", nls(\"Unfold code\"));\n }\n else {\n foldWidget.setAttribute(\"aria-expanded\", \"true\");\n foldWidget.setAttribute(\"title\", nls(\"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 annotationNode.setAttribute(\"aria-label\", nls(\"Read annotations row $0\", [rowText]));\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 annotationNode.setAttribute(\"aria-label\", nls(\"Read annotations row $0\", [rowText]));\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(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:0;\" + \"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:0;\" +\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\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\",\"ace/config\"], 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 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\", 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;\n 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;\n 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.com.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 (!this.$textToken[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(\"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.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\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 = 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 (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}\\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 {\\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 {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat;\\n background-position: 2px center;\\n}\\n.ace_dark .ace_gutter-cell.ace_info, .ace_dark .ace_icon.ace_info {\\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_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\\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_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;\\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}\\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 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}\\n\\n.ace_ghost_text {\\n opacity: 0.5;\\n font-style: italic;\\n white-space: pre;\\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\"], 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\");\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 (!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 (showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\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.$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 textLines = text.split(\"\\n\");\n this.addToken(textLines[0], \"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 if (textLines.length > 1) {\n this.$ghostTextWidget = {\n text: textLines.slice(1).join(\"\\n\"),\n row: insertPosition.row,\n column: insertPosition.column,\n className: \"ace_ghost_text\"\n };\n this.session.widgetManager.addLineWidget(this.$ghostTextWidget);\n }\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.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 }\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){// commands to enter multiselect mode\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){var 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 = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.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 text: [nls(\"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 el.innerHTML = gutterAnno.text.join(\"<br>\");\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 * @class 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 ","module.exports = require('./lib/axios');","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar transitionalDefaults = require('../defaults/transitional');\nvar AxiosError = require('../core/AxiosError');\nvar CanceledError = require('../cancel/CanceledError');\nvar parseProtocol = require('../helpers/parseProtocol');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n var responseType = config.responseType;\n var onCanceled;\n function done() {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(onCanceled);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', onCanceled);\n }\n }\n\n if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n var transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = config.responseType;\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken || config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = function(cancel) {\n if (!request) {\n return;\n }\n reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);\n request.abort();\n request = null;\n };\n\n config.cancelToken && config.cancelToken.subscribe(onCanceled);\n if (config.signal) {\n config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n var protocol = parseProtocol(fullPath);\n\n if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = require('./cancel/CanceledError');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\naxios.toFormData = require('./helpers/toFormData');\n\n// Expose AxiosError class\naxios.AxiosError = require('../lib/core/AxiosError');\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar CanceledError = require('./CanceledError');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(function(cancel) {\n if (!token._listeners) return;\n\n var i;\n var l = token._listeners.length;\n\n for (i = 0; i < l; i++) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = function(onfulfilled) {\n var _resolve;\n // eslint-disable-next-line func-names\n var promise = new Promise(function(resolve) {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Subscribe to the cancel signal\n */\n\nCancelToken.prototype.subscribe = function subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n};\n\n/**\n * Unsubscribe from the cancel signal\n */\n\nCancelToken.prototype.unsubscribe = function unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n var index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nvar AxiosError = require('../core/AxiosError');\nvar utils = require('../utils');\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction CanceledError(message) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nmodule.exports = CanceledError;\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\nvar buildFullPath = require('./buildFullPath');\nvar validator = require('../helpers/validator');\n\nvar validators = validator.validators;\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n var transitional = config.transitional;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n // filter out skipped interceptors\n var requestInterceptorChain = [];\n var synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n var responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n var promise;\n\n if (!synchronousRequestInterceptors) {\n var chain = [dispatchRequest, undefined];\n\n Array.prototype.unshift.apply(chain, requestInterceptorChain);\n chain = chain.concat(responseInterceptorChain);\n\n promise = Promise.resolve(config);\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n }\n\n\n var newConfig = config;\n while (requestInterceptorChain.length) {\n var onFulfilled = requestInterceptorChain.shift();\n var onRejected = requestInterceptorChain.shift();\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected(error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest(newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n while (responseInterceptorChain.length) {\n promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n var fullPath = buildFullPath(config.baseURL, config.url);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url: url,\n data: data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n response && (this.response = response);\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code,\n status: this.response && this.response.status ? this.response.status : null\n };\n }\n});\n\nvar prototype = AxiosError.prototype;\nvar descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED'\n// eslint-disable-next-line func-names\n].forEach(function(code) {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = function(error, code, config, request, response, customProps) {\n var axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nmodule.exports = AxiosError;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar CanceledError = require('../cancel/CanceledError');\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n return getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(prop) {\n if (prop in config2) {\n return getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n return getMergedValue(undefined, config1[prop]);\n }\n }\n\n var mergeMap = {\n 'url': valueFromConfig2,\n 'method': valueFromConfig2,\n 'data': valueFromConfig2,\n 'baseURL': defaultToConfig2,\n 'transformRequest': defaultToConfig2,\n 'transformResponse': defaultToConfig2,\n 'paramsSerializer': defaultToConfig2,\n 'timeout': defaultToConfig2,\n 'timeoutMessage': defaultToConfig2,\n 'withCredentials': defaultToConfig2,\n 'adapter': defaultToConfig2,\n 'responseType': defaultToConfig2,\n 'xsrfCookieName': defaultToConfig2,\n 'xsrfHeaderName': defaultToConfig2,\n 'onUploadProgress': defaultToConfig2,\n 'onDownloadProgress': defaultToConfig2,\n 'decompress': defaultToConfig2,\n 'maxContentLength': defaultToConfig2,\n 'maxBodyLength': defaultToConfig2,\n 'beforeRedirect': defaultToConfig2,\n 'transport': defaultToConfig2,\n 'httpAgent': defaultToConfig2,\n 'httpsAgent': defaultToConfig2,\n 'cancelToken': defaultToConfig2,\n 'socketPath': defaultToConfig2,\n 'responseEncoding': defaultToConfig2,\n 'validateStatus': mergeDirectKeys\n };\n\n utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {\n var merge = mergeMap[prop] || mergeDeepProperties;\n var configValue = merge(prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n};\n","'use strict';\n\nvar AxiosError = require('./AxiosError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar defaults = require('../defaults');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n var context = this || defaults;\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn.call(context, data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar normalizeHeaderName = require('../helpers/normalizeHeaderName');\nvar AxiosError = require('../core/AxiosError');\nvar transitionalDefaults = require('./transitional');\nvar toFormData = require('../helpers/toFormData');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('../adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('../adapters/http');\n }\n return adapter;\n}\n\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nvar defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n var isObjectPayload = utils.isObject(data);\n var contentType = headers && headers['Content-Type'];\n\n var isFileList;\n\n if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {\n var _FormData = this.env && this.env.FormData;\n return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());\n } else if (isObjectPayload || contentType === 'application/json') {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n var transitional = this.transitional || defaults.transitional;\n var silentJSONParsing = transitional && transitional.silentJSONParsing;\n var forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';\n\n if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: require('./env/FormData')\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nmodule.exports = {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","module.exports = {\n \"version\": \"0.27.2\"\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","// eslint-disable-next-line strict\nmodule.exports = null;\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nmodule.exports = function parseProtocol(url) {\n var match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n};\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Convert a data object to FormData\n * @param {Object} obj\n * @param {?Object} [formData]\n * @returns {Object}\n **/\n\nfunction toFormData(obj, formData) {\n // eslint-disable-next-line no-param-reassign\n formData = formData || new FormData();\n\n var stack = [];\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n function build(data, parentKey) {\n if (utils.isPlainObject(data) || utils.isArray(data)) {\n if (stack.indexOf(data) !== -1) {\n throw Error('Circular reference detected in ' + parentKey);\n }\n\n stack.push(data);\n\n utils.forEach(data, function each(value, key) {\n if (utils.isUndefined(value)) return;\n var fullKey = parentKey ? parentKey + '.' + key : key;\n var arr;\n\n if (value && !parentKey && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {\n // eslint-disable-next-line func-names\n arr.forEach(function(el) {\n !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));\n });\n return;\n }\n }\n\n build(value, fullKey);\n });\n\n stack.pop();\n } else {\n formData.append(parentKey, convertValue(data));\n }\n }\n\n build(obj);\n\n return formData;\n}\n\nmodule.exports = toFormData;\n","'use strict';\n\nvar VERSION = require('../env/data').version;\nvar AxiosError = require('../core/AxiosError');\n\nvar validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nvar deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return function(value, opt, opts) {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\n/**\n * Assert object's properties type\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n var keys = Object.keys(options);\n var i = keys.length;\n while (i-- > 0) {\n var opt = keys[i];\n var validator = schema[opt];\n if (validator) {\n var value = options[opt];\n var result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nmodule.exports = {\n assertOptions: assertOptions,\n validators: validators\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n// eslint-disable-next-line func-names\nvar kindOf = (function(cache) {\n // eslint-disable-next-line func-names\n return function(thing) {\n var str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n };\n})(Object.create(null));\n\nfunction kindOfTest(type) {\n type = type.toLowerCase();\n return function isKindOf(thing) {\n return kindOf(thing) === type;\n };\n}\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return Array.isArray(val);\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nvar isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nvar isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nvar isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nvar isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} thing The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(thing) {\n var pattern = '[object FormData]';\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) ||\n toString.call(thing) === pattern ||\n (isFunction(thing.toString) && thing.toString() === pattern)\n );\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n * @function\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nvar isURLSearchParams = kindOfTest('URLSearchParams');\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n */\n\nfunction inherits(constructor, superConstructor, props, descriptors) {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function} [filter]\n * @returns {Object}\n */\n\nfunction toFlatObject(sourceObj, destObj, filter) {\n var props;\n var i;\n var prop;\n var merged = {};\n\n destObj = destObj || {};\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if (!merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = Object.getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/*\n * determines whether a string ends with the characters of a specified string\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n * @returns {boolean}\n */\nfunction endsWith(str, searchString, position) {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n var lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object\n * @param {*} [thing]\n * @returns {Array}\n */\nfunction toArray(thing) {\n if (!thing) return null;\n var i = thing.length;\n if (isUndefined(i)) return null;\n var arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n// eslint-disable-next-line func-names\nvar isTypedArray = (function(TypedArray) {\n // eslint-disable-next-line func-names\n return function(thing) {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM,\n inherits: inherits,\n toFlatObject: toFlatObject,\n kindOf: kindOf,\n kindOfTest: kindOfTest,\n endsWith: endsWith,\n toArray: toArray,\n isTypedArray: isTypedArray,\n isFileList: isFileList\n};\n","'use strict';\n// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-basic-detection');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar tryToString = require('../internals/try-to-string');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = global.TypeError;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQUIRED = false;\nvar NAME, Constructor, Prototype;\n\nvar TypedArrayConstructorsList = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n BigInt64Array: 8,\n BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return klass === 'DataView'\n || hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar getTypedArrayConstructor = function (it) {\n var proto = getPrototypeOf(it);\n if (!isObject(proto)) return;\n var state = getInternalState(proto);\n return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);\n};\n\nvar isTypedArray = function (it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n if (isTypedArray(it)) return it;\n throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n throw TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced, options) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n delete TypedArrayConstructor.prototype[KEY];\n } catch (error) {\n // old WebKit bug - some methods are non-configurable\n try {\n TypedArrayConstructor.prototype[KEY] = property;\n } catch (error2) { /* empty */ }\n }\n }\n if (!TypedArrayPrototype[KEY] || forced) {\n defineBuiltIn(TypedArrayPrototype, KEY, forced ? property\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);\n }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n delete TypedArrayConstructor[KEY];\n } catch (error) { /* empty */ }\n }\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n } catch (error) { /* empty */ }\n } else return;\n }\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n defineBuiltIn(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n // eslint-disable-next-line no-shadow -- safe\n TypedArray = function TypedArray() {\n throw TypeError('Incorrect invocation');\n };\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n TypedArrayPrototype = TypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQUIRED = true;\n defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, {\n configurable: true,\n get: function () {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n }\n });\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n}\n\nmodule.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n getTypedArrayConstructor: getTypedArrayConstructor,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-basic-detection');\nvar FunctionName = require('../internals/function-name');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar fails = require('../internals/fails');\nvar anInstance = require('../internals/an-instance');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar IEEE754 = require('../internals/ieee754');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arrayFill = require('../internals/array-fill');\nvar arraySlice = require('../internals/array-slice-simple');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar getInternalArrayBufferState = InternalStateModule.getterFor(ARRAY_BUFFER);\nvar getInternalDataViewState = InternalStateModule.getterFor(DATA_VIEW);\nvar setInternalState = InternalStateModule.set;\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE];\nvar $DataView = global[DATA_VIEW];\nvar DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar Array = global.Array;\nvar RangeError = global.RangeError;\nvar fill = uncurryThis(arrayFill);\nvar reverse = uncurryThis([].reverse);\n\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function (number) {\n return [number & 0xFF];\n};\n\nvar packInt16 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function (buffer) {\n return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function (number) {\n return packIEEE754(number, 23, 4);\n};\n\nvar packFloat64 = function (number) {\n return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function (Constructor, key, getInternalState) {\n defineBuiltInAccessor(Constructor[PROTOTYPE], key, {\n configurable: true,\n get: function () {\n return getInternalState(this)[key];\n }\n });\n};\n\nvar get = function (view, count, index, isLittleEndian) {\n var store = getInternalDataViewState(view);\n var intIndex = toIndex(index);\n var boolIsLittleEndian = !!isLittleEndian;\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = store.bytes;\n var start = intIndex + store.byteOffset;\n var pack = arraySlice(bytes, start, start + count);\n return boolIsLittleEndian ? pack : reverse(pack);\n};\n\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\n var store = getInternalDataViewState(view);\n var intIndex = toIndex(index);\n var pack = conversion(+value);\n var boolIsLittleEndian = !!isLittleEndian;\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = store.bytes;\n var start = intIndex + store.byteOffset;\n for (var i = 0; i < count; i++) bytes[start + i] = pack[boolIsLittleEndian ? i : count - i - 1];\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, ArrayBufferPrototype);\n var byteLength = toIndex(length);\n setInternalState(this, {\n type: ARRAY_BUFFER,\n bytes: fill(Array(byteLength), 0),\n byteLength: byteLength\n });\n if (!DESCRIPTORS) {\n this.byteLength = byteLength;\n this.detached = false;\n }\n };\n\n ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE];\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, DataViewPrototype);\n anInstance(buffer, ArrayBufferPrototype);\n var bufferState = getInternalArrayBufferState(buffer);\n var bufferLength = bufferState.byteLength;\n var offset = toIntegerOrInfinity(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n setInternalState(this, {\n type: DATA_VIEW,\n buffer: buffer,\n byteLength: byteLength,\n byteOffset: offset,\n bytes: bufferState.bytes\n });\n if (!DESCRIPTORS) {\n this.buffer = buffer;\n this.byteLength = byteLength;\n this.byteOffset = offset;\n }\n };\n\n DataViewPrototype = $DataView[PROTOTYPE];\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, 'byteLength', getInternalArrayBufferState);\n addGetter($DataView, 'buffer', getInternalDataViewState);\n addGetter($DataView, 'byteLength', getInternalDataViewState);\n addGetter($DataView, 'byteOffset', getInternalDataViewState);\n }\n\n defineBuiltIns(DataViewPrototype, {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : false);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : false);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : false));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : false)) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : false), 23);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : false), 52);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : false);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : false);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : false);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : false);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : false);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : false);\n }\n });\n} else {\n var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME && NativeArrayBuffer.name !== ARRAY_BUFFER;\n /* eslint-disable no-new -- required for testing */\n if (!fails(function () {\n NativeArrayBuffer(1);\n }) || !fails(function () {\n new NativeArrayBuffer(-1);\n }) || fails(function () {\n new NativeArrayBuffer();\n new NativeArrayBuffer(1.5);\n new NativeArrayBuffer(NaN);\n return NativeArrayBuffer.length != 1 || INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;\n })) {\n /* eslint-enable no-new -- required for testing */\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, ArrayBufferPrototype);\n return new NativeArrayBuffer(toIndex(length));\n };\n\n $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype;\n\n for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) {\n createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n }\n }\n\n ArrayBufferPrototype.constructor = $ArrayBuffer;\n } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER);\n }\n\n // WebKit bug - the same parent prototype for typed arrays and data view\n if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) {\n setPrototypeOf(DataViewPrototype, ObjectPrototype);\n }\n\n // iOS Safari 7.x bug\n var testView = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = uncurryThis(DataViewPrototype.setInt8);\n testView.setInt8(0, 2147483648);\n testView.setInt8(1, 2147483649);\n if (testView.getInt8(0) || !testView.getInt8(1)) defineBuiltIns(DataViewPrototype, {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8(this, byteOffset, value << 24 >> 24);\n }\n }, { unsafe: true });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\n\nmodule.exports = {\n ArrayBuffer: $ArrayBuffer,\n DataView: $DataView\n};\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n// eslint-disable-next-line es/no-array-prototype-copywithin -- safe\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else deletePropertyOrThrow(O, to);\n to += inc;\n from += inc;\n } return O;\n};\n","'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nmodule.exports = function (Constructor, list) {\n var index = 0;\n var length = lengthOfArrayLike(list);\n var result = new Constructor(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ findLast, findLastIndex }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_FIND_LAST_INDEX = TYPE == 1;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var index = lengthOfArrayLike(self);\n var value, result;\n while (index-- > 0) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (result) switch (TYPE) {\n case 0: return value; // findLast\n case 1: return index; // findLastIndex\n }\n }\n return IS_FIND_LAST_INDEX ? -1 : undefined;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.findLast` method\n // https://github.com/tc39/proposal-array-find-from-last\n findLast: createMethod(0),\n // `Array.prototype.findLastIndex` method\n // https://github.com/tc39/proposal-array-find-from-last\n findLastIndex: createMethod(1)\n};\n","'use strict';\n/* eslint-disable es/no-array-prototype-lastindexof -- safe */\nvar apply = require('../internals/function-apply');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar min = Math.min;\nvar $lastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return apply($lastIndexOf, this, arguments) || 0;\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var index = length - 1;\n if (arguments.length > 1) index = min(index, toIntegerOrInfinity(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n return -1;\n} : $lastIndexOf;\n","'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.toReversed\n// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.toReversed\nmodule.exports = function (O, C) {\n var len = lengthOfArrayLike(O);\n var A = new C(len);\n var k = 0;\n for (; k < len; k++) A[k] = O[len - k - 1];\n return A;\n};\n","'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $RangeError = RangeError;\n\n// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.with\n// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.with\nmodule.exports = function (O, C, index, value) {\n var len = lengthOfArrayLike(O);\n var relativeIndex = toIntegerOrInfinity(index);\n var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex;\n if (actualIndex >= len || actualIndex < 0) throw $RangeError('Incorrect index');\n var A = new C(len);\n var k = 0;\n for (; k < len; k++) A[k] = k === actualIndex ? value : O[k];\n return A;\n};\n","'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) defineBuiltIn(target, key, src[key], options);\n return target;\n};\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg) : false;\n var element, elementLen;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n elementLen = lengthOfArrayLike(element);\n targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1;\n } else {\n doesNotExceedSafeInteger(targetIndex + 1);\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n","'use strict';\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar $Array = Array;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n var buffer = $Array(bytes);\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n var index = 0;\n var exponent, mantissa, c;\n number = abs(number);\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number || number === Infinity) {\n // eslint-disable-next-line no-self-compare -- NaN check\n mantissa = number != number ? 1 : 0;\n exponent = eMax;\n } else {\n exponent = floor(log(number) / LN2);\n c = pow(2, -exponent);\n if (number * c < 1) {\n exponent--;\n c *= 2;\n }\n if (exponent + eBias >= 1) {\n number += rt / c;\n } else {\n number += rt * pow(2, 1 - eBias);\n }\n if (number * c >= 2) {\n exponent++;\n c /= 2;\n }\n if (exponent + eBias >= eMax) {\n mantissa = 0;\n exponent = eMax;\n } else if (exponent + eBias >= 1) {\n mantissa = (number * c - 1) * pow(2, mantissaLength);\n exponent = exponent + eBias;\n } else {\n mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n exponent = 0;\n }\n }\n while (mantissaLength >= 8) {\n buffer[index++] = mantissa & 255;\n mantissa /= 256;\n mantissaLength -= 8;\n }\n exponent = exponent << mantissaLength | mantissa;\n exponentLength += mantissaLength;\n while (exponentLength > 0) {\n buffer[index++] = exponent & 255;\n exponent /= 256;\n exponentLength -= 8;\n }\n buffer[--index] |= sign * 128;\n return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n var bytes = buffer.length;\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var nBits = exponentLength - 7;\n var index = bytes - 1;\n var sign = buffer[index--];\n var exponent = sign & 127;\n var mantissa;\n sign >>= 7;\n while (nBits > 0) {\n exponent = exponent * 256 + buffer[index--];\n nBits -= 8;\n }\n mantissa = exponent & (1 << -nBits) - 1;\n exponent >>= -nBits;\n nBits += mantissaLength;\n while (nBits > 0) {\n mantissa = mantissa * 256 + buffer[index--];\n nBits -= 8;\n }\n if (exponent === 0) {\n exponent = 1 - eBias;\n } else if (exponent === eMax) {\n return mantissa ? NaN : sign ? -Infinity : Infinity;\n } else {\n mantissa = mantissa + pow(2, mantissaLength);\n exponent = exponent - eBias;\n } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n pack: pack,\n unpack: unpack\n};\n","'use strict';\nvar classof = require('../internals/classof');\n\nmodule.exports = function (it) {\n var klass = classof(it);\n return klass == 'BigInt64Array' || klass == 'BigUint64Array';\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","'use strict';\nvar log = Math.log;\nvar LOG10E = Math.LOG10E;\n\n// eslint-disable-next-line es/no-math-log10 -- safe\nmodule.exports = Math.log10 || function log10(x) {\n return log(x) * LOG10E;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar charAt = uncurryThis(''.charAt);\nvar $parseFloat = global.parseFloat;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseFloat(Object(ITERATOR)); }));\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(toString(string));\n var result = $parseFloat(trimmedString);\n return result === 0 && charAt(trimmedString, 0) == '-' ? -0 : result;\n} : $parseFloat;\n","'use strict';\n// `SameValue` abstract operation\n// https://tc39.es/ecma262/#sec-samevalue\n// eslint-disable-next-line es/no-object-is -- safe\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\n// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /Version\\/10(?:\\.\\d+){1,2}(?: [\\w./]+)?(?: Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar $repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = toString(requireObjectCoercible($this));\n var intMaxLength = toLength(maxLength);\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : toString(fillString);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr == '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.es/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.es/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\n\nvar $TypeError = TypeError;\n\n// `ToBigInt` abstract operation\n// https://tc39.es/ecma262/#sec-tobigint\nmodule.exports = function (argument) {\n var prim = toPrimitive(argument, 'number');\n if (typeof prim == 'number') throw $TypeError(\"Can't convert number to bigint\");\n // eslint-disable-next-line es/no-bigint -- safe\n return BigInt(prim);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\n\nvar $RangeError = RangeError;\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toIntegerOrInfinity(it);\n var length = toLength(number);\n if (number !== length) throw $RangeError('Wrong length or index');\n return length;\n};\n","'use strict';\nvar toPositiveInteger = require('../internals/to-positive-integer');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw $RangeError('Wrong offset');\n return offset;\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $RangeError = RangeError;\n\nmodule.exports = function (it) {\n var result = toIntegerOrInfinity(it);\n if (result < 0) throw $RangeError(\"The argument can't be less than 0\");\n return result;\n};\n","'use strict';\nvar round = Math.round;\n\nmodule.exports = function (it) {\n var value = round(it);\n return value < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar anInstance = require('../internals/an-instance');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar isIntegralNumber = require('../internals/is-integral-number');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar toOffset = require('../internals/to-offset');\nvar toUint8Clamped = require('../internals/to-uint8-clamped');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar create = require('../internals/object-create');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar typedArrayFrom = require('../internals/typed-array-from');\nvar forEach = require('../internals/array-iteration').forEach;\nvar setSpecies = require('../internals/set-species');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar InternalStateModule = require('../internals/internal-state');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar enforceInternalState = InternalStateModule.enforce;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar ArrayBufferPrototype = ArrayBuffer.prototype;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n aTypedArrayConstructor(C);\n var index = 0;\n var length = list.length;\n var result = new C(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n\nvar addGetter = function (it, key) {\n defineBuiltInAccessor(it, key, {\n configurable: true,\n get: function () {\n return getInternalState(this)[key];\n }\n });\n};\n\nvar isArrayBuffer = function (it) {\n var klass;\n return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n return isTypedArray(target)\n && !isSymbol(key)\n && key in target\n && isIntegralNumber(+key)\n && key >= 0;\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n key = toPropertyKey(key);\n return isTypedArrayIndex(target, key)\n ? createPropertyDescriptor(2, target[key])\n : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n key = toPropertyKey(key);\n if (isTypedArrayIndex(target, key)\n && isObject(descriptor)\n && hasOwn(descriptor, 'value')\n && !hasOwn(descriptor, 'get')\n && !hasOwn(descriptor, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !descriptor.configurable\n && (!hasOwn(descriptor, 'writable') || descriptor.writable)\n && (!hasOwn(descriptor, 'enumerable') || descriptor.enumerable)\n ) {\n target[key] = descriptor.value;\n return target;\n } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n definePropertyModule.f = wrappedDefineProperty;\n addGetter(TypedArrayPrototype, 'buffer');\n addGetter(TypedArrayPrototype, 'byteOffset');\n addGetter(TypedArrayPrototype, 'byteLength');\n addGetter(TypedArrayPrototype, 'length');\n }\n\n $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n defineProperty: wrappedDefineProperty\n });\n\n module.exports = function (TYPE, wrapper, CLAMPED) {\n var BYTES = TYPE.match(/\\d+/)[0] / 8;\n var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + TYPE;\n var SETTER = 'set' + TYPE;\n var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n var TypedArrayConstructor = NativeTypedArrayConstructor;\n var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n var exported = {};\n\n var getter = function (that, index) {\n var data = getInternalState(that);\n return data.view[GETTER](index * BYTES + data.byteOffset, true);\n };\n\n var setter = function (that, index, value) {\n var data = getInternalState(that);\n data.view[SETTER](index * BYTES + data.byteOffset, CLAMPED ? toUint8Clamped(value) : value, true);\n };\n\n var addElement = function (that, index) {\n nativeDefineProperty(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n anInstance(that, TypedArrayConstructorPrototype);\n var index = 0;\n var byteOffset = 0;\n var buffer, byteLength, length;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new ArrayBuffer(byteLength);\n } else if (isArrayBuffer(data)) {\n buffer = data;\n byteOffset = toOffset(offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - byteOffset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (isTypedArray(data)) {\n return fromList(TypedArrayConstructor, data);\n } else {\n return call(typedArrayFrom, TypedArrayConstructor, data);\n }\n setInternalState(that, {\n buffer: buffer,\n byteOffset: byteOffset,\n byteLength: byteLength,\n length: length,\n view: new DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n anInstance(dummy, TypedArrayConstructorPrototype);\n return inheritIfRequired(function () {\n if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n if (isArrayBuffer(data)) return $length !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n : typedArrayOffset !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n : new NativeTypedArrayConstructor(data);\n if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n return call(typedArrayFrom, TypedArrayConstructor, data);\n }(), dummy, TypedArrayConstructor);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n if (!(key in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n }\n });\n TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n }\n\n if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n }\n\n enforceInternalState(TypedArrayConstructorPrototype).TypedArrayConstructor = TypedArrayConstructor;\n\n if (TYPED_ARRAY_TAG) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n }\n\n var FORCED = TypedArrayConstructor != NativeTypedArrayConstructor;\n\n exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n $({ global: true, constructor: true, forced: FORCED, sham: !NATIVE_ARRAY_BUFFER_VIEWS }, exported);\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n }\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n }\n\n setSpecies(CONSTRUCTOR_NAME);\n };\n} else module.exports = function () { /* empty */ };\n","'use strict';\n/* eslint-disable no-new -- required for testing */\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar NATIVE_ARRAY_BUFFER_VIEWS = require('../internals/array-buffer-view-core').NATIVE_ARRAY_BUFFER_VIEWS;\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n Int8Array(1);\n}) || !fails(function () {\n new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n new Int8Array();\n new Int8Array(null);\n new Int8Array(1.5);\n new Int8Array(iterable);\n}, true) || fails(function () {\n // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n","'use strict';\nvar arrayFromConstructorAndList = require('../internals/array-from-constructor-and-list');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nmodule.exports = function (instance, list) {\n return arrayFromConstructorAndList(typedArraySpeciesConstructor(instance), list);\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar aConstructor = require('../internals/a-constructor');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isBigIntArray = require('../internals/is-big-int-array');\nvar aTypedArrayConstructor = require('../internals/array-buffer-view-core').aTypedArrayConstructor;\nvar toBigInt = require('../internals/to-big-int');\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n var C = aConstructor(this);\n var O = toObject(source);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var i, length, result, thisIsBigIntArray, value, step, iterator, next;\n if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n O = [];\n while (!(step = call(next, iterator)).done) {\n O.push(step.value);\n }\n }\n if (mapping && argumentsLength > 2) {\n mapfn = bind(mapfn, arguments[2]);\n }\n length = lengthOfArrayLike(O);\n result = new (aTypedArrayConstructor(C))(length);\n thisIsBigIntArray = isBigIntArray(result);\n for (i = 0; length > i; i++) {\n value = mapping ? mapfn(O[i], i) : O[i];\n // FF30- typed arrays doesn't properly convert objects to typed array values\n result[i] = thisIsBigIntArray ? toBigInt(value) : +value;\n }\n return result;\n};\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\n\n// a part of `TypedArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#typedarray-species-create\nmodule.exports = function (originalArray) {\n return aTypedArrayConstructor(speciesConstructor(originalArray, getTypedArrayConstructor(originalArray)));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar fails = require('../internals/fails');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar anObject = require('../internals/an-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar DataView = ArrayBufferModule.DataView;\nvar DataViewPrototype = DataView.prototype;\nvar nativeArrayBufferSlice = uncurryThis(ArrayBuffer.prototype.slice);\nvar getUint8 = uncurryThis(DataViewPrototype.getUint8);\nvar setUint8 = uncurryThis(DataViewPrototype.setUint8);\n\nvar INCORRECT_SLICE = fails(function () {\n return !new ArrayBuffer(2).slice(1, undefined).byteLength;\n});\n\n// `ArrayBuffer.prototype.slice` method\n// https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice\n$({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, {\n slice: function slice(start, end) {\n if (nativeArrayBufferSlice && end === undefined) {\n return nativeArrayBufferSlice(anObject(this), start); // FF fix\n }\n var length = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = new (speciesConstructor(this, ArrayBuffer))(toLength(fin - first));\n var viewSource = new DataView(this);\n var viewTarget = new DataView(result);\n var index = 0;\n while (first < fin) {\n setUint8(viewTarget, index++, getUint8(viewSource, first++));\n } return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-array.prototype.flatmap\n$({ target: 'Array', proto: true }, {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen = lengthOfArrayLike(O);\n var A;\n aCallable(callbackfn);\n A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar lastIndexOf = require('../internals/array-last-index-of');\n\n// `Array.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\n// eslint-disable-next-line es/no-array-prototype-lastindexof -- required for testing\n$({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, {\n lastIndexOf: lastIndexOf\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\n\nvar nativeReverse = uncurryThis([].reverse);\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n reverse: function reverse() {\n // eslint-disable-next-line no-self-assign -- dirty hack\n if (isArray(this)) this.length = this.length;\n return nativeReverse(this);\n }\n});\n","'use strict';\n// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flatMap');\n","'use strict';\nvar global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar thisNumberValue = require('../internals/this-number-value');\nvar $repeat = require('../internals/string-repeat');\nvar log10 = require('../internals/math-log10');\nvar fails = require('../internals/fails');\n\nvar $RangeError = RangeError;\nvar $String = String;\nvar $isFinite = isFinite;\nvar abs = Math.abs;\nvar floor = Math.floor;\nvar pow = Math.pow;\nvar round = Math.round;\nvar nativeToExponential = uncurryThis(1.0.toExponential);\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\n\n// Edge 17-\nvar ROUNDS_PROPERLY = nativeToExponential(-6.9e-11, 4) === '-6.9000e-11'\n // IE11- && Edge 14-\n && nativeToExponential(1.255, 2) === '1.25e+0'\n // FF86-, V8 ~ Chrome 49-50\n && nativeToExponential(12345, 3) === '1.235e+4'\n // FF86-, V8 ~ Chrome 49-50\n && nativeToExponential(25, 0) === '3e+1';\n\n// IE8-\nvar throwsOnInfinityFraction = function () {\n return fails(function () {\n nativeToExponential(1, Infinity);\n }) && fails(function () {\n nativeToExponential(1, -Infinity);\n });\n};\n\n// Safari <11 && FF <50\nvar properNonFiniteThisCheck = function () {\n return !fails(function () {\n nativeToExponential(Infinity, Infinity);\n nativeToExponential(NaN, Infinity);\n });\n};\n\nvar FORCED = !ROUNDS_PROPERLY || !throwsOnInfinityFraction() || !properNonFiniteThisCheck();\n\n// `Number.prototype.toExponential` method\n// https://tc39.es/ecma262/#sec-number.prototype.toexponential\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toExponential: function toExponential(fractionDigits) {\n var x = thisNumberValue(this);\n if (fractionDigits === undefined) return nativeToExponential(x);\n var f = toIntegerOrInfinity(fractionDigits);\n if (!$isFinite(x)) return String(x);\n // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation\n if (f < 0 || f > 20) throw $RangeError('Incorrect fraction digits');\n if (ROUNDS_PROPERLY) return nativeToExponential(x, f);\n var s = '';\n var m = '';\n var e = 0;\n var c = '';\n var d = '';\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x === 0) {\n e = 0;\n m = repeat('0', f + 1);\n } else {\n // this block is based on https://gist.github.com/SheetJSDev/1100ad56b9f856c95299ed0e068eea08\n // TODO: improve accuracy with big fraction digits\n var l = log10(x);\n e = floor(l);\n var n = 0;\n var w = pow(10, e - f);\n n = round(x / w);\n if (2 * x >= (2 * n + 1) * w) {\n n += 1;\n }\n if (n >= pow(10, f + 1)) {\n n /= 10;\n e += 1;\n }\n m = $String(n);\n }\n if (f !== 0) {\n m = stringSlice(m, 0, 1) + '.' + stringSlice(m, 1);\n }\n if (e === 0) {\n c = '+';\n d = '0';\n } else {\n c = e > 0 ? '+' : '-';\n d = $String(abs(e));\n }\n m += 'e' + c + d;\n return s + m;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $parseFloat = require('../internals/number-parse-float');\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\n$({ global: true, forced: parseFloat != $parseFloat }, {\n parseFloat: $parseFloat\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar isCallable = require('../internals/is-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar getSubstitution = require('../internals/get-substitution');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar $TypeError = TypeError;\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar max = Math.max;\n\nvar stringIndexOf = function (string, searchValue, fromIndex) {\n if (fromIndex > string.length) return -1;\n if (searchValue === '') return fromIndex;\n return indexOf(string, searchValue, fromIndex);\n};\n\n// `String.prototype.replaceAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.replaceall\n$({ target: 'String', proto: true }, {\n replaceAll: function replaceAll(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, replacement;\n var position = 0;\n var endOfLastMatch = 0;\n var result = '';\n if (!isNullOrUndefined(searchValue)) {\n IS_REG_EXP = isRegExp(searchValue);\n if (IS_REG_EXP) {\n flags = toString(requireObjectCoercible(getRegExpFlags(searchValue)));\n if (!~indexOf(flags, 'g')) throw $TypeError('`.replaceAll` does not allow non-global regexes');\n }\n replacer = getMethod(searchValue, REPLACE);\n if (replacer) {\n return call(replacer, searchValue, O, replaceValue);\n } else if (IS_PURE && IS_REG_EXP) {\n return replace(toString(O), searchValue, replaceValue);\n }\n }\n string = toString(O);\n searchString = toString(searchValue);\n functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n searchLength = searchString.length;\n advanceBy = max(1, searchLength);\n position = stringIndexOf(string, searchString, 0);\n while (position !== -1) {\n replacement = functionalReplace\n ? toString(replaceValue(searchString, position, string))\n : getSubstitution(searchString, string, position, [], undefined, replaceValue);\n result += stringSlice(string, endOfLastMatch, position) + replacement;\n endOfLastMatch = position + searchLength;\n position = stringIndexOf(string, searchString, position + advanceBy);\n }\n if (endOfLastMatch < string.length) {\n result += stringSlice(string, endOfLastMatch);\n }\n return result;\n }\n});\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar sameValue = require('../internals/same-value');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@search logic\nfixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.es/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = requireObjectCoercible(this);\n var searcher = isNullOrUndefined(regexp) ? undefined : getMethod(regexp, SEARCH);\n return searcher ? call(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@search\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeSearch, rx, S);\n\n if (res.done) return res.value;\n\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag(getBuiltIn('Symbol'), 'Symbol');\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.at` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.at\nexportTypedArrayMethod('at', function at(index) {\n var O = aTypedArray(this);\n var len = lengthOfArrayLike(O);\n var relativeIndex = toIntegerOrInfinity(index);\n var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n return (k < 0 || k >= len) ? undefined : O[k];\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $ArrayCopyWithin = require('../internals/array-copy-within');\n\nvar u$ArrayCopyWithin = uncurryThis($ArrayCopyWithin);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n return u$ArrayCopyWithin(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $every = require('../internals/array-iteration').every;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $fill = require('../internals/array-fill');\nvar toBigInt = require('../internals/to-big-int');\nvar classof = require('../internals/classof');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar slice = uncurryThis(''.slice);\n\n// V8 ~ Chrome < 59, Safari < 14.1, FF < 55, Edge <=18\nvar CONVERSION_BUG = fails(function () {\n var count = 0;\n // eslint-disable-next-line es/no-typed-arrays -- safe\n new Int8Array(2).fill({ valueOf: function () { return count++; } });\n return count !== 1;\n});\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n var length = arguments.length;\n aTypedArray(this);\n var actualValue = slice(classof(this), 0, 3) === 'Big' ? toBigInt(value) : +value;\n return call($fill, this, actualValue, length > 1 ? arguments[1] : undefined, length > 2 ? arguments[2] : undefined);\n}, CONVERSION_BUG);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $filter = require('../internals/array-iteration').filter;\nvar fromSpeciesAndList = require('../internals/typed-array-from-species-and-list');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return fromSpeciesAndList(this, list);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findIndex = require('../internals/array-iteration').findIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findLastIndex = require('../internals/array-iteration-from-last').findLastIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findLastIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findlastindex\nexportTypedArrayMethod('findLastIndex', function findLastIndex(predicate /* , thisArg */) {\n return $findLastIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findLast = require('../internals/array-iteration-from-last').findLast;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findLast` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findlast\nexportTypedArrayMethod('findLast', function findLast(predicate /* , thisArg */) {\n return $findLast(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $find = require('../internals/array-iteration').find;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $includes = require('../internals/array-includes').includes;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $indexOf = require('../internals/array-includes').indexOf;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayIterators = require('../modules/es.array.iterator');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = uncurryThis(ArrayIterators.values);\nvar arrayKeys = uncurryThis(ArrayIterators.keys);\nvar arrayEntries = uncurryThis(ArrayIterators.entries);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar TypedArrayPrototype = Uint8Array && Uint8Array.prototype;\n\nvar GENERIC = !fails(function () {\n TypedArrayPrototype[ITERATOR].call([1]);\n});\n\nvar ITERATOR_IS_VALUES = !!TypedArrayPrototype\n && TypedArrayPrototype.values\n && TypedArrayPrototype[ITERATOR] === TypedArrayPrototype.values\n && TypedArrayPrototype.values.name === 'values';\n\nvar typedArrayValues = function values() {\n return arrayValues(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n return arrayEntries(aTypedArray(this));\n}, GENERIC);\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n return arrayKeys(aTypedArray(this));\n}, GENERIC);\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = uncurryThis([].join);\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\nexportTypedArrayMethod('join', function join(separator) {\n return $join(aTypedArray(this), separator);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar apply = require('../internals/function-apply');\nvar $lastIndexOf = require('../internals/array-last-index-of');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n var length = arguments.length;\n return apply($lastIndexOf, aTypedArray(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $map = require('../internals/array-iteration').map;\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n return new (typedArraySpeciesConstructor(O))(length);\n });\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduceRight = require('../internals/array-reduce').right;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRight` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduceRight(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduce = require('../internals/array-reduce').left;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduce(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n var that = this;\n var length = aTypedArray(that).length;\n var middle = floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n});\n","'use strict';\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toOffset = require('../internals/to-offset');\nvar toIndexedObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar $set = Int8ArrayPrototype && Int8ArrayPrototype.set;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS = !fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n var array = new Uint8ClampedArray(2);\n call($set, array, { length: 1, 0: 3 }, 1);\n return array[1] !== 3;\n});\n\n// https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other\nvar TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {\n var array = new Int8Array(2);\n array.set(1);\n array.set('2', 1);\n return array[0] !== 0 || array[1] !== 2;\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var src = toIndexedObject(arrayLike);\n if (WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS) return call($set, this, src, offset);\n var length = this.length;\n var len = lengthOfArrayLike(src);\n var index = 0;\n if (len + offset > length) throw RangeError('Wrong length');\n while (index < len) this[offset + index] = src[index++];\n}, !WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\nvar fails = require('../internals/fails');\nvar arraySlice = require('../internals/array-slice');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n var list = arraySlice(aTypedArray(this), start, end);\n var C = typedArraySpeciesConstructor(this);\n var index = 0;\n var length = list.length;\n var result = new C(length);\n while (length > index) result[index] = list[index++];\n return result;\n}, FORCED);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $some = require('../internals/array-iteration').some;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar fails = require('../internals/fails');\nvar aCallable = require('../internals/a-callable');\nvar internalSort = require('../internals/array-sort');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar Uint16Array = global.Uint16Array;\nvar nativeSort = Uint16Array && uncurryThis(Uint16Array.prototype.sort);\n\n// WebKit\nvar ACCEPT_INCORRECT_ARGUMENTS = !!nativeSort && !(fails(function () {\n nativeSort(new Uint16Array(2), null);\n}) && fails(function () {\n nativeSort(new Uint16Array(2), {});\n}));\n\nvar STABLE_SORT = !!nativeSort && !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 74;\n if (FF) return FF < 67;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 602;\n\n var array = new Uint16Array(516);\n var expected = Array(516);\n var index, mod;\n\n for (index = 0; index < 516; index++) {\n mod = index % 4;\n array[index] = 515 - index;\n expected[index] = index - 2 * mod + 3;\n }\n\n nativeSort(array, function (a, b) {\n return (a / 4 | 0) - (b / 4 | 0);\n });\n\n for (index = 0; index < 516; index++) {\n if (array[index] !== expected[index]) return true;\n }\n});\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (y !== y) return -1;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (x !== x) return 1;\n if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;\n return x > y;\n };\n};\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n if (STABLE_SORT) return nativeSort(this, comparefn);\n\n return internalSort(aTypedArray(this), getSortCompare(comparefn));\n}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar fails = require('../internals/fails');\nvar arraySlice = require('../internals/array-slice');\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n return apply(\n $toLocaleString,\n TO_LOCALE_STRING_BUG ? arraySlice(aTypedArray(this)) : aTypedArray(this),\n arraySlice(arguments)\n );\n}, FORCED);\n","'use strict';\nvar arrayToReversed = require('../internals/array-to-reversed');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\n\n// `%TypedArray%.prototype.toReversed` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.toreversed\nexportTypedArrayMethod('toReversed', function toReversed() {\n return arrayToReversed(aTypedArray(this), getTypedArrayConstructor(this));\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar arrayFromConstructorAndList = require('../internals/array-from-constructor-and-list');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar sort = uncurryThis(ArrayBufferViewCore.TypedArrayPrototype.sort);\n\n// `%TypedArray%.prototype.toSorted` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tosorted\nexportTypedArrayMethod('toSorted', function toSorted(compareFn) {\n if (compareFn !== undefined) aCallable(compareFn);\n var O = aTypedArray(this);\n var A = arrayFromConstructorAndList(getTypedArrayConstructor(O), O);\n return sort(A, compareFn);\n});\n","'use strict';\nvar exportTypedArrayMethod = require('../internals/array-buffer-view-core').exportTypedArrayMethod;\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar join = uncurryThis([].join);\n\nif (fails(function () { arrayToString.call({}); })) {\n arrayToString = function toString() {\n return join(this);\n };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n","'use strict';\nvar createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","'use strict';\nvar arrayWith = require('../internals/array-with');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar isBigIntArray = require('../internals/is-big-int-array');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toBigInt = require('../internals/to-big-int');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar PROPER_ORDER = !!function () {\n try {\n // eslint-disable-next-line no-throw-literal, es/no-typed-arrays, es/no-array-prototype-with -- required for testing\n new Int8Array(1)['with'](2, { valueOf: function () { throw 8; } });\n } catch (error) {\n // some early implementations, like WebKit, does not follow the final semantic\n // https://github.com/tc39/proposal-change-array-by-copy/pull/86\n return error === 8;\n }\n}();\n\n// `%TypedArray%.prototype.with` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.with\nexportTypedArrayMethod('with', { 'with': function (index, value) {\n var O = aTypedArray(this);\n var relativeIndex = toIntegerOrInfinity(index);\n var actualValue = isBigIntArray(O) ? toBigInt(value) : +value;\n return arrayWith(O, getTypedArrayConstructor(O), relativeIndex, actualValue);\n} }['with'], !PROPER_ORDER);\n","/* global window, exports, define */\n\n!function() {\n 'use strict'\n\n var re = {\n not_string: /[^s]/,\n not_bool: /[^t]/,\n not_type: /[^T]/,\n not_primitive: /[^v]/,\n number: /[diefg]/,\n numeric_arg: /[bcdiefguxX]/,\n json: /[j]/,\n not_json: /[^j]/,\n text: /^[^\\x25]+/,\n modulo: /^\\x25{2}/,\n placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n key: /^([a-z_][a-z_\\d]*)/i,\n key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n index_access: /^\\[(\\d+)\\]/,\n sign: /^[+-]/\n }\n\n function sprintf(key) {\n // `arguments` is not an array, but should be fine for this call\n return sprintf_format(sprintf_parse(key), arguments)\n }\n\n function vsprintf(fmt, argv) {\n return sprintf.apply(null, [fmt].concat(argv || []))\n }\n\n function sprintf_format(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n for (i = 0; i < tree_length; i++) {\n if (typeof parse_tree[i] === 'string') {\n output += parse_tree[i]\n }\n else if (typeof parse_tree[i] === 'object') {\n ph = parse_tree[i] // convenience purposes only\n if (ph.keys) { // keyword argument\n arg = argv[cursor]\n for (k = 0; k < ph.keys.length; k++) {\n if (arg == undefined) {\n throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n }\n arg = arg[ph.keys[k]]\n }\n }\n else if (ph.param_no) { // positional argument (explicit)\n arg = argv[ph.param_no]\n }\n else { // positional argument (implicit)\n arg = argv[cursor++]\n }\n\n if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n arg = arg()\n }\n\n if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n }\n\n if (re.number.test(ph.type)) {\n is_positive = arg >= 0\n }\n\n switch (ph.type) {\n case 'b':\n arg = parseInt(arg, 10).toString(2)\n break\n case 'c':\n arg = String.fromCharCode(parseInt(arg, 10))\n break\n case 'd':\n case 'i':\n arg = parseInt(arg, 10)\n break\n case 'j':\n arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n break\n case 'e':\n arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n break\n case 'f':\n arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n break\n case 'g':\n arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n break\n case 'o':\n arg = (parseInt(arg, 10) >>> 0).toString(8)\n break\n case 's':\n arg = String(arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 't':\n arg = String(!!arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'T':\n arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'u':\n arg = parseInt(arg, 10) >>> 0\n break\n case 'v':\n arg = arg.valueOf()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'x':\n arg = (parseInt(arg, 10) >>> 0).toString(16)\n break\n case 'X':\n arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n break\n }\n if (re.json.test(ph.type)) {\n output += arg\n }\n else {\n if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n sign = is_positive ? '+' : '-'\n arg = arg.toString().replace(re.sign, '')\n }\n else {\n sign = ''\n }\n pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n pad_length = ph.width - (sign + arg).length\n pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n }\n }\n }\n return output\n }\n\n var sprintf_cache = Object.create(null)\n\n function sprintf_parse(fmt) {\n if (sprintf_cache[fmt]) {\n return sprintf_cache[fmt]\n }\n\n var _fmt = fmt, match, parse_tree = [], arg_names = 0\n while (_fmt) {\n if ((match = re.text.exec(_fmt)) !== null) {\n parse_tree.push(match[0])\n }\n else if ((match = re.modulo.exec(_fmt)) !== null) {\n parse_tree.push('%')\n }\n else if ((match = re.placeholder.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1\n var field_list = [], replacement_field = match[2], field_match = []\n if ((field_match = re.key.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n }\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n match[2] = field_list\n }\n else {\n arg_names |= 2\n }\n if (arg_names === 3) {\n throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n }\n\n parse_tree.push(\n {\n placeholder: match[0],\n param_no: match[1],\n keys: match[2],\n sign: match[3],\n pad_char: match[4],\n align: match[5],\n width: match[6],\n precision: match[7],\n type: match[8]\n }\n )\n }\n else {\n throw new SyntaxError('[sprintf] unexpected placeholder')\n }\n _fmt = _fmt.substring(match[0].length)\n }\n return sprintf_cache[fmt] = parse_tree\n }\n\n /**\n * export to either browser or node.js\n */\n /* eslint-disable quote-props */\n if (typeof exports !== 'undefined') {\n exports['sprintf'] = sprintf\n exports['vsprintf'] = vsprintf\n }\n if (typeof window !== 'undefined') {\n window['sprintf'] = sprintf\n window['vsprintf'] = vsprintf\n\n if (typeof define === 'function' && define['amd']) {\n define(function() {\n return {\n 'sprintf': sprintf,\n 'vsprintf': vsprintf\n }\n })\n }\n }\n /* eslint-enable quote-props */\n}(); // eslint-disable-line\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n var F = function F() {};\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","import _typeof from \"./typeof.js\";\nexport default function _regeneratorRuntime() {\n \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n _regeneratorRuntime = function _regeneratorRuntime() {\n return exports;\n };\n var exports = {},\n Op = Object.prototype,\n hasOwn = Op.hasOwnProperty,\n defineProperty = Object.defineProperty || function (obj, key, desc) {\n obj[key] = desc.value;\n },\n $Symbol = \"function\" == typeof Symbol ? Symbol : {},\n iteratorSymbol = $Symbol.iterator || \"@@iterator\",\n asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\",\n toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n function define(obj, key, value) {\n return Object.defineProperty(obj, key, {\n value: value,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }), obj[key];\n }\n try {\n define({}, \"\");\n } catch (err) {\n define = function define(obj, key, value) {\n return obj[key] = value;\n };\n }\n function wrap(innerFn, outerFn, self, tryLocsList) {\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,\n generator = Object.create(protoGenerator.prototype),\n context = new Context(tryLocsList || []);\n return defineProperty(generator, \"_invoke\", {\n value: makeInvokeMethod(innerFn, self, context)\n }), generator;\n }\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n exports.wrap = wrap;\n var ContinueSentinel = {};\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n var getProto = Object.getPrototypeOf,\n NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n define(prototype, method, function (arg) {\n return this._invoke(method, arg);\n });\n });\n }\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (\"throw\" !== record.type) {\n var result = record.arg,\n value = result.value;\n return value && \"object\" == _typeof(value) && hasOwn.call(value, \"__await\") ? PromiseImpl.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n }) : PromiseImpl.resolve(value).then(function (unwrapped) {\n result.value = unwrapped, resolve(result);\n }, function (error) {\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n reject(record.arg);\n }\n var previousPromise;\n defineProperty(this, \"_invoke\", {\n value: function value(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n }\n });\n }\n function makeInvokeMethod(innerFn, self, context) {\n var state = \"suspendedStart\";\n return function (method, arg) {\n if (\"executing\" === state) throw new Error(\"Generator is already running\");\n if (\"completed\" === state) {\n if (\"throw\" === method) throw arg;\n return {\n value: void 0,\n done: !0\n };\n }\n for (context.method = method, context.arg = arg;;) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n if (\"next\" === context.method) context.sent = context._sent = context.arg;else if (\"throw\" === context.method) {\n if (\"suspendedStart\" === state) throw state = \"completed\", context.arg;\n context.dispatchException(context.arg);\n } else \"return\" === context.method && context.abrupt(\"return\", context.arg);\n state = \"executing\";\n var record = tryCatch(innerFn, self, context);\n if (\"normal\" === record.type) {\n if (state = context.done ? \"completed\" : \"suspendedYield\", record.arg === ContinueSentinel) continue;\n return {\n value: record.arg,\n done: context.done\n };\n }\n \"throw\" === record.type && (state = \"completed\", context.method = \"throw\", context.arg = record.arg);\n }\n };\n }\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method,\n method = delegate.iterator[methodName];\n if (undefined === method) return context.delegate = null, \"throw\" === methodName && delegate.iterator[\"return\"] && (context.method = \"return\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \"throw\" === context.method) || \"return\" !== methodName && (context.method = \"throw\", context.arg = new TypeError(\"The iterator does not provide a '\" + methodName + \"' method\")), ContinueSentinel;\n var record = tryCatch(method, delegate.iterator, context.arg);\n if (\"throw\" === record.type) return context.method = \"throw\", context.arg = record.arg, context.delegate = null, ContinueSentinel;\n var info = record.arg;\n return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \"return\" !== context.method && (context.method = \"next\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \"throw\", context.arg = new TypeError(\"iterator result is not an object\"), context.delegate = null, ContinueSentinel);\n }\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);\n }\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\", delete record.arg, entry.completion = record;\n }\n function Context(tryLocsList) {\n this.tryEntries = [{\n tryLoc: \"root\"\n }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);\n }\n function values(iterable) {\n if (iterable || \"\" === iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) return iteratorMethod.call(iterable);\n if (\"function\" == typeof iterable.next) return iterable;\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;\n return next.value = undefined, next.done = !0, next;\n };\n return next.next = next;\n }\n }\n throw new TypeError(_typeof(iterable) + \" is not iterable\");\n }\n return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \"constructor\", {\n value: GeneratorFunctionPrototype,\n configurable: !0\n }), defineProperty(GeneratorFunctionPrototype, \"constructor\", {\n value: GeneratorFunction,\n configurable: !0\n }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \"GeneratorFunction\"), exports.isGeneratorFunction = function (genFun) {\n var ctor = \"function\" == typeof genFun && genFun.constructor;\n return !!ctor && (ctor === GeneratorFunction || \"GeneratorFunction\" === (ctor.displayName || ctor.name));\n }, exports.mark = function (genFun) {\n return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \"GeneratorFunction\")), genFun.prototype = Object.create(Gp), genFun;\n }, exports.awrap = function (arg) {\n return {\n __await: arg\n };\n }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n void 0 === PromiseImpl && (PromiseImpl = Promise);\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);\n return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \"Generator\"), define(Gp, iteratorSymbol, function () {\n return this;\n }), define(Gp, \"toString\", function () {\n return \"[object Generator]\";\n }), exports.keys = function (val) {\n var object = Object(val),\n keys = [];\n for (var key in object) keys.push(key);\n return keys.reverse(), function next() {\n for (; keys.length;) {\n var key = keys.pop();\n if (key in object) return next.value = key, next.done = !1, next;\n }\n return next.done = !0, next;\n };\n }, exports.values = values, Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \"t\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);\n },\n stop: function stop() {\n this.done = !0;\n var rootRecord = this.tryEntries[0].completion;\n if (\"throw\" === rootRecord.type) throw rootRecord.arg;\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) throw exception;\n var context = this;\n function handle(loc, caught) {\n return record.type = \"throw\", record.arg = exception, context.next = loc, caught && (context.method = \"next\", context.arg = undefined), !!caught;\n }\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i],\n record = entry.completion;\n if (\"root\" === entry.tryLoc) return handle(\"end\");\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\"),\n hasFinally = hasOwn.call(entry, \"finallyLoc\");\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);\n } else {\n if (!hasFinally) throw new Error(\"try statement without catch or finally\");\n if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n finallyEntry && (\"break\" === type || \"continue\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);\n var record = finallyEntry ? finallyEntry.completion : {};\n return record.type = type, record.arg = arg, finallyEntry ? (this.method = \"next\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (\"throw\" === record.type) throw record.arg;\n return \"break\" === record.type || \"continue\" === record.type ? this.next = record.arg : \"return\" === record.type ? (this.rval = this.arg = record.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (\"throw\" === record.type) {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n return this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n }, \"next\" === this.method && (this.arg = undefined), ContinueSentinel;\n }\n }, exports;\n}"],"names":["ace","define","e","t","n","r","i","TextHighlightRules","s","constantOtherSymbol","token","regex","qString","qqString","tString","o","constantNumericHex","u","constantNumericBinary","a","constantNumericDecimal","f","l","constantNumericRational","c","constantNumericComplex","h","constantNumericFloat","p","instanceVariable","d","this","$keywords","createKeywordMapper","keyword","v","$rules","start","next","push","defaultToken","onMatch","length","unshift","stateName","split","splitRegex","type","value","rules","heredoc","shift","indentedHeredoc","comment","qStateWithInterpolation","qStateWithoutInterpolation","sStateWithoutInterpolation","sStateWithInterpolation","rState","include","regex_character_class","normalizeRules","inherits","RubyHighlightRules","Range","checkOutdent","test","autoOutdent","getLine","match","findMatchingBracket","row","column","$getIndent","replace","call","prototype","MatchingBraceOutdent","FoldMode","TokenIterator","indentKeywords","def","module","unless","until","begin","elsif","rescue","ensure","when","end","foldingStartMarker","foldingStopMarker","getFoldWidget","getTokenAt","index","getFoldWidgetRange","doc","exec","rubyBlock","openingBracketBlock","closingBracketBlock","getCurrentToken","RegExp","getCurrentTokenRange","step","stepBackward","stepForward","m","g","getCurrentTokenRow","y","$tokenIndex","b","$rowTokens","w","Mode","HighlightRules","$outdent","$behaviour","$defaultBehaviour","foldingRules","lineCommentStart","getNextLineIndent","getTokenizer","getLineTokens","tokens","getTabString","slice","remove","getMatching","undefined","selection","lead","$id","snippetFileId","require","exports","isDark","cssClass","cssText","importCssString","ACE_NAMESPACE","global","window","requirejs","deps","payload","arguments","modules","payloads","original","apply","console","error","trace","_require","parentId","callback","lookup","Object","toString","params","dep","packagedModule","normalizeModule","moduleName","indexOf","chunks","charAt","base","join","previous","mod","id","uri","packaged","req","returnValue","exportAce","ns","root","defineProp","obj","name","val","defineProperty","enumerable","writable","configurable","String","startsWith","searchString","position","lastIndexOf","endsWith","subjectString","lastIndex","repeat","count","result","string","includes","str","assign","target","TypeError","output","source","keys","forEach","key","values","map","k","Array","find","predicate","len","thisArg","kValue","findIndex","item","fill","O","relativeStart","Math","max","min","relativeEnd","final","of","last","stringReverse","reverse","stringRepeat","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copy","copyArray","array","deepCopy","isArray","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","supportsUnicodeFlag","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","navigator","os","platform","toLowerCase","ua","userAgent","appName","isWin","isIE","parseFloat","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isEdge","isAIR","isAndroid","isChromeOS","isIOS","MSStream","isMobile","strictCSP","useragent","XHTML_NS","buildDom","parent","refs","txt","document","createTextNode","appendChild","els","ch","el","createElement","options","childIndex","className","style","setAttribute","getDocumentHead","head","getElementsByTagName","documentElement","tag","createElementNS","removeChildren","element","innerHTML","textContent","ownerDocument","createFragment","createDocumentFragment","hasCssClass","classes","addCssClass","removeCssClass","toggleCssClass","add","setCssClass","node","hasCssString","sheets","querySelectorAll","removeElementById","getElementById","cssCache","insertPendingStyles","cache","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","src","onload","_","isAbort","qualifyURL","ctor","superCtor","super_","constructor","mixin","implement","proto","EventEmitter","stopPropagation","propagationStopped","preventDefault","defaultPrevented","_emit","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","_signal","once","on","newCallback","off","Promise","resolve","setDefaultHandler","handlers","_disabled_","old","disabled","removeDefaultHandler","pop","addEventListener","capturing","removeListener","removeEventListener","removeAllListeners","messages","oop","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","$options","filter","hidden","getOption","opt","warn","forwardTo","handlesSet","set","message","reportError","msg","data","Error","AppConfig","$defaultOptions","defineOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","setMessages","nls","translated","lang","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","hasOwnProperty","all","$modes","moduleUrl","component","parts","sep","re","setModuleUrl","subst","customLoader","loader","cb","setLoader","dynamicModules","$loading","$loaded","loadModule","onLoad","loadedModule","moduleType","load","afterLoad","err","reportErrorIfPathIsNotConfigured","then","default","$require","setModuleLoader","version","config","init","scriptOptions","scriptUrl","currentScript","_currentScript","currentDocument","scripts","script","getAttribute","attributes","j","attr","deHyphenate","m1","toUpperCase","comparePoints","p1","p2","startRow","startColumn","endRow","endColumn","isEqual","range","contains","compare","compareRange","cmp","comparePoint","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","Keys","ret","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","parseInt","enter","escape","esc","del","mods","pow","x","keyCodeToString","keyCode","keyString","fromCharCode","activeListenerOptions","pressedKeys","ts","detectListenerOptionsSupport","createComment","passive","getListenerOptions","EventListener","elem","destroy","addListener","destroyer","$toDestroy","stopEvent","getButton","ctrlKey","altKey","shiftKey","button","capture","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","factor","deltaX","deltaY","deltaMode","DOM_DELTA_PIXEL","wheelX","wheelY","DOM_DELTA_LINE","linePixels","DOM_DELTA_PAGE","pagePixels","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","clicks","eventNames","onMousedown","detail","isNewClick","abs","clientX","clientY","_clicks","getModifierHash","metaKey","normalizeCommandKeys","hashId","getModifierState","altGr","location","keyLocation","timeStamp","dt","resetPressedKeys","getModifierString","addCommandKeyListener","isOldGecko","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","postMessageId","nextTick","win","messageName","listener","$idleBlocked","onIdle","handler","$idleBlockId","blockIdle","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","bind","$cancelT","lineMode","pasteCancelled","Date","now","event","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","valueResetRegex","TextInput","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","cursor","onBlur","hasFocus","onFocus","resetSelection","$focusScroll","focus","renderer","enableKeyboardAccessibility","preventScroll","isTransformed","getBoundingClientRect","ancestors","parentElement","nodeType","blur","curOp","commandName","command","isUserAction","docChanged","selectionChanged","onCompositionEnd","positionToSelection","newValue","selectionStart","selectionEnd","setSelectionRange","afterContextMenu","line","getRange","lines","prevLine","nextLine","isAllSelected","onSelect","selectAll","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","onCompositionStart","$readOnly","useTextareaForIME","cancelComposition","getSelectionRange","markerRange","msGetInputContext","context","getInputContext","compositionStartOffset","closeTimeout","syncComposition","onKeyup","onContextMenuClose","$isMousePressed","$keepTextAreaAtCursor","$moveTextAreaToCursor","getElement","setCommandMode","readOnly","setReadOnly","setCopyWithEmptySelection","onContextMenu","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","bottom","clientHeight","move","textInput","addIosSelectionHandler","typingResetTimeout","typing","detectArrowKeys","$mouseHandler","isMousePressed","modifier","up","home","option","down","right","commands","findKeyCommand","scroller","$setUserAgentForTests","_isMobile","_isIOS","DRAG_OFFSET","SCROLL_COOLDOWN_T","DefaultHandlers","mouseHandler","$clickSelection","editor","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","selectByLines","extendSelectionBy","selectByWords","ev","inSelection","pos","getDocumentPosition","mousedownEvent","selectionRange","selectionEmpty","moveToPosition","time","$focusTimeout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","anchor","orientedRange","calcRangeOrientation","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectByLinesEnd","unsetStyle","focusWait","distance","calcDistance","getBracketRange","getWordRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","direction","canScroll","isScrollableBy","speed","isSlower","scrollBy","stop","ax","ay","bx","by","sqrt","selectEnd","selectAllEnd","selectByWordsEnd","__extends","extendStatics","setPrototypeOf","__proto__","__","__values","Symbol","iterator","done","CLASSNAME","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","html","setPosition","setClassName","setTheme","theme","show","hide","getHeight","offsetHeight","getWidth","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","popupManager","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","cursorPos","getCursorPosition","labelHeight","isTopdown","pageY","lineHeight","maxWidth","pageX","marker","$markerSession","removeMarker","$removeCloseEvents","relatedTarget","currentTarget","classList","GutterHandler","tooltipTimeout","mouseEvent","gutter","$gutterLayer","tooltip","GutterTooltip","showTooltip","maxRow","getLength","screenRow","$pos","documentToScreenRow","hideTooltip","$tooltipFollowsMouse","moveTooltip","gutterRow","getGutterRow","gutterCell","$lines","gutterElement","querySelector","gutterRegion","getRegion","selectTo","srcElement","$gutter","windowWidth","innerWidth","windowHeight","innerHeight","singular","plural","warning","info","annotation","annotationsInRow","$annotations","from","fold","getFoldLine","$showFoldedAnnotations","mostSevereAnnotationInFoldType","annotationsInFold","annotationType","summaryFoldedAnnotations","concat","annotationsToSummaryString","annotationMessages","iconClassName","$useSvgGutterIcons","annotationLabels","tooltipContent","annotations","summary","annotationTypes","annotationTypes_1","annotationTypes_1_1","label","MouseEvent","$inSelection","documentRow","screenTopRow","AUTOSCROLL_DELAY","SCROLL_CURSOR_DELAY","SCROLL_CURSOR_HYSTERESIS","DragdropHandler","dragImage","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","prevCursor","vMovement","hMovement","moveCursorToPosition","autoScroll","layerConfig","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","onDragInterval","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","moveAllowed","copyModifierState","dragWait","interval","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","state","dragDrop","$dragEnabled","clickCount","eventTarget","unselectable","addTouchListeners","touchStartT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","vX","vY","createContextMenu","updateMenu","selected","hasUndo","getUndoManager","replaceChild","class","action","handleClick","readText","writeText","ontouchstart","ontouchend","onclick","showContextMenu","pagePos","leftOffset","scrollLeft","hideContextMenu","handleLongTap","selectWord","switchToSelectionMode","setRange","animate","oldScrollTop","getScrollTop","textarea","touches","touchObj","getPixelPosition","anchorPos","offsetTop","offsetLeft","weightedDistance","diff1","diff2","DefaultGutterHandler","MouseHandler","focusEditor","windowBlurred","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","$dragDelay","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","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","passEvent","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","LTR","RTL","L","R","EN","AN","ON","B","S","AL","WS","CS","ES","ET","NSM","LRE","RLE","PDF","LRO","RLO","BN","UnicodeTBL00","UnicodeTBL20","_computeLevels","chars","levels","charTypes","impTab","prevState","newClass","newLevel","newState","cond","condPos","ix","_getCharacterType","_getCharClass","_invertLevel","lev","_array","lo","hi","tmp","wType","nType","cType","rtlCandidate","uc","charCodeAt","ON_R","R_H","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","hasBidiCharacters","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","isLastRow","endOfLine","$useWrapMode","splits","$wrapData","indent","substring","size","isFullWidth","getScreenTabSize","$main","substr","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getSelectionAnchor","$bidiHandler","removeInLine","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","getDocument","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","beforeCursor","getDisplayLine","leadingSpace","$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","getRangeOfMovements","func","toJSON","rangeCount","ranges","r1","fromJSON","rangeList","toSingleRange","addRange","MAX_TOKEN_COUNT","Tokenizer","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","flag","splitterRurles","rule","caseInsensitive","unicode","adjustedregex","matchcount","groupCount","tokenArray","$arrayTokens","$applyToken","digit","removeCapturingGroups","createSplitterRegexp","$setMaxTokenCount","stack","inChClass","lastCapture","parenOpen","parenClose","square","startState","currentState","matchAttempts","skipped","consumeLineEnd","merge","addRules","prefix","nextState","getRules","embedRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","processState","processed","toInsert","includeName","noEscape","keywordMap","ignoreCase","splitChar","keywords","$keywordList","list","word","getKeywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","initialRow","initialColumn","$session","$row","getTokens","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","CstyleBehaviour","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","rightChar","matching","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","next_indent","quotes","$mode","$quotes","quote","leftChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","pairQuotesAfter","$pairQuotesAfter","shouldPairQuotes","charBefore","closeDocComment","$matchTokenType","iterator2","bracket","wordChars","code","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","commentWithSpace","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","fun","minEmptyLength","floor","toggleBlockComment","colDiff","initialRange","startRange","endRange","tab","input","createWorker","createModeDelegates","delegations","scope","functionName","$delegator","method","language","transformAction","param","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","score","meta","applyDelta","docLines","doNotValidate","Anchor","$onChange","$clipPositionToDocument","point","$getTransformedPoint","$insertRight","noClip","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","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","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","consumeRange","afterStart","firstConsumed","consumedFolds","restoreRange","consumePoint","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","depth","foldToLevel","foldAllComments","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","charBeforeCursor","$findClosingBracket","getMatchingBracketRanges","bracketsRegExp","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","getMatchingTags","$findTagName","prevToken","$findClosingTag","$findOpeningTag","found","backward","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","$fromUndo","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","reset","getSelection","undoManager","addSession","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","setOverwrite","overwrite","$overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","addDynamicMarker","markerId","markers","getMarkers","highlight","$searchHighlight","highlightLines","setAnnotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$onChangeMode","$modeId","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","terminate","getMode","setScrollTop","scrollTop","$scrollTop","isNaN","setScrollLeft","$scrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","selectionBefore","$getUndoSelection","redoChanges","selectionAfter","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","diff","$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","getWrapIndent","indentation","SPACE","TAB","TAB_SPACE","addSplit","minSplit","PUNCTUATION","CHAR_EXT","CHAR","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","undo","redo","hasRedo","addSelection","startNewGroup","wrap","$wrap","firstLineNumber","useSoftTabs","foldStyle","Search","$matchIterator","sr","sc","er","ec","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","$supportsUnicodeFlag","wholeWord","addWordBoundary","caseSensitive","$assembleMultilineRegExp","backwards","forEachInLine","wordBoundary","firstChar","wordRegExp","needleArray","lastChar","MultiHashHandler","$singleCommand","commandKeyBinding","addCommands","addCommand","removeCommand","bindKey","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","other","otherPos","removeCommands","bindKeys","keyList","$keyChain","isDefault","HashHandler","CommandManager","byName","$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","cutLine","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","autoIndent","openLink","firstLineEndCol","selectedText","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","cell","foldWidget","keyboardFocusClassName","desinationLane","annotationIndex","foldWidgetIndex","gutterKeyboardHandler","getKey","getRow","isInAnnotationLane","isInFoldLane","defaultCommands","Editor","getContainerElement","getTextAreaContainer","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","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","selectedRange","currIndent","prevLineState","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","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","currWordStart","wordParts","curLength","itLength","that","reg","wordPairs","$toggleWordPairs","negate","firstCondition","secondCondition","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","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","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","UndoManager","$maxRev","$undoDepth","allowMerge","$lastDelta","$keepRedoStack","$redoStack","lastDeltas","undoStackLength","$undoStack","$rev","rev","markIgnored","ignore","getRevision","getDeltas","getChangedRanges","getChangedLines","rearrangeUndoStack","$redoStackBaseRev","deltaSet","undoSelectionRange","$syncRev","rebaseRedoStack","redoSelectionRange","nextDelta","mark","canUndo","canRedo","bookmark","isAtBookmark","$prettyPrint","stringifyDelta","swapped","swapGroups","isClean","markClean","cloneDelta","stringifyRange","d1","d2","i1","i2","ds1","ds2","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","rest","moveDeltasByOne","redoStack","xformed","deltaSets","Lines","canvasHeight","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","lineTop","computeLineHeight","$cacheCell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","$updateAnnotations","rowInfo","annoText","annoType","gutterOffset","oldLastRow","$updateCursorRow","onCreateCell","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","$padding","$computePadding","$highlightGutterLine","$cursorRow","updateLineHighlight","scrollLines","$renderLines","textNode","annotationNode","annotationIconNode","breakpoints","decorations","rowText","foldClass","isClosedFold","foldAnnotationClass","annotationInFold","foldRange","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","setPadding","setMarkers","elt","css","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","curr","lineRange","getBorderClass","range1","drawBidiSingleLineMarker","radiusClass","extraLength","tl","tr","br","bl","Text","$updateEolChar","unixMode","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","lineElement","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","com","$textToken","renderIndentGuide","cols","$highlightIndentGuideMarker","indentLevel","initialIndent","elementIndentLevel","bracketHighlight","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","cursorLeft","cursorTop","isCursorInView","pixelPos","maxHeight","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","MAX_SCROLL_H","Scrollbar","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","scrollHeight","$scrollbarWidth","$minWidth","setHeight","setScrollHeight","setInnerHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBar","ScrollBarV","ScrollBarH","VScrollWidth","HScrollHeight","eType","mousePageY","startTop","thumbTop","onScrollInterval","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","zoom","$initTransformMeasureNodes","transformCoordinates","clientPos","elPos","mul","solve","l1","l2","det","sub","m2","ut","Decorator","canvas","pixelRatio","heightRatio","canvasWidth","minDecorationHeight","halfMinDecorationHeight","colors","dark","light","$updateDecorators","allLineHeight","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","$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","hideScrollbars","$gutterWidth","screenLines","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","$viewMargin","newLeft","newTop","topMargin","bottomMargin","$stopAnimation","currentTop","currentLeft","twoCharsWidth","alignment","$calcSteps","fromValue","toValue","STEPS","steps","x_min","dx","initialScroll","oldSteps","$timer","endAnimation","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","$useTextareaForIME","addToken","removeExtraToken","insertPosition","textLines","$ghostText","$ghostTextWidget","newToken","$themeId","$theme","setMouseCursor","attachToShadowRoot","$resizeObserver","contentRect","$workerBlob","workerUrl","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","blobBuilder","getBlob","Worker","blob","URL","webkitURL","blobURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","changeListener","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","deltaQueue","onerror","$doc","cmd","emit","ex","attachToDocument","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undostack","$undoStackDepth","setup","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","onMouseSelection","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onMouseSelectionEnd","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","addAltCursorListeners","altCursor","altDown","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","keepOrder","$byLines","cmdResult","anim","buf","additive","skip","screenLead","toRemove","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","alignRight","unAlign","enableMultiselect","enableBlockSelect","indentationBlock","startLevel","binarySearch","comparator","findAnnotations","matched","oldWidget","gutterAnno","arrow","onmousedown","Renderer","edit","_id","env","tagName","oldNode","createEditSession","utils","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","transitionalDefaults","AxiosError","CanceledError","parseProtocol","reject","onCanceled","requestData","requestHeaders","headers","responseType","cancelToken","unsubscribe","signal","isFormData","isStandardBrowserEnv","request","auth","username","password","unescape","encodeURIComponent","Authorization","btoa","fullPath","baseURL","onloadend","responseHeaders","getAllResponseHeaders","responseData","response","status","statusText","paramsSerializer","responseURL","onabort","ECONNABORTED","ERR_NETWORK","ontimeout","timeoutErrorMessage","transitional","clarifyTimeoutError","ETIMEDOUT","xsrfValue","withCredentials","xsrfCookieName","read","xsrfHeaderName","setRequestHeader","isUndefined","onDownloadProgress","onUploadProgress","upload","abort","subscribe","aborted","protocol","ERR_BAD_REQUEST","Axios","mergeConfig","defaults","createInstance","defaultConfig","instance","instanceConfig","axios","CancelToken","isCancel","VERSION","toFormData","Cancel","promises","spread","isAxiosError","executor","resolvePromise","promise","_listeners","onfulfilled","_resolve","reason","throwIfRequested","ERR_CANCELED","__CANCEL__","InterceptorManager","dispatchRequest","validator","validators","interceptors","configOrUrl","assertOptions","silentJSONParsing","boolean","forcedJSONParsing","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","fulfilled","rejected","responseInterceptorChain","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","fileName","columnNumber","descriptors","defineProperties","customProps","axiosError","toFlatObject","use","eject","fn","isAbsoluteURL","combineURLs","requestedURL","transformData","throwIfCancellationRequested","transformRequest","common","adapter","transformResponse","config1","config2","getMergedValue","isPlainObject","mergeDeepProperties","prop","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","validateStatus","ERR_BAD_RESPONSE","fns","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","getDefaultAdapter","process","stringifySafely","rawValue","parser","encoder","isString","JSON","parse","stringify","isArrayBuffer","isBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isURLSearchParams","isFileList","isObjectPayload","isObject","contentType","_FormData","FormData","strictJSONParsing","maxContentLength","maxBodyLength","encode","serializedParams","isDate","toISOString","hashmarkIndex","relativeURL","write","expires","domain","secure","cookie","isNumber","toGMTString","decodeURIComponent","originURL","msie","urlParsingNode","resolveURL","hash","hostname","port","pathname","requestURL","parsed","normalizedName","ignoreDuplicateOf","formData","convertValue","isTypedArray","Buffer","build","parentKey","fullKey","toArray","thing","deprecatedWarnings","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","formatMessage","desc","ERR_DEPRECATED","kindOf","kindOfTest","ArrayBuffer","isView","getPrototypeOf","isFunction","pipe","pattern","product","assignValue","stripBOM","superConstructor","sourceObj","destObj","merged","getOwnPropertyNames","TypedArray","Uint8Array","DataView","NAME","Constructor","Prototype","NATIVE_ARRAY_BUFFER","DESCRIPTORS","isCallable","hasOwn","classof","tryToString","createNonEnumerableProperty","defineBuiltIn","defineBuiltInAccessor","isPrototypeOf","wellKnownSymbol","uid","InternalStateModule","enforceInternalState","enforce","getInternalState","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArrayPrototype","ObjectPrototype","TO_STRING_TAG","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","NATIVE_ARRAY_BUFFER_VIEWS","TYPED_ARRAY_TAG_REQUIRED","TypedArrayConstructorsList","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","it","klass","getTypedArrayConstructor","aTypedArray","aTypedArrayConstructor","C","exportTypedArrayMethod","KEY","forced","ARRAY","TypedArrayConstructor","error2","exportTypedArrayStaticMethod","Function","uncurryThis","FunctionName","defineBuiltIns","fails","anInstance","toIntegerOrInfinity","toLength","toIndex","IEEE754","arrayFill","arraySlice","setToStringTag","PROPER_FUNCTION_NAME","PROPER","CONFIGURABLE_FUNCTION_NAME","CONFIGURABLE","ARRAY_BUFFER","DATA_VIEW","PROTOTYPE","WRONG_LENGTH","WRONG_INDEX","getInternalArrayBufferState","getterFor","getInternalDataViewState","setInternalState","NativeArrayBuffer","$ArrayBuffer","ArrayBufferPrototype","$DataView","DataViewPrototype","RangeError","packIEEE754","pack","unpackIEEE754","unpack","packInt8","packInt16","packInt32","unpackInt32","packFloat32","packFloat64","addGetter","view","isLittleEndian","store","intIndex","boolIsLittleEndian","byteLength","bytes","byteOffset","conversion","INCORRECT_ARRAY_BUFFER_NAME","NaN","testView","$setInt8","setInt8","getInt8","setUint8","unsafe","detached","bufferState","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","toObject","toAbsoluteIndex","lengthOfArrayLike","deletePropertyOrThrow","copyWithin","inc","IndexedObject","createMethod","TYPE","IS_FIND_LAST_INDEX","$this","callbackfn","boundFunction","findLast","findLastIndex","toIndexedObject","arrayMethodIsStrict","$lastIndexOf","NEGATIVE_ZERO","STRICT_METHOD","FORCED","searchElement","A","$RangeError","relativeIndex","actualIndex","doesNotExceedSafeInteger","flattenIntoArray","sourceLen","mapper","elementLen","targetIndex","sourceIndex","mapFn","$Array","LN2","mantissaLength","exponent","mantissa","exponentLength","eMax","eBias","rt","sign","nBits","isInteger","LOG10E","log10","whitespaces","$parseFloat","ITERATOR","trimmedString","is","$repeat","requireObjectCoercible","stringSlice","IS_END","maxLength","fillString","fillLen","stringFiller","intMaxLength","stringLength","fillStr","toPrimitive","$TypeError","argument","prim","BigInt","toPositiveInteger","BYTES","$","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","ArrayBufferViewCore","ArrayBufferModule","createPropertyDescriptor","isIntegralNumber","toOffset","toUint8Clamped","toPropertyKey","isSymbol","typedArrayFrom","setSpecies","definePropertyModule","getOwnPropertyDescriptorModule","inheritIfRequired","nativeDefineProperty","nativeGetOwnPropertyDescriptor","BYTES_PER_ELEMENT","fromList","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","descriptor","stat","getOwnPropertyDescriptor","wrapper","CLAMPED","CONSTRUCTOR_NAME","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructorPrototype","exported","getter","setter","addElement","dummy","typedArrayOffset","$length","$len","sham","checkCorrectnessOfIteration","iterable","arrayFromConstructorAndList","typedArraySpeciesConstructor","aConstructor","getIterator","getIteratorMethod","isArrayIteratorMethod","isBigIntArray","toBigInt","thisIsBigIntArray","argumentsLength","mapfn","iteratorMethod","speciesConstructor","originalArray","anObject","nativeArrayBufferSlice","INCORRECT_SLICE","fin","viewSource","viewTarget","aCallable","arraySpeciesCreate","flatMap","nativeReverse","addToUnscopables","thisNumberValue","$String","$isFinite","nativeToExponential","toExponential","ROUNDS_PROPERLY","throwsOnInfinityFraction","properNonFiniteThisCheck","fractionDigits","$padStart","WEBKIT_BUG","padStart","isNullOrUndefined","isRegExp","getMethod","getRegExpFlags","getSubstitution","IS_PURE","REPLACE","stringIndexOf","searchValue","fromIndex","replaceValue","IS_REG_EXP","flags","replacer","functionalReplace","searchLength","advanceBy","endOfLastMatch","fixRegExpWellKnownSymbolLogic","sameValue","regExpExec","SEARCH","nativeSearch","maybeCallNative","regexp","searcher","rx","previousLastIndex","defineWellKnownSymbol","getBuiltIn","$ArrayCopyWithin","u$ArrayCopyWithin","$every","$fill","CONVERSION_BUG","valueOf","actualValue","$filter","fromSpeciesAndList","$findIndex","$findLastIndex","$findLast","$find","$forEach","$includes","$indexOf","ArrayIterators","arrayValues","arrayKeys","arrayEntries","entries","GENERIC","ITERATOR_IS_VALUES","typedArrayValues","$join","separator","$map","$reduceRight","$reduce","middle","$set","WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS","TO_OBJECT_BUG","arrayLike","$some","internalSort","FF","IE_OR_EDGE","V8","WEBKIT","nativeSort","ACCEPT_INCORRECT_ARGUMENTS","STABLE_SORT","expected","getSortCompare","comparefn","$toLocaleString","toLocaleString","TO_LOCALE_STRING_BUG","arrayToReversed","compareFn","Uint8ArrayPrototype","arrayToString","IS_NOT_ARRAY_METHOD","createTypedArrayConstructor","arrayWith","PROPER_ORDER","not_string","not_bool","not_type","not_primitive","numeric_arg","json","not_json","modulo","key_access","index_access","sprintf","sprintf_format","sprintf_parse","vsprintf","fmt","argv","parse_tree","arg","ph","pad","pad_character","pad_length","is_positive","tree_length","param_no","precision","toPrecision","pad_char","align","sprintf_cache","_fmt","arg_names","SyntaxError","field_list","replacement_field","field_match","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","_createForOfIteratorHelper","allowArrayLike","unsupportedIterableToArray","F","_e","normalCompletion","didErr","_e2","_regeneratorRuntime","Op","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","makeInvokeMethod","tryCatch","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","_invoke","AsyncIterator","PromiseImpl","invoke","record","_typeof","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","displayName","isGeneratorFunction","genFun","awrap","async","object","skipTempReset","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield"],"sourceRoot":""}