cosmosc2-tool-scriptrunner 5.0.2.pre.beta2 → 5.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/944.js","mappings":"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IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,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","sources":["webpack://@cosmosc2/tool-scriptrunner/../../node_modules/ace-builds/src-min-noconflict/ext-language_tools.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/ace-builds/src-min-noconflict/ext-searchbox.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/ace-builds/src-min-noconflict/mode-ruby.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/ace-builds/src-min-noconflict/theme-twilight.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/ace-builds/src-noconflict/ace.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/actioncable/lib/assets/compiled/action_cable.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/adapters/xhr.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/axios.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/cancel/Cancel.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/cancel/CancelToken.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/cancel/isCancel.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/core/Axios.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/core/InterceptorManager.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/core/buildFullPath.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/core/createError.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/core/dispatchRequest.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/core/enhanceError.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/core/mergeConfig.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/core/settle.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/core/transformData.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/defaults.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/env/data.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/helpers/bind.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/helpers/buildURL.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/helpers/combineURLs.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/helpers/cookies.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/helpers/isAxiosError.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/helpers/parseHeaders.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/helpers/spread.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/helpers/validator.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/axios/lib/utils.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/internals/collection-strong.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/internals/collection-weak.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/internals/collection.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/internals/is-integral-number.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/internals/native-url.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/internals/string-punycode-to-ascii.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/es.array.find-index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/es.number.is-integer.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/es.regexp.constructor.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/es.regexp.dot-all.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/es.regexp.sticky.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/es.set.constructor.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/es.set.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/es.string.replace-all.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/es.weak-map.constructor.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/es.weak-map.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/web.url-search-params.constructor.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/web.url-search-params.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/web.url.constructor.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/core-js/modules/web.url.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/requiredArgs/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/isDate/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/toDate/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/isValid/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/locale/en-US/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/toInteger/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/addMilliseconds/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/subMilliseconds/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/getUTCWeek/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/format/formatters/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/format/longFormatters/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/_lib/protectedTokens/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/date-fns/esm/format/index.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/regenerator-runtime/runtime.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/vue-multipane/dist/vue-multipane.esm.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/readOnlyError.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://@cosmosc2/tool-scriptrunner/../../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js"],"sourcesContent":["ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/editor\"],function(e,t,n){\"use strict\";function p(e){var t=(new Date).toLocaleString(\"en-us\",e);return t.length==1?\"0\"+t:t}var r=e(\"./lib/dom\"),i=e(\"./lib/oop\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./lib/lang\"),u=e(\"./range\").Range,a=e(\"./range_list\").RangeList,f=e(\"./keyboard/hash_handler\").HashHandler,l=e(\"./tokenizer\").Tokenizer,c=e(\"./clipboard\"),h={CURRENT_WORD:function(e){return e.session.getTextRange(e.session.getWordRange())},SELECTION:function(e,t,n){var r=e.session.getTextRange();return n?r.replace(/\\n\\r?([ \\t]*\\S)/g,\"\\n\"+n+\"$1\"):r},CURRENT_LINE:function(e){return e.session.getLine(e.getCursorPosition().row)},PREV_LINE:function(e){return e.session.getLine(e.getCursorPosition().row-1)},LINE_INDEX:function(e){return e.getCursorPosition().row},LINE_NUMBER:function(e){return e.getCursorPosition().row+1},SOFT_TABS:function(e){return e.session.getUseSoftTabs()?\"YES\":\"NO\"},TAB_SIZE:function(e){return e.session.getTabSize()},CLIPBOARD:function(e){return c.getText&&c.getText()},FILENAME:function(e){return/[^/\\\\]*$/.exec(this.FILEPATH(e))[0]},FILENAME_BASE:function(e){return/[^/\\\\]*$/.exec(this.FILEPATH(e))[0].replace(/\\.[^.]*$/,\"\")},DIRECTORY:function(e){return this.FILEPATH(e).replace(/[^/\\\\]*$/,\"\")},FILEPATH:function(e){return\"/not implemented.txt\"},WORKSPACE_NAME:function(){return\"Unknown\"},FULLNAME:function(){return\"Unknown\"},BLOCK_COMMENT_START:function(e){var t=e.session.$mode||{};return t.blockComment&&t.blockComment.start||\"\"},BLOCK_COMMENT_END:function(e){var t=e.session.$mode||{};return t.blockComment&&t.blockComment.end||\"\"},LINE_COMMENT:function(e){var t=e.session.$mode||{};return t.lineCommentStart||\"\"},CURRENT_YEAR:p.bind(null,{year:\"numeric\"}),CURRENT_YEAR_SHORT:p.bind(null,{year:\"2-digit\"}),CURRENT_MONTH:p.bind(null,{month:\"numeric\"}),CURRENT_MONTH_NAME:p.bind(null,{month:\"long\"}),CURRENT_MONTH_NAME_SHORT:p.bind(null,{month:\"short\"}),CURRENT_DATE:p.bind(null,{day:\"2-digit\"}),CURRENT_DAY_NAME:p.bind(null,{weekday:\"long\"}),CURRENT_DAY_NAME_SHORT:p.bind(null,{weekday:\"short\"}),CURRENT_HOUR:p.bind(null,{hour:\"2-digit\",hour12:!1}),CURRENT_MINUTE:p.bind(null,{minute:\"2-digit\"}),CURRENT_SECOND:p.bind(null,{second:\"2-digit\"})};h.SELECTED_TEXT=h.SELECTION;var d=function(){this.snippetMap={},this.snippetNameMap={}};(function(){i.implement(this,s),this.getTokenizer=function(){return d.$tokenizer||this.createTokenizer()},this.createTokenizer=function(){function e(e){return e=e.substr(1),/^\\d+$/.test(e)?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return\"(?:[^\\\\\\\\\"+e+\"]|\\\\\\\\.)\"}var n={regex:\"/(\"+t(\"/\")+\"+)/\",onMatch:function(e,t,n){var r=n[0];return r.fmtString=!0,r.guard=e.slice(1,-1),r.flag=\"\",\"\"},next:\"formatString\"};return d.$tokenizer=new l({start:[{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1&&(e=r),[e]}},{regex:/}/,onMatch:function(e,t,n){return[n.length?n.shift():e]}},{regex:/\\$(?:\\d+|\\w+)/,onMatch:e},{regex:/\\$\\{[\\dA-Z_a-z]+/,onMatch:function(t,n,r){var i=e(t.substr(1));return r.unshift(i[0]),i},next:\"snippetVar\"},{regex:/\\n/,token:\"newline\",merge:!1}],snippetVar:[{regex:\"\\\\|\"+t(\"\\\\|\")+\"*\\\\|\",onMatch:function(e,t,n){var r=e.slice(1,-1).replace(/\\\\[,|\\\\]|,/g,function(e){return e.length==2?e[1]:\"\\0\"}).split(\"\\0\").map(function(e){return{value:e}});return n[0].choices=r,[r[0]]},next:\"start\"},n,{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"start\"}],formatString:[{regex:/:/,onMatch:function(e,t,n){return n.length&&n[0].expectElse?(n[0].expectElse=!1,n[0].ifEnd={elseEnd:n[0]},[n[0].ifEnd]):\":\"}},{regex:/\\\\./,onMatch:function(e,t,n){var r=e[1];return r==\"}\"&&n.length?e=r:\"`$\\\\\".indexOf(r)!=-1?e=r:r==\"n\"?e=\"\\n\":r==\"t\"?e=\"\t\":\"ulULE\".indexOf(r)!=-1&&(e={changeCase:r,local:r>\"a\"}),[e]}},{regex:\"/\\\\w*}\",onMatch:function(e,t,n){var r=n.shift();return r&&(r.flag=e.slice(1,-1)),this.next=r&&r.tabstopId?\"start\":\"\",[r||e]},next:\"start\"},{regex:/\\$(?:\\d+|\\w+)/,onMatch:function(e,t,n){return[{text:e.slice(1)}]}},{regex:/\\${\\w+/,onMatch:function(e,t,n){var r={text:e.slice(2)};return n.unshift(r),[r]},next:\"formatStringVar\"},{regex:/\\n/,token:\"newline\",merge:!1},{regex:/}/,onMatch:function(e,t,n){var r=n.shift();return this.next=r&&r.tabstopId?\"start\":\"\",[r||e]},next:\"start\"}],formatStringVar:[{regex:/:\\/\\w+}/,onMatch:function(e,t,n){var r=n[0];return r.formatFunction=e.slice(2,-1),[n.shift()]},next:\"formatString\"},n,{regex:/:[\\?\\-+]?/,onMatch:function(e,t,n){e[1]==\"+\"&&(n[0].ifEnd=n[0]),e[1]==\"?\"&&(n[0].expectElse=!0)},next:\"formatString\"},{regex:\"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",token:\"\",next:\"formatString\"}]}),d.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.getVariableValue=function(e,t,n){if(/^\\d+$/.test(t))return(this.variables.__||{})[t]||\"\";if(/^[A-Z]\\d+$/.test(t))return(this.variables[t[0]+\"__\"]||{})[t.substr(1)]||\"\";t=t.replace(/^TM_/,\"\");if(!this.variables.hasOwnProperty(t))return\"\";var r=this.variables[t];return typeof r==\"function\"&&(r=this.variables[t](e,t,n)),r==null?\"\":r},this.variables=h,this.tmStrFormat=function(e,t,n){if(!t.fmt)return e;var r=t.flag||\"\",i=t.guard;i=new RegExp(i,r.replace(/[^gim]/g,\"\"));var s=typeof t.fmt==\"string\"?this.tokenizeTmSnippet(t.fmt,\"formatString\"):t.fmt,o=this,u=e.replace(i,function(){var e=o.variables.__;o.variables.__=[].slice.call(arguments);var t=o.resolveVariables(s,n),r=\"E\";for(var i=0;i<t.length;i++){var u=t[i];if(typeof u==\"object\"){t[i]=\"\";if(u.changeCase&&u.local){var a=t[i+1];a&&typeof a==\"string\"&&(u.changeCase==\"u\"?t[i]=a[0].toUpperCase():t[i]=a[0].toLowerCase(),t[i+1]=a.substr(1))}else u.changeCase&&(r=u.changeCase)}else r==\"U\"?t[i]=u.toUpperCase():r==\"L\"&&(t[i]=u.toLowerCase())}return o.variables.__=e,t.join(\"\")});return u},this.tmFormatFunction=function(e,t,n){return t.formatFunction==\"upcase\"?e.toUpperCase():t.formatFunction==\"downcase\"?e.toLowerCase():e},this.resolveVariables=function(e,t){function f(t){var n=e.indexOf(t,s+1);n!=-1&&(s=n)}var n=[],r=\"\",i=!0;for(var s=0;s<e.length;s++){var o=e[s];if(typeof o==\"string\"){n.push(o),o==\"\\n\"?(i=!0,r=\"\"):i&&(r=/^\\t*/.exec(o)[0],i=/\\S/.test(o));continue}if(!o)continue;i=!1;if(o.fmtString){var u=e.indexOf(o,s+1);u==-1&&(u=e.length),o.fmt=e.slice(s+1,u),s=u}if(o.text){var a=this.getVariableValue(t,o.text,r)+\"\";o.fmtString&&(a=this.tmStrFormat(a,o,t)),o.formatFunction&&(a=this.tmFormatFunction(a,o,t)),a&&!o.ifEnd?(n.push(a),f(o)):!a&&o.ifEnd&&f(o.ifEnd)}else o.elseEnd?f(o.elseEnd):o.tabstopId!=null?n.push(o):o.changeCase!=null&&n.push(o)}return n},this.insertSnippetForSelection=function(e,t){function f(e){var t=[];for(var n=0;n<e.length;n++){var r=e[n];if(typeof r==\"object\"){if(a[r.tabstopId])continue;var i=e.lastIndexOf(r,n-1);r=t[i]||{tabstopId:r.tabstopId}}t[n]=r}return t}var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=e.session.getTabString(),s=r.match(/^\\s*/)[0];n.column<s.length&&(s=s.slice(0,n.column)),t=t.replace(/\\r/g,\"\");var o=this.tokenizeTmSnippet(t);o=this.resolveVariables(o,e),o=o.map(function(e){return e==\"\\n\"?e+s:typeof e==\"string\"?e.replace(/\\t/g,i):e});var u=[];o.forEach(function(e,t){if(typeof e!=\"object\")return;var n=e.tabstopId,r=u[n];r||(r=u[n]=[],r.index=n,r.value=\"\",r.parents={});if(r.indexOf(e)!==-1)return;e.choices&&!r.choices&&(r.choices=e.choices),r.push(e);var i=o.indexOf(e,t+1);if(i===-1)return;var s=o.slice(t+1,i),a=s.some(function(e){return typeof e==\"object\"});a&&!r.value?r.value=s:s.length&&(!r.value||typeof r.value!=\"string\")&&(r.value=s.join(\"\"))}),u.forEach(function(e){e.length=0});var a={};for(var l=0;l<o.length;l++){var c=o[l];if(typeof c!=\"object\")continue;var h=c.tabstopId,p=u[h],d=o.indexOf(c,l+1);if(a[h]){a[h]===c&&(delete a[h],Object.keys(a).forEach(function(e){p.parents[e]=!0}));continue}a[h]=c;var m=p.value;typeof m!=\"string\"?m=f(m):c.fmt&&(m=this.tmStrFormat(m,c,e)),o.splice.apply(o,[l+1,Math.max(0,d-l)].concat(m,c)),p.indexOf(c)===-1&&p.push(c)}var g=0,y=0,b=\"\";o.forEach(function(e){if(typeof e==\"string\"){var t=e.split(\"\\n\");t.length>1?(y=t[t.length-1].length,g+=t.length-1):y+=e.length,b+=e}else e&&(e.start?e.end={row:g,column:y}:e.start={row:g,column:y})});var w=e.getSelectionRange(),E=e.session.replace(w,b),S=new v(e),x=e.inVirtualSelectionMode&&e.selection.index;S.addTabstops(u,w.start,E,x)},this.insertSnippet=function(e,t){var n=this;if(e.inVirtualSelectionMode)return n.insertSnippetForSelection(e,t);e.forEachSelection(function(){n.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||\"\";t=t.split(\"/\").pop();if(t===\"html\"||t===\"php\"){t===\"php\"&&!e.session.$mode.inlinePhp&&(t=\"html\");var n=e.getCursorPosition(),r=e.session.getState(n.row);typeof r==\"object\"&&(r=r[0]),r.substring&&(r.substring(0,3)==\"js-\"?t=\"javascript\":r.substring(0,4)==\"css-\"?t=\"css\":r.substring(0,4)==\"php-\"&&(t=\"php\"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),n=[t],r=this.snippetMap;return r[t]&&r[t].includeScopes&&n.push.apply(n,r[t].includeScopes),n.push(\"_\"),n},this.expandWithTab=function(e,t){var n=this,r=e.forEachSelection(function(){return n.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return r&&e.tabstopManager&&e.tabstopManager.tabNext(),r},this.expandSnippetForSelection=function(e,t){var n=e.getCursorPosition(),r=e.session.getLine(n.row),i=r.substring(0,n.column),s=r.substr(n.column),o=this.snippetMap,u;return this.getActiveScopes(e).some(function(e){var t=o[e];return t&&(u=this.findMatchingSnippet(t,i,s)),!!u},this),u?t&&t.dryRun?!0:(e.session.doc.removeInLine(n.row,n.column-u.replaceBefore.length,n.column+u.replaceAfter.length),this.variables.M__=u.matchBefore,this.variables.T__=u.matchAfter,this.insertSnippetForSelection(e,u.content),this.variables.M__=this.variables.T__=null,!0):!1},this.findMatchingSnippet=function(e,t,n){for(var r=e.length;r--;){var i=e[r];if(i.startRe&&!i.startRe.test(t))continue;if(i.endRe&&!i.endRe.test(n))continue;if(!i.startRe&&!i.endRe)continue;return i.matchBefore=i.startRe?i.startRe.exec(t):[\"\"],i.matchAfter=i.endRe?i.endRe.exec(n):[\"\"],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:\"\",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(n)[0]:\"\",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){function s(e){return e&&!/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(e)&&(e=\"(?:\"+e+\")\"),e||\"\"}function u(e,t,n){return e=s(e),t=s(t),n?(e=t+e,e&&e[e.length-1]!=\"$\"&&(e+=\"$\")):(e+=t,e&&e[0]!=\"^\"&&(e=\"^\"+e)),new RegExp(e)}function a(e){e.scope||(e.scope=t||\"_\"),t=e.scope,n[t]||(n[t]=[],r[t]={});var s=r[t];if(e.name){var a=s[e.name];a&&i.unregister(a),s[e.name]=e}n[t].push(e),e.prefix&&(e.tabTrigger=e.prefix),!e.content&&e.body&&(e.content=Array.isArray(e.body)?e.body.join(\"\\n\"):e.body),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\\w/.test(e.tabTrigger)&&(e.guard=\"\\\\b\"),e.trigger=o.escapeRegExp(e.tabTrigger));if(!e.trigger&&!e.guard&&!e.endTrigger&&!e.endGuard)return;e.startRe=u(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger),e.endRe=u(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger)}var n=this.snippetMap,r=this.snippetNameMap,i=this;e||(e=[]),Array.isArray(e)?e.forEach(a):Object.keys(e).forEach(function(t){a(e[t])}),this._signal(\"registerSnippets\",{scope:t})},this.unregister=function(e,t){function i(e){var i=r[e.scope||t];if(i&&i[e.name]){delete i[e.name];var s=n[e.scope||t],o=s&&s.indexOf(e);o>=0&&s.splice(o,1)}}var n=this.snippetMap,r=this.snippetNameMap;e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\\r/g,\"\");var t=[],n={},r=/^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm,i;while(i=r.exec(e)){if(i[1])try{n=JSON.parse(i[1]),t.push(n)}catch(s){}if(i[4])n.content=i[4].replace(/^\\t/gm,\"\"),t.push(n),n={};else{var o=i[2],u=i[3];if(o==\"regex\"){var a=/\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;n.guard=a.exec(u)[1],n.trigger=a.exec(u)[1],n.endTrigger=a.exec(u)[1],n.endGuard=a.exec(u)[1]}else o==\"snippet\"?(n.tabTrigger=u.match(/^\\S*/)[0],n.name||(n.name=u)):o&&(n[o]=u)}}return t},this.getSnippetByName=function(e,t){var n=this.snippetNameMap,r;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(d.prototype);var v=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=o.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on(\"change\",this.$onChange),this.editor.on(\"changeSelection\",this.$onChangeSelection),this.editor.on(\"changeSession\",this.$onChangeSession),this.editor.commands.on(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener(\"change\",this.$onChange),this.editor.removeListener(\"changeSelection\",this.$onChangeSelection),this.editor.removeListener(\"changeSession\",this.$onChangeSession),this.editor.commands.removeListener(\"afterExec\",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t=e.action[0]==\"r\",n=this.selectedTabstop||{},r=n.parents||{},i=(this.tabstops||[]).slice();for(var s=0;s<i.length;s++){var o=i[s],u=o==n||r[o.index];o.rangeList.$bias=u?0:1;if(e.action==\"remove\"&&o!==n){var a=o.parents&&o.parents[n.index],f=o.rangeList.pointIndex(e.start,a);f=f<0?-f-1:f+1;var l=o.rangeList.pointIndex(e.end,a);l=l<0?-l-1:l-1;var c=o.rangeList.ranges.slice(f,l);for(var h=0;h<c.length;h++)this.removeRange(c[h])}o.rangeList.$onChange(e)}var p=this.editor.session;!this.$inChange&&t&&p.getLength()==1&&!p.getValue()&&this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(!e||!e.hasLinkedRanges||!e.firstNonLinked)return;this.$inChange=!0;var n=this.editor.session,r=n.getTextRange(e.firstNonLinked);for(var i=0;i<e.length;i++){var s=e[i];if(!s.linked)continue;var o=s.original,u=t.snippetManager.tmStrFormat(r,o,this.editor);n.replace(s,u)}this.$inChange=!1},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(!this.editor)return;var e=this.editor.selection.lead,t=this.editor.selection.anchor,n=this.editor.selection.isEmpty();for(var r=0;r<this.ranges.length;r++){if(this.ranges[r].linked)continue;var i=this.ranges[r].contains(e.row,e.column),s=n||this.ranges[r].contains(t.row,t.column);if(i&&s)return}this.detach()},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,n=this.index+(e||1);n=Math.min(Math.max(n,1),t),n==t&&(n=0),this.selectTabstop(n),n===0&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];t&&this.addTabstopMarkers(t),this.index=e,t=this.tabstops[this.index];if(!t||!t.length)return;this.selectedTabstop=t;var n=t.firstNonLinked||t;t.choices&&(n.cursor=n.start);if(!this.editor.inVirtualSelectionMode){var r=this.editor.multiSelect;r.toSingleRange(n);for(var i=0;i<t.length;i++){if(t.hasLinkedRanges&&t[i].linked)continue;r.addRange(t[i].clone(),!0)}}else this.editor.selection.fromOrientedRange(n);this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler),this.selectedTabstop&&this.selectedTabstop.choices&&this.editor.execCommand(\"startAutocomplete\",{matches:this.selectedTabstop.choices})},this.addTabstops=function(e,t,n){var r=this.useLink||!this.editor.getOption(\"enableMultiselect\");this.$openTabstops||(this.$openTabstops=[]);if(!e[0]){var i=u.fromPoints(n,n);g(i.start,t),g(i.end,t),e[0]=[i],e[0].index=0}var s=this.index,o=[s+1,0],f=this.ranges;e.forEach(function(e,n){var i=this.$openTabstops[n]||e;for(var s=0;s<e.length;s++){var l=e[s],c=u.fromPoints(l.start,l.end||l.start);m(c.start,t),m(c.end,t),c.original=l,c.tabstop=i,f.push(c),i!=e?i.unshift(c):i[s]=c,l.fmtString||i.firstNonLinked&&r?(c.linked=!0,i.hasLinkedRanges=!0):i.firstNonLinked||(i.firstNonLinked=c)}i.firstNonLinked||(i.hasLinkedRanges=!1),i===e&&(o.push(i),this.$openTabstops[n]=i),this.addTabstopMarkers(i),i.rangeList=i.rangeList||new a,i.rangeList.$bias=0,i.rangeList.addList(i)},this),o.length>2&&(this.tabstops.length&&o.push(o.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,o))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,\"ace_snippet-marker\",\"text\"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);t!=-1&&e.tabstop.splice(t,1),t=this.ranges.indexOf(e),t!=-1&&this.ranges.splice(t,1),t=e.tabstop.rangeList.ranges.indexOf(e),t!=-1&&e.tabstop.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(t=this.tabstops.indexOf(e.tabstop),t!=-1&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new f,this.keyboardHandler.bindKeys({Tab:function(e){if(t.snippetManager&&t.snippetManager.expandWithTab(e))return;e.tabstopManager.tabNext(1),e.renderer.scrollCursorIntoView()},\"Shift-Tab\":function(e){e.tabstopManager.tabNext(-1),e.renderer.scrollCursorIntoView()},Esc:function(e){e.tabstopManager.detach()}})}).call(v.prototype);var m=function(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row},g=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};r.importCssString(\".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}\",\"snippets.css\",!1),t.snippetManager=new d;var y=e(\"./editor\").Editor;(function(){this.insertSnippet=function(e,n){return t.snippetManager.insertSnippet(this,e,n)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(y.prototype)}),ace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../virtual_renderer\").VirtualRenderer,i=e(\"../editor\").Editor,s=e(\"../range\").Range,o=e(\"../lib/event\"),u=e(\"../lib/lang\"),a=e(\"../lib/dom\"),f=function(e){var t=new r(e);t.$maxLines=4;var n=new i(t);return n.setHighlightActiveLine(!1),n.setShowPrintMargin(!1),n.renderer.setShowGutter(!1),n.renderer.setHighlightGutterLine(!1),n.$mouseHandler.$focusTimeout=0,n.$highlightTagPending=!0,n},l=function(e){var t=a.createElement(\"div\"),n=new f(t);e&&e.appendChild(t),t.style.display=\"none\",n.renderer.content.style.cursor=\"default\",n.renderer.setStyle(\"ace_autocomplete\"),n.setOption(\"displayIndentGuides\",!1),n.setOption(\"dragDelay\",150);var r=function(){};n.focus=r,n.$isFocused=!0,n.renderer.$cursorLayer.restartTimer=r,n.renderer.$cursorLayer.element.style.opacity=0,n.renderer.$maxLines=8,n.renderer.$keepTextAreaAtCursor=!1,n.setHighlightActiveLine(!1),n.session.highlight(\"\"),n.session.$searchHighlight.clazz=\"ace_highlight-marker\",n.on(\"mousedown\",function(e){var t=e.getDocumentPosition();n.selection.moveToPosition(t),c.start.row=c.end.row=t.row,e.stop()});var i,l=new s(-1,0,-1,Infinity),c=new s(-1,0,-1,Infinity);c.id=n.session.addMarker(c,\"ace_active-line\",\"fullLine\"),n.setSelectOnHover=function(e){e?l.id&&(n.session.removeMarker(l.id),l.id=null):l.id=n.session.addMarker(l,\"ace_line-hover\",\"fullLine\")},n.setSelectOnHover(!1),n.on(\"mousemove\",function(e){if(!i){i=e;return}if(i.x==e.x&&i.y==e.y)return;i=e,i.scrollTop=n.renderer.scrollTop;var t=i.getDocumentPosition().row;l.start.row!=t&&(l.id||n.setRow(t),p(t))}),n.renderer.on(\"beforeRender\",function(){if(i&&l.start.row!=-1){i.$pos=null;var e=i.getDocumentPosition().row;l.id||n.setRow(e),p(e,!0)}}),n.renderer.on(\"afterRender\",function(){var e=n.getRow(),t=n.renderer.$textLayer,r=t.element.childNodes[e-t.config.firstRow];r!==t.selectedNode&&t.selectedNode&&a.removeCssClass(t.selectedNode,\"ace_selected\"),t.selectedNode=r,r&&a.addCssClass(r,\"ace_selected\")});var h=function(){p(-1)},p=function(e,t){e!==l.start.row&&(l.start.row=l.end.row=e,t||n.session._emit(\"changeBackMarker\"),n._emit(\"changeHoverMarker\"))};n.getHoveredRow=function(){return l.start.row},o.addListener(n.container,\"mouseout\",h),n.on(\"hide\",h),n.on(\"changeSelection\",h),n.session.doc.getLength=function(){return n.data.length},n.session.doc.getLine=function(e){var t=n.data[e];return typeof t==\"string\"?t:t&&t.value||\"\"};var d=n.session.bgTokenizer;return d.$tokenizeRow=function(e){function s(e,n){e&&r.push({type:(t.className||\"\")+(n||\"\"),value:e})}var t=n.data[e],r=[];if(!t)return r;typeof t==\"string\"&&(t={value:t});var i=t.caption||t.value||t.name,o=i.toLowerCase(),u=(n.filterText||\"\").toLowerCase(),a=0,f=0;for(var l=0;l<=u.length;l++)if(l!=f&&(t.matchMask&1<<l||l==u.length)){var c=u.slice(f,l);f=l;var h=o.indexOf(c,a);if(h==-1)continue;s(i.slice(a,h),\"\"),a=h+c.length,s(i.slice(h,a),\"completion-highlight\")}return s(i.slice(a,i.length),\"\"),t.meta&&r.push({type:\"completion-meta\",value:t.meta}),t.message&&r.push({type:\"completion-message\",value:t.message}),r},d.$updateOnChange=r,d.start=r,n.session.$computeWidth=function(){return this.screenWidth=0},n.isOpen=!1,n.isTopdown=!1,n.autoSelect=!0,n.filterText=\"\",n.data=[],n.setData=function(e,t){n.filterText=t||\"\",n.setValue(u.stringRepeat(\"\\n\",e.length),-1),n.data=e||[],n.setRow(0)},n.getData=function(e){return n.data[e]},n.getRow=function(){return c.start.row},n.setRow=function(e){e=Math.max(this.autoSelect?0:-1,Math.min(this.data.length,e)),c.start.row!=e&&(n.selection.clearSelection(),c.start.row=c.end.row=e||0,n.session._emit(\"changeBackMarker\"),n.moveCursorTo(e||0,0),n.isOpen&&n._signal(\"select\"))},n.on(\"changeSelection\",function(){n.isOpen&&n.setRow(n.selection.lead.row),n.renderer.scrollCursorIntoView()}),n.hide=function(){this.container.style.display=\"none\",this._signal(\"hide\"),n.isOpen=!1},n.show=function(e,t,r){var s=this.container,o=window.innerHeight,u=window.innerWidth,a=this.renderer,f=a.$maxLines*t*1.4,l=e.top+this.$borderSize,c=l>o/2&&!r;c&&l+t+f>o?(a.$maxPixelHeight=l-2*this.$borderSize,s.style.top=\"\",s.style.bottom=o-l+\"px\",n.isTopdown=!1):(l+=t,a.$maxPixelHeight=o-l-.2*t,s.style.top=l+\"px\",s.style.bottom=\"\",n.isTopdown=!0),s.style.display=\"\";var h=e.left;h+s.offsetWidth>u&&(h=u-s.offsetWidth),s.style.left=h+\"px\",this._signal(\"show\"),i=null,n.isOpen=!0},n.goTo=function(e){var t=this.getRow(),n=this.session.getLength()-1;switch(e){case\"up\":t=t<=0?n:t-1;break;case\"down\":t=t>=n?-1:t+1;break;case\"start\":t=0;break;case\"end\":t=n}this.setRow(t)},n.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},n.$imageSize=0,n.$borderSize=1,n};a.importCssString(\".ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { background-color: #CAD6FA; z-index: 1;}.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { background-color: #3a674e;}.ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid #abbffe; margin-top: -1px; background: rgba(233,233,253,0.4); position: absolute; z-index: 2;}.ace_dark.ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid rgba(109, 150, 13, 0.8); background: rgba(58, 103, 78, 0.62);}.ace_completion-meta { opacity: 0.5; margin: 0.9em;}.ace_completion-message { color: blue;}.ace_editor.ace_autocomplete .ace_completion-highlight{ color: #2d69c7;}.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{ color: #93ca12;}.ace_editor.ace_autocomplete { width: 300px; z-index: 200000; border: 1px lightgray solid; position: fixed; box-shadow: 2px 3px 5px rgba(0,0,0,.2); line-height: 1.4; background: #fefefe; color: #111;}.ace_dark.ace_editor.ace_autocomplete { border: 1px #484747 solid; box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51); line-height: 1.4; background: #25282c; color: #c1c1c1;}\",\"autocompletion.css\",!1),t.AcePopup=l,t.$singleLineEditor=f}),ace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.parForEach=function(e,t,n){var r=0,i=e.length;i===0&&n();for(var s=0;s<i;s++)t(e[s],function(e,t){r++,r===i&&n(e,t)})};var r=/[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;t.retrievePrecedingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t-1;s>=0;s--){if(!n.test(e[s]))break;i.push(e[s])}return i.reverse().join(\"\")},t.retrieveFollowingIdentifier=function(e,t,n){n=n||r;var i=[];for(var s=t;s<e.length;s++){if(!n.test(e[s]))break;i.push(e[s])}return i},t.getCompletionPrefix=function(e){var t=e.getCursorPosition(),n=e.session.getLine(t.row),r;return e.completers.forEach(function(e){e.identifierRegexps&&e.identifierRegexps.forEach(function(e){!r&&e&&(r=this.retrievePrecedingIdentifier(n,t.column,e))}.bind(this))}.bind(this)),r||this.retrievePrecedingIdentifier(n,t.column)}}),ace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"./keyboard/hash_handler\").HashHandler,i=e(\"./autocomplete/popup\").AcePopup,s=e(\"./autocomplete/util\"),o=e(\"./lib/lang\"),u=e(\"./lib/dom\"),a=e(\"./snippets\").snippetManager,f=e(\"./config\"),l=function(){this.autoInsert=!1,this.autoSelect=!0,this.exactMatch=!1,this.gatherCompletionsId=0,this.keyboardHandler=new r,this.keyboardHandler.bindKeys(this.commands),this.blurListener=this.blurListener.bind(this),this.changeListener=this.changeListener.bind(this),this.mousedownListener=this.mousedownListener.bind(this),this.mousewheelListener=this.mousewheelListener.bind(this),this.changeTimer=o.delayedCall(function(){this.updateCompletions(!0)}.bind(this)),this.tooltipTimer=o.delayedCall(this.updateDocTooltip.bind(this),50)};(function(){this.$init=function(){return this.popup=new i(document.body||document.documentElement),this.popup.on(\"click\",function(e){this.insertMatch(),e.stop()}.bind(this)),this.popup.focus=this.editor.focus.bind(this.editor),this.popup.on(\"show\",this.tooltipTimer.bind(null,null)),this.popup.on(\"select\",this.tooltipTimer.bind(null,null)),this.popup.on(\"changeHoverMarker\",this.tooltipTimer.bind(null,null)),this.popup},this.getPopup=function(){return this.popup||this.$init()},this.openPopup=function(e,t,n){this.popup||this.$init(),this.popup.autoSelect=this.autoSelect,this.popup.setData(this.completions.filtered,this.completions.filterText),e.keyBinding.addKeyboardHandler(this.keyboardHandler);var r=e.renderer;this.popup.setRow(this.autoSelect?0:-1);if(!n){this.popup.setTheme(e.getTheme()),this.popup.setFontSize(e.getFontSize());var i=r.layerConfig.lineHeight,s=r.$cursorLayer.getPixelPosition(this.base,!0);s.left-=this.popup.getTextLeftOffset();var o=e.container.getBoundingClientRect();s.top+=o.top-r.layerConfig.offset,s.left+=o.left-e.renderer.scrollLeft,s.left+=r.gutterWidth,this.popup.show(s,i)}else n&&!t&&this.detach();this.changeTimer.cancel()},this.detach=function(){this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.off(\"changeSelection\",this.changeListener),this.editor.off(\"blur\",this.blurListener),this.editor.off(\"mousedown\",this.mousedownListener),this.editor.off(\"mousewheel\",this.mousewheelListener),this.changeTimer.cancel(),this.hideDocTooltip(),this.gatherCompletionsId+=1,this.popup&&this.popup.isOpen&&this.popup.hide(),this.base&&this.base.detach(),this.activated=!1,this.completions=this.base=null},this.changeListener=function(e){var t=this.editor.selection.lead;(t.row!=this.base.row||t.column<this.base.column)&&this.detach(),this.activated?this.changeTimer.schedule():this.detach()},this.blurListener=function(e){var t=document.activeElement,n=this.editor.textInput.getElement(),r=e.relatedTarget&&this.tooltipNode&&this.tooltipNode.contains(e.relatedTarget),i=this.popup&&this.popup.container;t!=n&&t.parentNode!=i&&!r&&t!=this.tooltipNode&&e.relatedTarget!=n&&this.detach()},this.mousedownListener=function(e){this.detach()},this.mousewheelListener=function(e){this.detach()},this.goTo=function(e){this.popup.goTo(e)},this.insertMatch=function(e,t){e||(e=this.popup.getData(this.popup.getRow()));if(!e)return!1;var n=this.completions;this.editor.startOperation({command:{name:\"insertMatch\"}});if(e.completer&&e.completer.insertMatch)e.completer.insertMatch(this.editor,e);else{if(n.filterText){var r=this.editor.selection.getAllRanges();for(var i=0,s;s=r[i];i++)s.start.column-=n.filterText.length,this.editor.session.remove(s)}e.snippet?a.insertSnippet(this.editor,e.snippet):this.editor.execCommand(\"insertstring\",e.value||e)}this.completions==n&&this.detach(),this.editor.endOperation()},this.commands={Up:function(e){e.completer.goTo(\"up\")},Down:function(e){e.completer.goTo(\"down\")},\"Ctrl-Up|Ctrl-Home\":function(e){e.completer.goTo(\"start\")},\"Ctrl-Down|Ctrl-End\":function(e){e.completer.goTo(\"end\")},Esc:function(e){e.completer.detach()},Return:function(e){return e.completer.insertMatch()},\"Shift-Return\":function(e){e.completer.insertMatch(null,{deleteSuffix:!0})},Tab:function(e){var t=e.completer.insertMatch();if(!!t||!!e.tabstopManager)return t;e.completer.goTo(\"down\")},PageUp:function(e){e.completer.popup.gotoPageUp()},PageDown:function(e){e.completer.popup.gotoPageDown()}},this.gatherCompletions=function(e,t){var n=e.getSession(),r=e.getCursorPosition(),i=s.getCompletionPrefix(e);this.base=n.doc.createAnchor(r.row,r.column-i.length),this.base.$insertRight=!0;var o=[],u=e.completers.length;return e.completers.forEach(function(a,f){a.getCompletions(e,n,r,i,function(n,r){!n&&r&&(o=o.concat(r)),t(null,{prefix:s.getCompletionPrefix(e),matches:o,finished:--u===0})})}),!0},this.showPopup=function(e,t){this.editor&&this.detach(),this.activated=!0,this.editor=e,e.completer!=this&&(e.completer&&e.completer.detach(),e.completer=this),e.on(\"changeSelection\",this.changeListener),e.on(\"blur\",this.blurListener),e.on(\"mousedown\",this.mousedownListener),e.on(\"mousewheel\",this.mousewheelListener),this.updateCompletions(!1,t)},this.updateCompletions=function(e,t){if(e&&this.base&&this.completions){var n=this.editor.getCursorPosition(),r=this.editor.session.getTextRange({start:this.base,end:n});if(r==this.completions.filterText)return;this.completions.setFilter(r);if(!this.completions.filtered.length)return this.detach();if(this.completions.filtered.length==1&&this.completions.filtered[0].value==r&&!this.completions.filtered[0].snippet)return this.detach();this.openPopup(this.editor,r,e);return}if(t&&t.matches){var n=this.editor.getSelectionRange().start;return this.base=this.editor.session.doc.createAnchor(n.row,n.column),this.base.$insertRight=!0,this.completions=new c(t.matches),this.openPopup(this.editor,\"\",e)}var i=this.gatherCompletionsId,s=function(e){if(!e.finished)return;return this.detach()}.bind(this),o=function(t){var n=t.prefix,r=t.matches;this.completions=new c(r),this.exactMatch&&(this.completions.exactMatch=!0),this.completions.setFilter(n);var i=this.completions.filtered;if(!i.length)return s(t);if(i.length==1&&i[0].value==n&&!i[0].snippet)return s(t);if(this.autoInsert&&i.length==1&&t.finished)return this.insertMatch(i[0]);this.openPopup(this.editor,n,e)}.bind(this),u=!0,a=null;this.gatherCompletions(this.editor,function(e,t){var n=t.prefix,r=t&&t.matches;if(!r||!r.length)return s(t);if(n.indexOf(t.prefix)!==0||i!=this.gatherCompletionsId)return;if(u){a=t;return}o(t)}.bind(this)),u=!1;if(a){var f=a;a=null,o(f)}},this.cancelContextMenu=function(){this.editor.$mouseHandler.cancelContextMenu()},this.updateDocTooltip=function(){var e=this.popup,t=e.data,n=t&&(t[e.getHoveredRow()]||t[e.getRow()]),r=null;if(!n||!this.editor||!this.popup.isOpen)return this.hideDocTooltip();this.editor.completers.some(function(e){return e.getDocTooltip&&(r=e.getDocTooltip(n)),r}),!r&&typeof n!=\"string\"&&(r=n),typeof r==\"string\"&&(r={docText:r});if(!r||!r.docHTML&&!r.docText)return this.hideDocTooltip();this.showDocTooltip(r)},this.showDocTooltip=function(e){this.tooltipNode||(this.tooltipNode=u.createElement(\"div\"),this.tooltipNode.className=\"ace_tooltip ace_doc-tooltip\",this.tooltipNode.style.margin=0,this.tooltipNode.style.pointerEvents=\"auto\",this.tooltipNode.tabIndex=-1,this.tooltipNode.onblur=this.blurListener.bind(this),this.tooltipNode.onclick=this.onTooltipClick.bind(this));var t=this.tooltipNode;e.docHTML?t.innerHTML=e.docHTML:e.docText&&(t.textContent=e.docText),t.parentNode||document.body.appendChild(t);var n=this.popup,r=n.container.getBoundingClientRect();t.style.top=n.container.style.top,t.style.bottom=n.container.style.bottom,t.style.display=\"block\",window.innerWidth-r.right<320?r.left<320?n.isTopdown?(t.style.top=r.bottom+\"px\",t.style.left=r.left+\"px\",t.style.right=\"\",t.style.bottom=\"\"):(t.style.top=n.container.offsetTop-t.offsetHeight+\"px\",t.style.left=r.left+\"px\",t.style.right=\"\",t.style.bottom=\"\"):(t.style.right=window.innerWidth-r.left+\"px\",t.style.left=\"\"):(t.style.left=r.right+1+\"px\",t.style.right=\"\")},this.hideDocTooltip=function(){this.tooltipTimer.cancel();if(!this.tooltipNode)return;var e=this.tooltipNode;!this.editor.isFocused()&&document.activeElement==e&&this.editor.focus(),this.tooltipNode=null,e.parentNode&&e.parentNode.removeChild(e)},this.onTooltipClick=function(e){var t=e.target;while(t&&t!=this.tooltipNode){if(t.nodeName==\"A\"&&t.href){t.rel=\"noreferrer\",t.target=\"_blank\";break}t=t.parentNode}},this.destroy=function(){this.detach();if(this.popup){this.popup.destroy();var e=this.popup.container;e&&e.parentNode&&e.parentNode.removeChild(e)}this.editor&&this.editor.completer==this&&this.editor.completer==null,this.popup=null}}).call(l.prototype),l.for=function(e){return e.completer?e.completer:(f.get(\"sharedPopups\")?(l.$shared||(l.$sharedInstance=new l),e.completer=l.$sharedInstance):(e.completer=new l,e.once(\"destroy\",function(e,t){t.completer.destroy()})),e.completer)},l.startCommand={name:\"startAutocomplete\",exec:function(e,t){var n=l.for(e);n.autoInsert=!1,n.autoSelect=!0,n.showPopup(e,t),n.cancelContextMenu()},bindKey:\"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"};var c=function(e,t){this.all=e,this.filtered=e,this.filterText=t||\"\",this.exactMatch=!1};(function(){this.setFilter=function(e){if(e.length>this.filterText&&e.lastIndexOf(this.filterText,0)===0)var t=this.filtered;else var t=this.all;this.filterText=e,t=this.filterCompletions(t,this.filterText),t=t.sort(function(e,t){return t.exactMatch-e.exactMatch||t.$score-e.$score||(e.caption||e.value).localeCompare(t.caption||t.value)});var n=null;t=t.filter(function(e){var t=e.snippet||e.caption||e.value;return t===n?!1:(n=t,!0)}),this.filtered=t},this.filterCompletions=function(e,t){var n=[],r=t.toUpperCase(),i=t.toLowerCase();e:for(var s=0,o;o=e[s];s++){var u=o.caption||o.value||o.snippet;if(!u)continue;var a=-1,f=0,l=0,c,h;if(this.exactMatch){if(t!==u.substr(0,t.length))continue e}else{var p=u.toLowerCase().indexOf(i);if(p>-1)l=p;else for(var d=0;d<t.length;d++){var v=u.indexOf(i[d],a+1),m=u.indexOf(r[d],a+1);c=v>=0?m<0||v<m?v:m:m;if(c<0)continue e;h=c-a-1,h>0&&(a===-1&&(l+=10),l+=h,f|=1<<d),a=c}}o.matchMask=f,o.exactMatch=l?0:1,o.$score=(o.score||0)-l,n.push(o)}return n}}).call(c.prototype),t.Autocomplete=l,t.FilteredList=c}),ace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){function s(e,t){var n=e.getTextRange(r.fromPoints({row:0,column:0},t));return n.split(i).length-1}function o(e,t){var n=s(e,t),r=e.getValue().split(i),o=Object.create(null),u=r[n];return r.forEach(function(e,t){if(!e||e===u)return;var i=Math.abs(n-t),s=r.length-i;o[e]?o[e]=Math.max(s,o[e]):o[e]=s}),o}var r=e(\"../range\").Range,i=/[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;t.getCompletions=function(e,t,n,r,i){var s=o(t,n),u=Object.keys(s);i(null,u.map(function(e){return{caption:e,value:e,score:s[e],meta:\"local\"}}))}}),ace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../snippets\").snippetManager,i=e(\"../autocomplete\").Autocomplete,s=e(\"../config\"),o=e(\"../lib/lang\"),u=e(\"../autocomplete/util\"),a=e(\"../autocomplete/text_completer\"),f={getCompletions:function(e,t,n,r,i){if(t.$mode.completer)return t.$mode.completer.getCompletions(e,t,n,r,i);var s=e.session.getState(n.row),o=t.$mode.getCompletions(s,t,n,r);i(null,o)}},l={getCompletions:function(e,t,n,i,s){var o=[],u=t.getTokenAt(n.row,n.column);u&&u.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/)?o.push(\"html-tag\"):o=r.getActiveScopes(e);var a=r.snippetMap,f=[];o.forEach(function(e){var t=a[e]||[];for(var n=t.length;n--;){var r=t[n],i=r.name||r.tabTrigger;if(!i)continue;f.push({caption:i,snippet:r.content,meta:r.tabTrigger&&!r.name?r.tabTrigger+\"\\u21e5 \":\"snippet\",type:\"snippet\"})}},this),s(null,f)},getDocTooltip:function(e){e.type==\"snippet\"&&!e.docHTML&&(e.docHTML=[\"<b>\",o.escapeHTML(e.caption),\"</b>\",\"<hr></hr>\",o.escapeHTML(e.snippet)].join(\"\"))}},c=[l,a,f];t.setCompleters=function(e){c.length=0,e&&c.push.apply(c,e)},t.addCompleter=function(e){c.push(e)},t.textCompleter=a,t.keyWordCompleter=f,t.snippetCompleter=l;var h={name:\"expandSnippet\",exec:function(e){return r.expandWithTab(e)},bindKey:\"Tab\"},p=function(e,t){d(t.session.$mode)},d=function(e){typeof e==\"string\"&&(e=s.$modes[e]);if(!e)return;r.files||(r.files={}),v(e.$id,e.snippetFileId),e.modes&&e.modes.forEach(d)},v=function(e,t){if(!t||!e||r.files[e])return;r.files[e]={},s.loadModule(t,function(t){if(!t)return;r.files[e]=t,!t.snippets&&t.snippetText&&(t.snippets=r.parseSnippetFile(t.snippetText)),r.register(t.snippets||[],t.scope),t.includeScopes&&(r.snippetMap[t.scope].includeScopes=t.includeScopes,t.includeScopes.forEach(function(e){d(\"ace/mode/\"+e)}))})},m=function(e){var t=e.editor,n=t.completer&&t.completer.activated;if(e.command.name===\"backspace\")n&&!u.getCompletionPrefix(t)&&t.completer.detach();else if(e.command.name===\"insertstring\"){var r=u.getCompletionPrefix(t);if(r&&!n){var s=i.for(t);s.autoInsert=!1,s.showPopup(t)}}},g=e(\"../editor\").Editor;e(\"../config\").defineOptions(g.prototype,\"editor\",{enableBasicAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:c),this.commands.addCommand(i.startCommand)):this.commands.removeCommand(i.startCommand)},value:!1},enableLiveAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:c),this.commands.on(\"afterExec\",m)):this.commands.removeListener(\"afterExec\",m)},value:!1},enableSnippets:{set:function(e){e?(this.commands.addCommand(h),this.on(\"changeMode\",p),p(null,this)):(this.commands.removeCommand(h),this.off(\"changeMode\",p))},value:!1}})}); (function() {\n ace.require([\"ace/ext/language_tools\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/ext/searchbox\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/keyboard/hash_handler\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=e(\"../lib/lang\"),s=e(\"../lib/event\"),o='.ace_search {background-color: #ddd;color: #666;border: 1px solid #cbcbcb;border-top: 0 none;overflow: hidden;margin: 0;padding: 4px 6px 0 4px;position: absolute;top: 0;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {margin: 0 20px 4px 0;overflow: hidden;line-height: 1.9;}.ace_replace_form {margin-right: 0;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {border-radius: 3px 0 0 3px;background-color: white;color: black;border: 1px solid #cbcbcb;border-right: 0 none;outline: 0;padding: 0;font-size: inherit;margin: 0;line-height: inherit;padding: 0 6px;min-width: 17em;vertical-align: top;min-height: 1.8em;box-sizing: content-box;}.ace_searchbtn {border: 1px solid #cbcbcb;line-height: inherit;display: inline-block;padding: 0 6px;background: #fff;border-right: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;margin: 0;position: relative;color: #666;}.ace_searchbtn:last-child {border-radius: 0 3px 3px 0;border-right: 1px solid #cbcbcb;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn:hover {background-color: #eef1f6;}.ace_searchbtn.prev, .ace_searchbtn.next {padding: 0px 0.7em}.ace_searchbtn.prev:after, .ace_searchbtn.next:after {content: \"\";border: solid 2px #888;width: 0.5em;height: 0.5em;border-width: 2px 0 0 2px;display:inline-block;transform: rotate(-45deg);}.ace_searchbtn.next:after {border-width: 0 2px 2px 0 ;}.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;font: 16px/16px Arial;padding: 0;height: 14px;width: 14px;top: 9px;right: 7px;position: absolute;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;box-sizing: border-box!important;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;clear: both;}.ace_search_counter {float: left;font-family: arial;padding: 0 8px;}',u=e(\"../keyboard/hash_handler\").HashHandler,a=e(\"../lib/keys\"),f=999;r.importCssString(o,\"ace_searchbox\",!1);var l=function(e,t,n){var i=r.createElement(\"div\");r.buildDom([\"div\",{\"class\":\"ace_search right\"},[\"span\",{action:\"hide\",\"class\":\"ace_searchbtn_close\"}],[\"div\",{\"class\":\"ace_search_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:\"Search for\",spellcheck:\"false\"}],[\"span\",{action:\"findPrev\",\"class\":\"ace_searchbtn prev\"},\"\\u200b\"],[\"span\",{action:\"findNext\",\"class\":\"ace_searchbtn next\"},\"\\u200b\"],[\"span\",{action:\"findAll\",\"class\":\"ace_searchbtn\",title:\"Alt-Enter\"},\"All\"]],[\"div\",{\"class\":\"ace_replace_form\"},[\"input\",{\"class\":\"ace_search_field\",placeholder:\"Replace with\",spellcheck:\"false\"}],[\"span\",{action:\"replaceAndFindNext\",\"class\":\"ace_searchbtn\"},\"Replace\"],[\"span\",{action:\"replaceAll\",\"class\":\"ace_searchbtn\"},\"All\"]],[\"div\",{\"class\":\"ace_search_options\"},[\"span\",{action:\"toggleReplace\",\"class\":\"ace_button\",title:\"Toggle Replace mode\",style:\"float:left;margin-top:-2px;padding:0 5px;\"},\"+\"],[\"span\",{\"class\":\"ace_search_counter\"}],[\"span\",{action:\"toggleRegexpMode\",\"class\":\"ace_button\",title:\"RegExp Search\"},\".*\"],[\"span\",{action:\"toggleCaseSensitive\",\"class\":\"ace_button\",title:\"CaseSensitive Search\"},\"Aa\"],[\"span\",{action:\"toggleWholeWords\",\"class\":\"ace_button\",title:\"Whole Word Search\"},\"\\\\b\"],[\"span\",{action:\"searchInSelection\",\"class\":\"ace_button\",title:\"Search In Selection\"},\"S\"]]],i),this.element=i.firstChild,this.setSession=this.setSession.bind(this),this.$init(),this.setEditor(e),r.importCssString(o,\"ace_searchbox\",e.container)};(function(){this.setEditor=function(e){e.searchBox=this,e.renderer.scroller.appendChild(this.element),this.editor=e},this.setSession=function(e){this.searchRange=null,this.$syncOptions(!0)},this.$initElements=function(e){this.searchBox=e.querySelector(\".ace_search_form\"),this.replaceBox=e.querySelector(\".ace_replace_form\"),this.searchOption=e.querySelector(\"[action=searchInSelection]\"),this.replaceOption=e.querySelector(\"[action=toggleReplace]\"),this.regExpOption=e.querySelector(\"[action=toggleRegexpMode]\"),this.caseSensitiveOption=e.querySelector(\"[action=toggleCaseSensitive]\"),this.wholeWordOption=e.querySelector(\"[action=toggleWholeWords]\"),this.searchInput=this.searchBox.querySelector(\".ace_search_field\"),this.replaceInput=this.replaceBox.querySelector(\".ace_search_field\"),this.searchCounter=e.querySelector(\".ace_search_counter\")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,\"mousedown\",function(e){setTimeout(function(){t.activeInput.focus()},0),s.stopPropagation(e)}),s.addListener(e,\"click\",function(e){var n=e.target||e.srcElement,r=n.getAttribute(\"action\");r&&t[r]?t[r]():t.$searchBarKb.commands[r]&&t.$searchBarKb.commands[r].exec(t),s.stopPropagation(e)}),s.addCommandKeyListener(e,function(e,n,r){var i=a.keyCodeToString(r),o=t.$searchBarKb.findKeyCommand(n,i);o&&o.exec&&(o.exec(t),s.stopEvent(e))}),this.$onChange=i.delayedCall(function(){t.find(!1,!1)}),s.addListener(this.searchInput,\"input\",function(){t.$onChange.schedule(20)}),s.addListener(this.searchInput,\"focus\",function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()}),s.addListener(this.replaceInput,\"focus\",function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()})},this.$closeSearchBarKb=new u([{bindKey:\"Esc\",name:\"closeSearchBar\",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new u,this.$searchBarKb.bindKeys({\"Ctrl-f|Command-f\":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?\"\":\"none\",e.replaceOption.checked=!1,e.$syncOptions(),e.searchInput.focus()},\"Ctrl-H|Command-Option-F\":function(e){if(e.editor.getReadOnly())return;e.replaceOption.checked=!0,e.$syncOptions(),e.replaceInput.focus()},\"Ctrl-G|Command-G\":function(e){e.findNext()},\"Ctrl-Shift-G|Command-Shift-G\":function(e){e.findPrev()},esc:function(e){setTimeout(function(){e.hide()})},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},\"Shift-Return\":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},\"Alt-Return\":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:\"toggleRegexpMode\",bindKey:{win:\"Alt-R|Alt-/\",mac:\"Ctrl-Alt-R|Ctrl-Alt-/\"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:\"toggleCaseSensitive\",bindKey:{win:\"Alt-C|Alt-I\",mac:\"Ctrl-Alt-R|Ctrl-Alt-I\"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:\"toggleWholeWords\",bindKey:{win:\"Alt-B|Alt-W\",mac:\"Ctrl-Alt-B|Ctrl-Alt-W\"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}},{name:\"toggleReplace\",exec:function(e){e.replaceOption.checked=!e.replaceOption.checked,e.$syncOptions()}},{name:\"searchInSelection\",exec:function(e){e.searchOption.checked=!e.searchRange,e.setSearchRange(e.searchOption.checked&&e.editor.getSelectionRange()),e.$syncOptions()}}]),this.setSearchRange=function(e){this.searchRange=e,e?this.searchRangeMarker=this.editor.session.addMarker(e,\"ace_active-line\"):this.searchRangeMarker&&(this.editor.session.removeMarker(this.searchRangeMarker),this.searchRangeMarker=null)},this.$syncOptions=function(e){r.setCssClass(this.replaceOption,\"checked\",this.searchRange),r.setCssClass(this.searchOption,\"checked\",this.searchOption.checked),this.replaceOption.textContent=this.replaceOption.checked?\"-\":\"+\",r.setCssClass(this.regExpOption,\"checked\",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,\"checked\",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,\"checked\",this.caseSensitiveOption.checked);var t=this.editor.getReadOnly();this.replaceOption.style.display=t?\"none\":\"\",this.replaceBox.style.display=this.replaceOption.checked&&!t?\"\":\"none\",this.find(!1,!1,e)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t,n){var i=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked,preventScroll:n,range:this.searchRange}),s=!i&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",s),this.editor._emit(\"findSearchBox\",{match:!s}),this.highlight(),this.updateCounter()},this.updateCounter=function(){var e=this.editor,t=e.$search.$options.re,n=0,r=0;if(t){var i=this.searchRange?e.session.getTextRange(this.searchRange):e.getValue(),s=e.session.doc.positionToIndex(e.selection.anchor);this.searchRange&&(s-=e.session.doc.positionToIndex(this.searchRange.start));var o=t.lastIndex=0,u;while(u=t.exec(i)){n++,o=u.index,o<=s&&r++;if(n>f)break;if(!u[0]){t.lastIndex=o+=1;if(o>=i.length)break}}}this.searchCounter.textContent=r+\" of \"+(n>f?f+\"+\":n)},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,\"ace_nomatch\",t),this.editor._emit(\"findSearchBox\",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.active=!1,this.setSearchRange(null),this.editor.off(\"changeSession\",this.setSession),this.element.style.display=\"none\",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.active=!0,this.editor.on(\"changeSession\",this.setSession),this.element.style.display=\"\",this.replaceOption.checked=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb),this.$syncOptions(!0)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){var n=e.searchBox||new l(e);n.show(e.session.getTextRange(),t)}}); (function() {\n ace.require([\"ace/ext/searchbox\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","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/behaviour/cstyle\",\"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(\"./behaviour/cstyle\").CstyleBehaviour,f=e(\"./folding/ruby\").FoldMode,l=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new a,this.foldingRules=new f,this.indentKeywords=this.foldingRules.indentKeywords};r.inherits(l,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(l.prototype),t.Mode=l}); (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\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){t.isDark=!0,t.cssClass=\"ace-twilight\",t.cssText=\".ace-twilight .ace_gutter {background: #232323;color: #E2E2E2}.ace-twilight .ace_print-margin {width: 1px;background: #232323}.ace-twilight {background-color: #141414;color: #F8F8F8}.ace-twilight .ace_cursor {color: #A7A7A7}.ace-twilight .ace_marker-layer .ace_selection {background: rgba(221, 240, 255, 0.20)}.ace-twilight.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #141414;}.ace-twilight .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-twilight .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgba(255, 255, 255, 0.25)}.ace-twilight .ace_marker-layer .ace_active-line {background: rgba(255, 255, 255, 0.031)}.ace-twilight .ace_gutter-active-line {background-color: rgba(255, 255, 255, 0.031)}.ace-twilight .ace_marker-layer .ace_selected-word {border: 1px solid rgba(221, 240, 255, 0.20)}.ace-twilight .ace_invisible {color: rgba(255, 255, 255, 0.25)}.ace-twilight .ace_keyword,.ace-twilight .ace_meta {color: #CDA869}.ace-twilight .ace_constant,.ace-twilight .ace_constant.ace_character,.ace-twilight .ace_constant.ace_character.ace_escape,.ace-twilight .ace_constant.ace_other,.ace-twilight .ace_heading,.ace-twilight .ace_markup.ace_heading,.ace-twilight .ace_support.ace_constant {color: #CF6A4C}.ace-twilight .ace_invalid.ace_illegal {color: #F8F8F8;background-color: rgba(86, 45, 86, 0.75)}.ace-twilight .ace_invalid.ace_deprecated {text-decoration: underline;font-style: italic;color: #D2A8A1}.ace-twilight .ace_support {color: #9B859D}.ace-twilight .ace_fold {background-color: #AC885B;border-color: #F8F8F8}.ace-twilight .ace_support.ace_function {color: #DAD085}.ace-twilight .ace_list,.ace-twilight .ace_markup.ace_list,.ace-twilight .ace_storage {color: #F9EE98}.ace-twilight .ace_entity.ace_name.ace_function,.ace-twilight .ace_meta.ace_tag {color: #AC885B}.ace-twilight .ace_string {color: #8F9D6A}.ace-twilight .ace_string.ace_regexp {color: #E9C062}.ace-twilight .ace_comment {font-style: italic;color: #5F5A60}.ace-twilight .ace_variable {color: #7587A6}.ace-twilight .ace_xml-pe {color: #494949}.ace-twilight .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y}\";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/fixoldbrowsers\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nif (typeof Element != \"undefined\" && !Element.prototype.remove) {\n Object.defineProperty(Element.prototype, \"remove\", {\n enumerable: false,\n writable: true,\n configurable: true,\n value: function() { this.parentNode && this.parentNode.removeChild(this); }\n });\n}\n\n\n});\n\nace.define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"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 } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n};\nvar _navigator = typeof navigator == \"object\" ? navigator : {};\n\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\n \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;\n\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\n\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\n\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n\nif (exports.isIOS) exports.isMac = true;\n\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"./useragent\"); \nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\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 \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 \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 } else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n } else if (n === \"ref\") {\n if (refs) refs[val] = el;\n } else if (n === \"style\") {\n if (typeof val == \"string\") el.style.cssText = val;\n } else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n if (parent)\n parent.appendChild(el);\n return el;\n};\n\nexports.getDocumentHead = function(doc) {\n if (!doc)\n doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\n\nexports.createElement = function(tag, ns) {\n return document.createElementNS ?\n document.createElementNS(ns || XHTML_NS, tag) :\n document.createElement(tag);\n};\n\nexports.removeChildren = function(element) {\n element.innerHTML = \"\";\n};\n\nexports.createTextNode = function(textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n};\n\nexports.createFragment = function(element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n};\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};\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\n el.className = classes.join(\" \");\n return add;\n};\nexports.setCssClass = function(node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\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\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function(value) {\n strictCSP = value;\n if (value == false) insertPendingStyles();\n else if (!cssCache) cssCache = [];\n};\n\nfunction insertPendingStyles() {\n var cache = cssCache;\n cssCache = null;\n cache && cache.forEach(function(item) {\n importCssString(item[0], item[1]);\n });\n}\n\nfunction importCssString(cssText, id, target) {\n if (typeof document == \"undefined\")\n return;\n if (cssCache) {\n if (target) {\n insertPendingStyles();\n } else if (target === false) {\n return cssCache.push([cssText, id]);\n }\n }\n if (strictCSP) return;\n\n var container = target;\n if (!target || !target.getRootNode) {\n container = document;\n } else {\n container = target.getRootNode();\n if (!container || container == target)\n container = document;\n }\n \n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container))\n return null;\n \n if (id)\n cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n \n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id)\n style.id = id;\n\n if (container == doc)\n container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\n\nexports.importCssStylsheet = function(uri, doc) {\n exports.buildDom([\"link\", {rel: \"stylesheet\", href: uri}], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function(document) {\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\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n\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\n outer.appendChild(inner);\n\n var body = document.documentElement;\n body.appendChild(outer);\n\n var noScrollbar = inner.offsetWidth;\n\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n\n return noScrollbar-withScrollbar;\n};\n\nexports.computedStyle = function(element, style) {\n return window.getComputedStyle(element, \"\") || {};\n};\n\nexports.setStyle = function(styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\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;\n\nif (useragent.isChromeOS) exports.HI_DPI = false;\n\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}\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} else {\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/oop\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\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};\n\nexports.mixin = function(obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n return obj;\n};\n\nexports.implement = function(proto, mixin) {\n exports.mixin(proto, mixin);\n};\n\n});\n\nace.define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\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\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\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\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 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 ret[173] = '-';\n \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\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n\n return ret;\n})();\noop.mixin(exports, Keys);\n\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) {\n\"use strict\";\n\nvar keys = require(\"./keys\");\nvar useragent = require(\"./useragent\");\n\nvar pressedKeys = null;\nvar ts = 0;\n\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 } catch(e) {}\n}\n\nfunction getListenerOptions() {\n if (activeListenerOptions == undefined)\n detectListenerOptionsSupport();\n return activeListenerOptions;\n}\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};\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};\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};\n\nexports.stopPropagation = function(e) {\n if (e.stopPropagation)\n e.stopPropagation();\n};\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};\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\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n \n return onMouseUp;\n};\n\nexports.addMouseWheelListener = function(el, callback, destroyer) {\n if (\"onmousewheel\" in el) {\n addListener(el, \"mousewheel\", function(e) {\n var factor = 8;\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n } else {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n callback(e);\n }, destroyer);\n } else if (\"onwheel\" in el) {\n addListener(el, \"wheel\", function(e) {\n var factor = 0.35;\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = e.deltaX * factor || 0;\n e.wheelY = e.deltaY * factor || 0;\n break;\n case e.DOM_DELTA_LINE:\n case e.DOM_DELTA_PAGE:\n e.wheelX = (e.deltaX || 0) * 5;\n e.wheelY = (e.deltaY || 0) * 5;\n break;\n }\n \n callback(e);\n }, destroyer);\n } else {\n addListener(el, \"DOMMouseScroll\", function(e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n } else {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n callback(e);\n }, destroyer);\n }\n};\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\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4)\n clicks = 1;\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\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n \n e._clicks = clicks;\n\n eventHandler[callbackName](\"mousedown\", e);\n\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};\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};\n\nexports.getModifierString = function(e) {\n return keys.KEY_MODS[getModifierHash(e)];\n};\n\nfunction normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n hashId |= 8;\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3)\n pressedKeys.altGr = 0;\n else\n return;\n }\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1)\n ts = e.timeStamp;\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 \n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\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 \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 \n return callback(e, hashId, keyCode);\n}\n\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 } else {\n var lastDefaultPrevented = null;\n\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\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\n addListener(el, \"keyup\", function(e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n};\nfunction resetPressedKeys() {\n pressedKeys = Object.create(null);\n}\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 \n var listener = function(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n \n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n}\n\nexports.$idleBlocked = false;\nexports.onIdle = function(cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n } else {\n setTimeout(handler, 100);\n }\n }, timeout);\n};\n\nexports.$idleBlockId = null;\nexports.blockIdle = function(delay) {\n if (exports.$idleBlockId)\n clearTimeout(exports.$idleBlockId);\n \n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function() {\n exports.$idleBlocked = false;\n }, delay || 100);\n};\n\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame\n || window.msRequestAnimationFrame\n || window.oRequestAnimationFrame);\n\nif (exports.nextFrame)\n exports.nextFrame = exports.nextFrame.bind(window);\nelse\n exports.nextFrame = function(callback) {\n setTimeout(callback, 17);\n };\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\nvar comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n\n this.end = {\n row: endRow,\n column: endColumn\n };\n};\n\n(function() {\n this.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 this.toString = function() {\n return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n };\n\n this.contains = function(row, column) {\n return this.compare(row, column) == 0;\n };\n this.compareRange = function(range) {\n var cmp,\n end = range.end,\n start = range.start;\n\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 } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n this.comparePoint = function(p) {\n return this.compare(p.row, p.column);\n };\n this.containsRange = function(range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n this.intersects = function(range) {\n var cmp = this.compareRange(range);\n return (cmp == -1 || cmp == 0 || cmp == 1);\n };\n this.isEnd = function(row, column) {\n return this.end.row == row && this.end.column == column;\n };\n this.isStart = function(row, column) {\n return this.start.row == row && this.start.column == column;\n };\n this.setStart = function(row, column) {\n if (typeof row == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n } else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n this.setEnd = function(row, column) {\n if (typeof row == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n } else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n this.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 } else {\n return true;\n }\n }\n return false;\n };\n this.insideStart = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.insideEnd = function(row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n return false;\n };\n this.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\n if (row < this.start.row)\n return -1;\n\n if (row > this.end.row)\n return 1;\n\n if (this.start.row === row)\n return column >= this.start.column ? 0 : -1;\n\n if (this.end.row === row)\n return column <= this.end.column ? 0 : 1;\n\n return 0;\n };\n this.compareStart = function(row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareEnd = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else {\n return this.compare(row, column);\n }\n };\n this.compareInside = function(row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n this.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\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\n return Range.fromPoints(start || this.start, end || this.end);\n };\n this.extend = function(row, column) {\n var cmp = this.compare(row, column);\n\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\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.isEmpty = function() {\n return (this.start.row === this.end.row && this.start.column === this.end.column);\n };\n this.isMultiLine = function() {\n return (this.start.row !== this.end.row);\n };\n this.clone = function() {\n return Range.fromPoints(this.start, this.end);\n };\n this.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 this.toScreenRange = function(session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n\n return new Range(\n screenPosStart.row, screenPosStart.column,\n screenPosEnd.row, screenPosEnd.column\n );\n };\n this.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\n}).call(Range.prototype);\nRange.fromPoints = function(start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\n\nRange.comparePoints = function(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n};\n\n\nexports.Range = Range;\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.last = function(a) {\n return a[a.length - 1];\n};\n\nexports.stringReverse = function(string) {\n return string.split(\"\").reverse().join(\"\");\n};\n\nexports.stringRepeat = function (string, count) {\n var result = '';\n while (count > 0) {\n if (count & 1)\n result += string;\n\n if (count >>= 1)\n string += string;\n }\n return result;\n};\n\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\n\nexports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n};\n\nexports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n};\n\nexports.copyObject = function(obj) {\n var copy = {};\n for (var key in obj) {\n copy[key] = obj[key];\n }\n return copy;\n};\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};\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 \n copy = {};\n for (var key in obj)\n copy[key] = deepCopy(obj[key]);\n return copy;\n};\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\n};\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};\n\nexports.escapeRegExp = function(str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\n\nexports.escapeHTML = function(str) {\n return (\"\" + str).replace(/&/g, \"&#38;\").replace(/\"/g, \"&#34;\").replace(/'/g, \"&#39;\").replace(/</g, \"&#60;\");\n};\n\nexports.getMatchOffsets = function(string, regExp) {\n var matches = [];\n\n string.replace(regExp, function(str) {\n matches.push({\n offset: arguments[arguments.length-2],\n length: str.length\n });\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\n var deferred = function(timeout) {\n deferred.cancel();\n timer = setTimeout(callback, timeout || 0);\n return deferred;\n };\n\n deferred.schedule = deferred;\n\n deferred.call = function() {\n this.cancel();\n fcn();\n return deferred;\n };\n\n deferred.cancel = function() {\n clearTimeout(timer);\n timer = null;\n return deferred;\n };\n \n deferred.isPending = function() {\n return timer;\n };\n\n return deferred;\n};\n\n\nexports.delayedCall = function(fcn, defaultTimeout) {\n var timer = null;\n var callback = function() {\n timer = null;\n fcn();\n };\n\n var _self = function(timeout) {\n if (timer == null)\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n\n _self.delay = function(timeout) {\n timer && clearTimeout(timer);\n timer = setTimeout(callback, timeout || defaultTimeout);\n };\n _self.schedule = _self;\n\n _self.call = function() {\n this.cancel();\n fcn();\n };\n\n _self.cancel = function() {\n timer && clearTimeout(timer);\n timer = null;\n };\n\n _self.isPending = function() {\n return timer;\n };\n\n return _self;\n};\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\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/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\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;\n\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\n\nvar TextInput = function(parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var sendingText = false;\n var tempStyle = '';\n \n if (!isMobile)\n text.style.fontSize = \"1px\";\n\n var commandMode = false;\n var ignoreFocusEvents = false;\n \n var lastValue = \"\";\n var lastSelectionStart = 0;\n var lastSelectionEnd = 0;\n var lastRestoreEnd = 0;\n try { var isFocused = document.activeElement === text; } catch(e) {}\n \n event.addListener(text, \"blur\", function(e) {\n if (ignoreFocusEvents) return;\n host.onBlur(e);\n isFocused = false;\n }, host);\n event.addListener(text, \"focus\", function(e) {\n if (ignoreFocusEvents) return;\n isFocused = true;\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus())\n return;\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 if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n return text.focus({ preventScroll: true });\n\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 } 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 \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 \n var resetSelection = isIOS\n ? function(value) {\n if (!isFocused || (copied && !value) || sendingText) 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 \n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n\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 \n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n\n if (host.session) {\n var selection = host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n selectionStart = range.start.column;\n selectionEnd = range.end.column;\n line = host.session.getLine(row);\n\n if (range.start.row != row) {\n var prevLine = host.session.getLine(row - 1);\n selectionStart = range.start.row < row - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n }\n else if (range.end.row != row) {\n var nextLine = host.session.getLine(row + 1);\n selectionEnd = range.end.row > row + 1 ? nextLine.length : selectionEnd;\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\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 } 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 }\n\n var newValue = line + \"\\n\\n\";\n if (newValue != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\n }\n if (afterContextMenu) {\n lastSelectionStart = text.selectionStart;\n lastSelectionEnd = text.selectionEnd;\n }\n if (\n 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 } catch(e){}\n }\n inComposition = false;\n };\n this.resetSelection = resetSelection;\n\n if (isFocused)\n host.onFocus();\n\n\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\n var onSelect = function(e) {\n if (inComposition)\n return;\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (isMobile && text.selectionStart != lastSelectionStart) {\n resetSelection();\n }\n };\n\n var inputHandler = null;\n this.setInputHandler = function(cb) {inputHandler = cb;};\n this.getInputHandler = function() {return inputHandler;};\n var afterContextMenu = false;\n \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 } else {\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n \n var extendLeft = lastSelectionStart;\n var extendRight = lastValue.length - lastSelectionEnd;\n \n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n \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 \n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n host.onTextInput(inserted);\n } else {\n host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n sendingText = false;\n \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\") return host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\") return host.execCommand(\"redo\");\n }\n var data = text.value;\n var inserted = sendText(data, true);\n if (\n data.length > MAX_LINE_LENGTH + 100 \n || valueResetRegex.test(inserted)\n || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd\n ) {\n resetSelection();\n }\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 } else {\n return clipboardData.getData(mime);\n }\n } catch(e) {\n if (!forceIEMime)\n return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function(e, isCut) {\n var data = host.getCopyText();\n if (!data)\n return event.preventDefault(e);\n\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 } 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 \n var onCut = function(e) {\n doCopy(e, true);\n };\n \n var onCopy = function(e) {\n doCopy(e, false);\n };\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\n event.addCommandKeyListener(text, host.onCommandKey.bind(host), host);\n\n event.addListener(text, \"select\", onSelect, host);\n event.addListener(text, \"input\", onInput, host);\n\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\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 \n inComposition = {};\n\n if (commandMode)\n return;\n \n if (e.data)\n inComposition.useTextareaForIME = false;\n \n setTimeout(onCompositionUpdate, 0);\n host._signal(\"compositionStart\");\n host.on(\"mousedown\", cancelComposition);\n \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 \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\n var onCompositionUpdate = function() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n return;\n if (commandMode)\n return cancelComposition();\n \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\n var onCompositionEnd = function(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n inComposition = false;\n host.onCompositionEnd();\n host.off(\"mousedown\", cancelComposition);\n if (e) onInput();\n };\n \n\n function cancelComposition() {\n ignoreFocusEvents = true;\n text.blur();\n text.focus();\n ignoreFocusEvents = false;\n }\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n \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\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\n this.getElement = function() {\n return text;\n };\n this.setCommandMode = function(value) {\n commandMode = value;\n text.readOnly = false;\n };\n \n this.setReadOnly = function(readOnly) {\n if (!commandMode)\n text.readOnly = readOnly;\n };\n\n this.setCopyWithEmptySelection = function(value) {\n };\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 \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\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\n if (e.type != \"mousedown\")\n return;\n\n host.renderer.$isMousePressed = true;\n\n clearTimeout(closeTimeout);\n if (useragent.isWin)\n event.capture(host.container, move, onContextMenuClose);\n };\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\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 \n if (isIOS)\n addIosSelectionHandler(parentNode, host, text);\n\n function addIosSelectionHandler(parentNode, host, text) {\n var typingResetTimeout = null;\n var typing = false;\n \n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n\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) return;\n if (typing || inComposition || host.$mouseHandler.isMousePressed) return;\n\n if (copied) {\n return;\n }\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n \n var key = null;\n var modifier = 0;\n if (selectionStart == 0) {\n key = KEYS.up;\n } else if (selectionStart == 1) {\n key = KEYS.home;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n } else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n } else if (\n selectionStart < lastSelectionStart\n || (\n selectionStart == lastSelectionStart \n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd\n )\n ) {\n key = KEYS.left;\n } else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n } else if (\n selectionEnd > lastSelectionEnd\n || (\n selectionEnd == lastSelectionEnd \n && lastSelectionEnd != lastSelectionStart\n && selectionStart == selectionEnd\n )\n ) {\n key = KEYS.right;\n }\n \n if (selectionStart !== selectionEnd)\n modifier |= MODS.shift;\n\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};\n\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function(_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n};\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar useragent = require(\"../lib/useragent\");\n\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\n\nfunction DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n\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\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n\n(function() {\n\n this.onMouseDown = function(ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n\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\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\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n\n this.startSelect = function(pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent) 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 if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n\n this.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\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n } else if (cmp == 1) {\n anchor = this.$clickSelection.start;\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\n this.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\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 } 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 } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\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\n this.selectEnd =\n this.selectAllEnd =\n this.selectByWordsEnd =\n this.selectByLinesEnd = function() {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\n\n this.focusWait = function() {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n\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 } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function(ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n\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 } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n this.select();\n };\n\n this.onQuadClick = function(ev) {\n var editor = this.editor;\n\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.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 \n var editor = this.editor;\n \n if (!this.$lastScroll)\n this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n \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 \n var direction = Math.abs(vx / vy);\n \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 \n if (canScroll) {\n prevScroll.allowed = t;\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 \n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n\n}).call(DefaultHandlers.prototype);\n\nexports.DefaultHandlers = DefaultHandlers;\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\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\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/oop\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nfunction Tooltip (parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n}\n\n(function() {\n this.$init = function() {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n this.getElement = function() {\n return this.$element || this.$init();\n };\n this.setText = function(text) {\n this.getElement().textContent = text;\n };\n this.setHtml = function(html) {\n this.getElement().innerHTML = html;\n };\n this.setPosition = function(x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n this.setClassName = function(className) {\n dom.addCssClass(this.getElement(), className);\n };\n this.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\n this.hide = function() {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n }\n };\n this.getHeight = function() {\n return this.getElement().offsetHeight;\n };\n this.getWidth = function() {\n return this.getElement().offsetWidth;\n };\n \n this.destroy = function() {\n this.isOpen = false;\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n\n}).call(Tooltip.prototype);\n\nexports.Tooltip = Tooltip;\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\n\nfunction GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function(e) {\n if (!editor.isFocused() || e.getButton() != 0)\n return;\n var gutterRegion = gutter.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\")\n return;\n\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n\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\n\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation)\n return hideTooltip();\n\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\n if (tooltipAnnotation == annotation)\n return;\n tooltipAnnotation = annotation.text.join(\"<br/>\");\n\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n } else {\n var gutterElement = mouseEvent.domEvent.target;\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 }\n\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\n editor.off(\"mousewheel\", hideTooltip);\n }\n }\n\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\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\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n\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\n event.addListener(editor.renderer.$gutter, \"mouseout\", function(e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout)\n return;\n\n tooltipTimeout = setTimeout(function() {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n \n editor.on(\"changeSession\", hideTooltip);\n}\n\nfunction GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n}\n\noop.inherits(GutterTooltip, Tooltip);\n\n(function(){\n this.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\n}).call(GutterTooltip.prototype);\n\n\n\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function(domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n \n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n\n this.$pos = null;\n this.$inSelection = null;\n \n this.propagationStopped = false;\n this.defaultPrevented = false;\n};\n\n(function() { \n \n this.stopPropagation = function() {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n \n this.preventDefault = function() {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n \n this.stop = function() {\n this.stopPropagation();\n this.preventDefault();\n };\n this.getDocumentPosition = function() {\n if (this.$pos)\n return this.$pos;\n \n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n this.inSelection = function() {\n if (this.$inSelection !== null)\n return this.$inSelection;\n \n var editor = this.editor;\n \n\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\n return this.$inSelection;\n };\n this.getButton = function() {\n return event.getButton(this.domEvent);\n };\n this.getShiftKey = function() {\n return this.domEvent.shiftKey;\n };\n \n this.getAccelKey = useragent.isMac\n ? function() { return this.domEvent.metaKey; }\n : function() { return this.domEvent.ctrlKey; };\n \n}).call(MouseEvent.prototype);\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) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\n\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\n\nfunction DragdropHandler(mouseHandler) {\n\n var editor = mouseHandler.editor;\n\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\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n\n exports.forEach(function(x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n\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\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\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n\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\n isInternal = true;\n this.setState(\"drag\");\n };\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\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\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\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\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\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 } else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\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\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\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 } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\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 } else {\n autoScrollStartTime = null;\n }\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\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\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\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\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n var dropEffect = \"none\";\n\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\n return dropEffect;\n }\n}\n\n(function() {\n\n this.dragWait = function() {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\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\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\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\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\n this.onMouseDown = function(e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n\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 } else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n\n}).call(DragdropHandler.prototype);\n\n\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\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) {\n\"use strict\";\n\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\n\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 \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(\n 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\" }, \"Pallete\"]\n ] : [\"span\"]),\n contextMenu.firstChild\n );\n };\n var handleClick = function(e) {\n var action = e.target.getAttribute(\"action\");\n\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) 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 } 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\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 } else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function(e) {\n if (!pressed) 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 \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 \n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n \n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n } else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n \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 \n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n \n var diff1 = weightedDistance(\n e.clientX - rect.left - cursorPos.left + offsetLeft,\n e.clientY - rect.top - cursorPos.top + offsetTop\n );\n var diff2 = weightedDistance(\n e.clientX - rect.left - anchorPos.left + offsetLeft,\n e.clientY - rect.top - anchorPos.top + offsetTop\n );\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n \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\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer) clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n } else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n } else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\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\") return;\n\n var touchObj = touches[0];\n\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n\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)) wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX)) 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\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) vX = 0;\n if (Math.abs(vY) < 0.01) vY = 0;\n if (animationSteps < 20) vX = 0.9 * vX;\n if (animationSteps < 20) 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/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"./dom\");\n\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};\n\nexports.loadScript = function(path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n\n s.src = path;\n head.appendChild(s);\n\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/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar EventEmitter = {};\nvar stopPropagation = function() { this.propagationStopped = true; };\nvar preventDefault = function() { this.defaultPrevented = true; };\n\nEventEmitter._emit =\nEventEmitter._dispatchEvent = function(eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler)\n return;\n\n if (typeof e != \"object\" || !e)\n e = {};\n\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\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 \n if (defaultHandler && !e.defaultPrevented)\n return defaultHandler(e, this);\n};\n\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};\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};\n\n\nEventEmitter.setDefaultHandler = function(eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers)\n handlers = this._defaultHandlers = {_disabled_: {}};\n \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 \n if (handlers[eventName] == callback) {\n if (disabled)\n this.setDefaultHandler(eventName, disabled.pop());\n } else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1)\n disabled.splice(i, 1);\n }\n};\n\nEventEmitter.on =\nEventEmitter.addEventListener = function(eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n listeners = this._eventRegistry[eventName] = [];\n\n if (listeners.indexOf(callback) == -1)\n listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n};\n\nEventEmitter.off =\nEventEmitter.removeListener =\nEventEmitter.removeEventListener = function(eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n\n var listeners = this._eventRegistry[eventName];\n if (!listeners)\n return;\n\n var index = listeners.indexOf(callback);\n if (index !== -1)\n listeners.splice(index, 1);\n};\n\nEventEmitter.removeAllListeners = function(eventName) {\n if (!eventName) this._eventRegistry = this._defaultHandlers = undefined;\n if (this._eventRegistry) this._eventRegistry[eventName] = undefined;\n if (this._defaultHandlers) this._defaultHandlers[eventName] = undefined;\n};\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) {\n\"no use strict\";\n\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\n\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 } 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\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};\n\nfunction warn(message) {\n if (typeof console != \"undefined\" && console.warn)\n console.warn.apply(console, arguments);\n}\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}\n\nvar AppConfig = function() {\n this.$defaultOptions = {};\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n this.defineOptions = function(obj, path, options) {\n if (!obj.$options)\n this.$defaultOptions[path] = obj.$options = {};\n\n Object.keys(options).forEach(function(key) {\n var opt = options[key];\n if (typeof opt == \"string\")\n opt = {forwardTo: opt};\n\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\n return this;\n };\n\n this.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\n this.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\n this.setDefaultValues = function(path, optionHash) {\n Object.keys(optionHash).forEach(function(key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n \n this.warn = warn;\n this.reportError = reportError;\n \n}).call(AppConfig.prototype);\n\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\"], function(require, exports, module) {\n\"no use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\n\nmodule.exports = exports = new AppConfig();\n\nvar global = (function() {\n return this || typeof window != \"undefined\" && window;\n})();\n\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};\n\nexports.get = function(key) {\n if (!options.hasOwnProperty(key))\n throw new Error(\"Unknown config key: \" + key);\n return options[key];\n};\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};\n\nexports.all = function() {\n return lang.copyObject(options);\n};\n\nexports.$modes = {};\nexports.moduleUrl = function(name, component) {\n if (options.$moduleUrls[name])\n return options.$moduleUrls[name];\n\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\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 } 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};\n\nexports.setModuleUrl = function(name, subst) {\n return options.$moduleUrls[name] = subst;\n};\n\nexports.$loading = {};\nexports.loadModule = function(moduleName, onLoad) {\n var module, moduleType;\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = require(moduleName);\n } catch (e) {}\n if (module && !exports.$loading[moduleName])\n return onLoad && onLoad(module);\n\n if (!exports.$loading[moduleName])\n exports.$loading[moduleName] = [];\n\n exports.$loading[moduleName].push(onLoad);\n\n if (exports.$loading[moduleName].length > 1)\n return;\n\n var afterLoad = function() {\n require([moduleName], function(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\n if (!exports.get(\"packaged\"))\n return afterLoad();\n \n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n reportErrorIfPathIsNotConfigured();\n};\n\nvar reportErrorIfPathIsNotConfigured = function() {\n if (\n !options.basePath && !options.workerPath \n && !options.modePath && !options.themePath\n && !Object.keys(options.$moduleUrls).length\n ) {\n console.error(\n \"Unable to infer path to ace from script src,\",\n \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\",\n \"or with webpack use ace/webpack-resolver\"\n );\n reportErrorIfPathIsNotConfigured = function() {};\n }\n};\ninit(true);function init(packaged) {\n\n if (!global || !global.document)\n return;\n \n options.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 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 exports.set(key, scriptOptions[key]);\n}\n\nexports.init = init;\n\nfunction deHyphenate(str) {\n return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });\n}\n\nexports.version = \"1.4.14\";\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) {\n\"use strict\";\n\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\");\n\nvar MouseHandler = function(editor) {\n var _self = this;\n this.editor = editor;\n\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n\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 };\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\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\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\n editor.on(\"mousemove\", function(e){\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n } else {\n renderer.setCursorStyle(\"\");\n }\n }, editor);\n};\n\n(function() {\n this.onMouseEvent = function(name, e) {\n if (!this.editor.session) return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseMove = function(name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.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\n this.editor._emit(name, mouseEvent);\n };\n \n this.setState = function(state) {\n this.state = state;\n };\n\n this.captureMouse = function(ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n\n var self = this;\n var onMouseMove = function(e) {\n if (!e) return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n\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\n var onCaptureEnd = function(e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n clearInterval(timerId);\n if (editor.session) 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\n var onCaptureInterval = function() {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function() {onCaptureEnd(ev);});\n }\n\n var onOperationEnd = function(e) {\n if (!self.releaseMouse) 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\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({command: {name: \"mouse\"}});\n\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n this.releaseMouse = null;\n this.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 this.destroy = function() {\n if (this.releaseMouse) this.releaseMouse();\n };\n}).call(MouseHandler.prototype);\n\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});\n\n\nexports.MouseHandler = MouseHandler;\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\nvar dom = require(\"../lib/dom\");\n\nfunction FoldHandler(editor) {\n\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\n e.stop();\n }\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\n editor.on(\"gutterclick\", function(e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\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\n editor.on(\"gutterdblclick\", function(e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\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\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n if (fold) {\n session.removeFold(fold);\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\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\n\nvar KeyBinding = function(editor) {\n this.$editor = editor;\n this.$data = {editor: editor};\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n};\n\n(function() {\n this.setDefaultHandler = function(kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n\n this.setKeyboardHandler = function(kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n\n this.addKeyboardHandler(kb, 1);\n };\n\n this.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\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n\n this.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\n this.getKeyboardHandler = function() {\n return this.$handlers[this.$handlers.length - 1];\n };\n \n this.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\n this.$callKeyboardHandlers = function(hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(\n this.$data, hashId, keyString, keyCode, e\n );\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\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 ) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n \n if (!success && hashId == -1) {\n toExecute = {command: \"insertstring\"};\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n \n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n \n return success;\n };\n\n this.onCommandKey = function(e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n\n this.onTextInput = function(text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n\n}).call(KeyBinding.prototype);\n\nexports.KeyBinding = KeyBinding;\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\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;\n\nvar impTab_LTR = [\t[\t0,\t\t3,\t\t0,\t\t1,\t\t0,\t\t0,\t\t0\t],\t[\t0,\t\t3,\t\t0,\t\t1,\t\t2,\t\t2,\t\t0\t],\t[\t0,\t\t3,\t\t0,\t\t0x11,\t\t2,\t\t0,\t\t1\t],\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t1,\t\t0\t],\t[\t0,\t\t3,\t\t0x15,\t\t0x15,\t\t4,\t\t0,\t\t1\t],\t[\t0,\t\t3,\t\t5,\t\t5,\t\t4,\t\t2,\t\t0\t]\n];\n\nvar impTab_RTL = [\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t1,\t\t0\t],\t[\t2,\t\t0,\t\t1,\t\t1,\t\t0,\t\t2,\t\t0\t],\t[\t2,\t\t0,\t\t2,\t\t1,\t\t3,\t\t2,\t\t0\t],\t[\t2,\t\t0,\t\t2,\t\t0x21,\t\t3,\t\t1,\t\t1\t]\n];\n\nvar LTR = 0, RTL = 1;\n\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;\n\nvar UnicodeTBL00 = [\nBN,BN,BN,BN,BN,BN,BN,BN,BN,S,B,S,WS,B,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,B,B,B,S,\nWS,ON,ON,ET,ET,ET,ON,ON,ON,ON,ON,ES,CS,ES,CS,CS,\nEN,EN,EN,EN,EN,EN,EN,EN,EN,EN,CS,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,ON,\nON,L,L,L,L,L,L,L,L,L,L,L,L,L,L,L,\nL,L,L,L,L,L,L,L,L,L,L,ON,ON,ON,ON,BN,\nBN,BN,BN,BN,BN,B,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nBN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,BN,\nCS,ON,ET,ET,ET,ET,ON,ON,ON,ON,L,ON,ON,BN,ON,ON,\nET,ET,EN,EN,ON,L,ON,ON,ON,EN,L,ON,ON,ON,ON,ON\n];\n\nvar UnicodeTBL20 = [\nWS,WS,WS,WS,WS,WS,WS,WS,WS,WS,WS,BN,BN,BN,L,R\t,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,WS,B,LRE,RLE,PDF,LRO,RLO,CS,\nET,ET,ET,ET,ET,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,CS,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,\nON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,ON,WS\n];\n\nfunction _computeLevels(chars, levels, len, charTypes) {\n\tvar impTab = dir ? impTab_RTL : impTab_LTR\n\t\t, prevState = null, newClass = null, newLevel = null, newState = 0\n\t\t, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n\n\tif (!charTypes) {\n\t\tfor (i = 0, charTypes = []; i < len; i++) {\n\t\t\tcharTypes[i] = _getCharacterType(chars[i]);\n\t\t}\n\t}\n\thiLevel = dir;\n\tlastArabic = false;\n\thasUBAT_AL = false;\n\thasUBAT_B = false;\n\thasUBAT_S = false;\n\tfor (ix = 0; ix < len; ix++){\n\t\tprevState = newState;\n\t\tclasses[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n\t\tnewState = impTab[prevState][newClass];\n\t\taction = newState & 0xF0;\n\t\tnewState &= 0x0F;\n\t\tlevels[ix] = newLevel = impTab[newState][5];\n\t\tif (action > 0){\n\t\t\tif (action == 0x10){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = 1;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t} else {\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tcond = impTab[newState][6];\n\t\tif (cond){\n\t\t\tif(condPos == -1){\n\t\t\t\tcondPos = ix;\n\t\t\t}\n\t\t}else{\n\t\t\tif (condPos > -1){\n\t\t\t\tfor(i = condPos; i < ix; i++){\n\t\t\t\t\tlevels[i] = newLevel;\n\t\t\t\t}\n\t\t\t\tcondPos = -1;\n\t\t\t}\n\t\t}\n\t\tif (charTypes[ix] == B){\n\t\t\tlevels[ix] = 0;\n\t\t}\n\t\thiLevel |= newLevel;\n\t}\n\tif (hasUBAT_S){\n\t\tfor(i = 0; i < len; i++){\n\t\t\tif(charTypes[i] == S){\n\t\t\t\tlevels[i] = dir;\n\t\t\t\tfor(var j = i - 1; j >= 0; j--){\n\t\t\t\t\tif(charTypes[j] == WS){\n\t\t\t\t\t\tlevels[j] = dir;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction _invertLevel(lev, levels, _array) {\n\tif (hiLevel < lev){\n\t\treturn;\n\t}\n\tif (lev == 1 && dir == RTL && !hasUBAT_B){\n\t\t_array.reverse();\n\t\treturn;\n\t}\n\tvar len = _array.length, start = 0, end, lo, hi, tmp;\n\twhile(start < len){\n\t\tif (levels[start] >= lev){\n\t\t\tend = start + 1;\n\t\twhile(end < len && levels[end] >= lev){\n\t\t\tend++;\n\t\t}\n\t\tfor(lo = start, hi = end - 1 ; lo < hi; lo++, hi--){\n\t\t\ttmp = _array[lo];\n\t\t\t_array[lo] = _array[hi];\n\t\t\t_array[hi] = tmp;\n\t\t}\n\t\tstart = end;\n\t}\n\tstart++;\n\t}\n}\n\nfunction _getCharClass(chars, types, classes, ix) {\t\t\t\n\tvar cType = types[ix], wType, nType, len, i;\n\tswitch(cType){\n\t\tcase L:\n\t\tcase R:\n\t\t\tlastArabic = false;\n\t\tcase ON:\n\t\tcase AN:\n\t\t\treturn cType;\n\t\tcase EN:\n\t\t\treturn lastArabic ? AN : EN;\n\t\tcase AL:\n\t\t\tlastArabic = true;\n\t\t\thasUBAT_AL = true;\n\t\t\treturn R;\n\t\tcase WS:\n\t\t\treturn ON;\n\t\tcase CS:\n\t\t\tif (ix < 1 || (ix + 1) >= types.length ||\n\t\t\t\t((wType = classes[ix - 1]) != EN && wType != AN) ||\n\t\t\t\t((nType = types[ix + 1]) != EN && nType != AN)){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\tif (lastArabic){nType = AN;}\n\t\t\treturn nType == wType ? nType : ON;\n\t\tcase ES:\n\t\t\twType = ix > 0 ? classes[ix - 1] : B;\n\t\t\tif (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase ET:\n\t\t\tif (ix > 0 && classes[ix - 1] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\tif (lastArabic){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\ti = ix + 1;\n\t\t\tlen = types.length;\n\t\t\twhile (i < len && types[i] == ET){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len && types[i] == EN){\n\t\t\t\treturn EN;\n\t\t\t}\n\t\t\treturn ON;\n\t\tcase NSM:\n\t\t\tlen = types.length;\n\t\t\ti = ix + 1;\n\t\t\twhile (i < len && types[i] == NSM){\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < len){\n\t\t\t\tvar c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n\t\t\t\t\n\t\t\t\twType = types[i];\n\t\t\t\tif (rtlCandidate && (wType == R || wType == AL)){\n\t\t\t\t\treturn R;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ix < 1 || (wType = types[ix - 1]) == B){\n\t\t\t\treturn ON;\n\t\t\t}\n\t\t\treturn classes[ix - 1];\n\t\tcase B:\n\t\t\tlastArabic = false;\n\t\t\thasUBAT_B = true;\n\t\t\treturn dir;\n\t\tcase S:\n\t\t\thasUBAT_S = true;\n\t\t\treturn ON;\n\t\tcase LRE:\n\t\tcase RLE:\n\t\tcase LRO:\n\t\tcase RLO:\n\t\tcase PDF:\n\t\t\tlastArabic = false;\n\t\tcase BN:\n\t\t\treturn ON;\n\t}\n}\n\nfunction _getCharacterType( ch ) {\t\t\n\tvar uc = ch.charCodeAt(0), hi = uc >> 8;\n\t\n\tif (hi == 0) {\t\t\n\t\treturn ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n\t} else if (hi == 5) {\n\t\treturn (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n\t} else if (hi == 6) {\n\t\tif (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n\t\t\treturn NSM;\n\t\telse if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n\t\t\treturn AN;\n\t\telse if (uc == 0x066A)\n\t\t\treturn ET;\n\t\telse if (/[\\u06f0-\\u06f9]/.test(ch))\n\t\t\treturn EN;\t\t\t\n\t\telse\n\t\t\treturn AL;\n\t} else if (hi == 0x20 && uc <= 0x205F) {\n\t\treturn UnicodeTBL20[uc & 0xFF];\n\t} else if (hi == 0xFE) {\n\t\treturn (uc >= 0xFE70 ? AL : ON);\n\t}\t\t\n\treturn ON;\t\n}\n\nfunction _isArabicDiacritics( ch ) {\n\treturn (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;\n\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function(text, textCharTypes, isRtl) {\n\tif (text.length < 2)\n\t\treturn {};\n\t\t\n\tvar chars = text.split(\"\"), logicalFromVisual = new Array(chars.length),\n\t\tbidiLevels = new Array(chars.length), levels = []; \n\n\tdir = isRtl ? RTL : LTR;\n\n\t_computeLevels(chars, levels, chars.length, textCharTypes);\n\n\tfor (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++);\n\n\t_invertLevel(2, levels, logicalFromVisual);\n\t_invertLevel(1, levels, logicalFromVisual);\n\n\tfor (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n\t\tif (textCharTypes[i] === AN) {\n\t\t\tlevels[i] = exports.AN;\n\t\t} else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE) \n\t\t\t|| textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n\t\t\tlevels[i] = exports.ON_R;\n\t\t} else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n\t\t\tlevels[i - 1] = levels[i] = exports.R_H;\n\t\t\ti++;\n\t\t}\n\t}\n\tif (chars[chars.length - 1] === exports.DOT)\n\t\tlevels[chars.length - 1] = exports.B;\n\t\t\t\t\n\tif (chars[0] === '\\u202B')\n\t\tlevels[0] = exports.RLE;\n\t\t\t\t\n\tfor (var i = 0; i < logicalFromVisual.length; i++) {\n\t\tbidiLevels[i] = levels[logicalFromVisual[i]];\n\t}\n\n\treturn {'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels};\n};\nexports.hasBidiCharacters = function(text, textCharTypes){\n\tvar ret = false;\n\tfor (var i = 0; i < text.length; i++){\n\t\ttextCharTypes[i] = _getCharacterType(text.charAt(i));\n\t\tif (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n\t\t\tret = true;\n\t}\n\treturn ret;\n};\t\nexports.getVisualFromLogicalIdx = function(logIdx, rowMap) {\n\tfor (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n\t\tif (rowMap.logicalFromVisual[i] == logIdx)\n\t\t\treturn i;\n\t}\n\treturn 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = function(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\n(function() {\n this.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\n this.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\n this.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\n return docRow;\n };\n\n this.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\n prevIndex = currentIndex;\n splitIndex++;\n }\n } else {\n splitIndex = this.currentRow;\n }\n\n return splitIndex;\n };\n\n this.updateRowLine = function(docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n \n var isLastRow = (docRow === this.session.getLength() - 1),\n endOfLine = isLastRow ? this.EOF : this.EOL;\n\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\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 } else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n }\n if (splitIndex == splits.length)\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\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\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 \n this.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 } else {\n this.bidiMap = {};\n }\n };\n this.markAsDirty = function() {\n this.currentRow = null;\n };\n this.updateCharacterWidths = function(fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n\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\n this.currentRow = null;\n };\n\n this.setShowInvisibles = function(showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n\n this.setEolChar = function(eolChar) {\n this.EOL = eolChar; \n };\n\n this.setContentWidth = function(width) {\n this.contentWidth = width;\n };\n\n this.isRtlLine = function(row) {\n if (this.$isRtl) return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir; \n };\n\n this.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 this.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),\n levels = this.bidiMap.bidiLevels, left = 0;\n\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n \n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n\n return left;\n };\n this.getSelections = function(startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0,\n selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false, isSelectedPrev = false, selectionStart = 0;\n \n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n\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 } else if (!isSelected && isSelectedPrev) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n\n if (isSelected && (visIdx === levels.length)) {\n selections.push({left: selectionStart, width: offset - selectionStart});\n }\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 this.offsetToCol = function(posX) {\n if(this.isRtlDir)\n posX -= this.rtlLineOffset;\n\n var logicalIdx = 0, posX = Math.max(posX, 0),\n offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n \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 \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 } else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n\n return (logicalIdx + this.wrapIndent);\n };\n\n}).call(BidiHandler.prototype);\n\nexports.BidiHandler = BidiHandler;\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) {\n\"use strict\";\n\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\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\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\n this.anchor.on(\"change\", function() {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.isEmpty = function() {\n return this.$isEmpty || (\n this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column\n );\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.setSelectionAnchor = function(row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n this.getAnchor = \n this.getSelectionAnchor = function() {\n if (this.$isEmpty)\n return this.getSelectionLead();\n \n return this.anchor.getPosition();\n };\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\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n\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\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\n this.$moveSelection = function(mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n\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\n this.getLineRange = function(row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\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\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(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\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 } else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n this.moveCursorRight = function() {\n var cursor = this.lead.getPosition(),\n 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 } 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(\n row, null, firstColumnPosition.row,\n firstColumnPosition.column\n );\n\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\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\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\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\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\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\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function(rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index ++;\n\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 } 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\n return index;\n };\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\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n\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\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function() {\n var row = this.lead.row;\n var column = this.lead.column;\n\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n\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\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function() {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\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(\n this.lead.row,\n this.lead.column\n );\n\n var offsetX;\n\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 } else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\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 \n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n \n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n \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\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\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\n this.fromOrientedRange = function(range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\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 } else {\n range = r;\n }\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 } catch(e) {\n return Range.fromPoints(start, start);\n } finally {\n this.moveCursorToPosition(start);\n }\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 } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\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 } else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\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\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\n}).call(Selection.prototype);\n\nexports.Selection = Selection;\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar config = require(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function(rules) {\n this.states = rules;\n\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\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)\n flag = \"gi\";\n if (rule.regex == null)\n continue;\n\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 } 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 } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\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\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 } 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\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n \n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n \n splitterRurles.forEach(function(rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n};\n\n(function() {\n this.$setMaxTokenCount = function(m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n \n this.$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\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\n this.$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\n this.removeCapturingGroups = function(src) {\n var r = src.replace(\n /\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g,\n function(x, y) {return y ? \"(?:\" : x;}\n );\n return r;\n };\n\n this.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(\n m, esc, parenOpen, parenClose, square, index\n ) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index+1;\n lastCapture.stack = -1;\n }\n stack--;\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\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) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n \n return new RegExp(src, (flag||\"\").replace(\"g\", \"\"));\n };\n this.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 } else\n var stack = [];\n\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\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n\n var token = {type: null, value: \"\"};\n\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\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 } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: skipped};\n }\n }\n\n for (var i = 0; i < match.length-2; i++) {\n if (match[i + 1] === undefined)\n continue;\n\n rule = state[mapping[i]];\n\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\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\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type)\n tokens.push(token);\n token = {type: type, value: value};\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\n if (lastIndex == line.length)\n break;\n\n lastIndex = index;\n\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\n if (token.type)\n tokens.push(token);\n \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 \n this.reportError = config.reportError;\n \n}).call(Tokenizer.prototype);\n\nexports.Tokenizer = Tokenizer;\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\n\nvar TextHighlightRules = function() {\n\n this.$rules = {\n \"start\" : [{\n token : \"empty_line\",\n regex : '^$'\n }, {\n defaultToken : \"text\"\n }]\n };\n};\n\n(function() {\n\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\n this.getRules = function() {\n return this.$rules;\n };\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 } else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n\n this.addRules(embedRules, prefix);\n\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\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function() {\n return this.$embeds;\n };\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\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 } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\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 } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (Array.isArray(includeName))\n toInsert = includeName.map(function(x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\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 \n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(\n rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive\n );\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\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\n this.getKeywords = function() {\n return this.$keywords;\n };\n\n}).call(TextHighlightRules.prototype);\n\nexports.TextHighlightRules = TextHighlightRules;\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nvar Behaviour = function() {\n this.$behaviours = {};\n};\n\n(function () {\n\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 \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 \n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n \n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n \n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\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\n}).call(Behaviour.prototype);\n\nexports.Behaviour = Behaviour;\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar TokenIterator = function(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n};\n\n(function() { \n this.stepBackward = function() {\n this.$tokenIndex -= 1;\n \n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n \n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.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\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n \n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n }; \n this.getCurrentTokenRow = function () {\n return this.$row;\n }; \n this.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 \n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n \n return column; \n };\n this.getCurrentTokenPosition = function() {\n return {row: this.$row, column: this.getCurrentTokenColumn()};\n };\n this.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 \n}).call(TokenIterator.prototype);\n\nexports.TokenIterator = TokenIterator;\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) {\n\"use strict\";\n\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\n\nvar SAFE_INSERT_IN_TOKENS =\n [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS =\n [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\n\nvar context;\nvar contextCache = {};\nvar defaultQuotes = {'\"' : '\"', \"'\" : \"'\"};\n\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};\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};\n\nvar CstyleBehaviour = function(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 } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\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 } 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 } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\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 } else {\n context.maybeInsertedBrackets--;\n }\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 } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\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\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\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 } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\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\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\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 } 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 \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 \n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n \n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\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(leftChar);\n if (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\n this.add(\"string_dquotes\", \"deletion\", function(state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n\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\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};\n\nCstyleBehaviour.$matchTokenType = function(token, types) {\n return types.indexOf(token.type || token) > -1;\n};\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};\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};\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};\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};\n\nCstyleBehaviour.popAutoInsertedClosing = function() {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\n\nCstyleBehaviour.clearMaybeInsertedClosing = function() {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\n\n\n\noop.inherits(CstyleBehaviour, Behaviour);\n\nexports.CstyleBehaviour = CstyleBehaviour;\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"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];\n\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}\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) {\n\"use strict\";\nvar config = require(\"../config\");\n\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;\n\nvar Mode = function() {\n this.HighlightRules = TextHighlightRules;\n};\n\n(function() {\n this.$defaultBehaviour = new CstyleBehaviour();\n\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n\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\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function(state, session, startRow, endRow) {\n var doc = session.doc;\n\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\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\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\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\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 } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n \n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function(line, i) {\n var m = line.match(regexpStart);\n if (!m) 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 \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\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n\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 } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n\n iter(shouldRemove ? uncomment : comment);\n };\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\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\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\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 } 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\n this.getNextLineIndent = function(state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function(state, line, input) {\n return false;\n };\n\n this.autoOutdent = function(state, doc, row) {\n };\n\n this.$getIndent = function(line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function(session) {\n return null;\n };\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\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\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\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 \n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n\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\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 \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 \n this.$createKeywordList = function() {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\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\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nfunction throwDeltaError(delta, errorText){\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\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}\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}\n\nexports.applyDelta = function(docLines, delta, doNotValidate) {\n \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 } 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 } else {\n docLines.splice(\n row, endRow - row + 1,\n line.substring(0, startColumn) + docLines[endRow].substring(endColumn)\n );\n }\n break;\n }\n};\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar Anchor = exports.Anchor = function(doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n \n if (typeof column == \"undefined\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.getPosition = function() {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n this.getDocument = function() {\n return this.document;\n };\n this.$insertRight = false;\n this.onChange = function(delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n\n if (delta.start.row > this.row)\n return;\n \n var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n \n function $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 }\n \n function $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 \n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n this.setPosition = function(row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column)\n return;\n\n var old = {\n row: this.row,\n column: this.column\n };\n\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n this.detach = function() {\n this.document.off(\"change\", this.$onChange);\n };\n this.attach = function(doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n this.$clipPositionToDocument = function(row, column) {\n var pos = {};\n\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\n if (column < 0)\n pos.column = 0;\n\n return pos;\n };\n\n}).call(Anchor.prototype);\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) {\n\"use strict\";\n\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;\n\nvar Document = function(textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({row: 0, column: 0}, textOrLines);\n } else {\n this.insert({row: 0, column:0}, textOrLines);\n }\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.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 this.getValue = function() {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n this.createAnchor = function(row, column) {\n return new Anchor(this, row, column);\n };\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function(text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function(text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n\n this.$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 this.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\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n this.setNewLineMode = function(newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineMode = function() {\n return this.$newLineMode;\n };\n this.isNewLine = function(text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n this.getLine = function(row) {\n return this.$lines[row] || \"\";\n };\n this.getLines = function(firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n this.getAllLines = function() {\n return this.getLines(0, this.getLength());\n };\n this.getLength = function() {\n return this.$lines.length;\n };\n this.getTextRange = function(range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n this.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 } 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 this.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 this.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 this.insertNewLine = function(position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n this.insert = function(position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n \n return this.insertMergedLines(position, this.$split(text));\n };\n this.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 \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n \n return this.clonePos(end);\n };\n \n this.clippedPos = function(row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\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 \n this.clonePos = function(pos) {\n return {row: pos.row, column: pos.column};\n };\n \n this.pos = function(row, column) {\n return {row: row, column: column};\n };\n \n this.$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 } 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 this.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 } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({row: row, column: column}, lines);\n }; \n this.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 \n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n \n return this.clonePos(end);\n };\n this.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 this.removeInLine = function(row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n \n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({start: start, end: end})\n }, true);\n \n return this.clonePos(start);\n };\n this.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 \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 this.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 this.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\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 \n return end;\n };\n this.applyDeltas = function(deltas) {\n for (var i=0; i<deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n this.revertDeltas = function(deltas) {\n for (var i=deltas.length-1; i>=0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n this.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 \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 \n this.$safeApplyDelta = function(delta) {\n var docLength = this.$lines.length;\n if (\n delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength\n ) {\n this.applyDelta(delta);\n }\n };\n \n this.$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 this.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 this.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 this.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\n return index + pos.column;\n };\n\n}).call(Document.prototype);\n\nexports.Document = Document;\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\nvar BackgroundTokenizer = function(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n\n var self = this;\n\n this.$worker = function() {\n if (!self.running) { return; }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n \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 \n if (endLine == -1)\n endLine = currentLine;\n \n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n this.setTokenizer = function(tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n\n this.start(0);\n };\n this.setDocument = function(doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n\n this.stop();\n };\n this.fireUpdateEvent = function(firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", {data: data});\n };\n this.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\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n \n this.scheduleStart = function() {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n\n this.$updateOnChange = function(delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\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\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n\n this.stop();\n };\n this.stop = function() {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n this.getTokens = function(row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n this.getState = function(row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function(row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n\n var data = this.tokenizer.getLineTokens(line, state, row);\n\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 } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n\n}).call(BackgroundTokenizer.prototype);\n\nexports.BackgroundTokenizer = BackgroundTokenizer;\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar SearchHighlight = function(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n};\n\n(function() {\n this.MAX_RANGES = 500;\n \n this.setRegexp = function(regExp) {\n if (this.regExp+\"\" == regExp+\"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function(html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n\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\n for (var j = ranges.length; j --; ) {\n markerLayer.drawSingleLineMarker(\n html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n\n}).call(SearchHighlight.prototype);\n\nexports.SearchHighlight = SearchHighlight;\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [ folds ];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column,\n last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n\n this.folds.forEach(function(fold) {\n fold.setFoldLine(this);\n }, this);\n}\n\n(function() {\n this.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\n this.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 } 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 } 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 } 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 } 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\n this.containsRow = function(row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function(callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp, stop, isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\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\n this.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 } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n\n this.addRemoveChars = function(row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n 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 {\n window.console && window.console.log(row, column, fold);\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\n this.split = function(row, column) {\n var pos = this.getNextFoldTo(row, column);\n \n if (!pos || pos.kind == \"inside\")\n return null;\n \n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n \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\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.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\n this.toString = function() {\n var ret = [this.range.toString() + \": [\" ];\n\n this.folds.forEach(function(fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function(idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n\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\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n}).call(FoldLine.prototype);\n\nexports.FoldLine = FoldLine;\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\n\nvar RangeList = function() {\n this.ranges = [];\n this.$bias = 1;\n};\n\n(function() {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function(pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\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\n return -i-1;\n }\n return -i - 1;\n };\n\n this.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\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.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\n this.substractPoint = function(pos) {\n var i = this.pointIndex(pos);\n\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n this.merge = function() {\n var removed = [];\n var list = this.ranges;\n \n list = list.sort(function(a, b) {\n return comparePoints(a.start, b.start);\n });\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\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n \n this.ranges = list;\n\n return removed;\n };\n\n this.contains = function(row, column) {\n return this.pointIndex({row: row, column: column}) >= 0;\n };\n\n this.containsPoint = function(pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function(pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n\n\n this.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\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\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n\n this.removeAll = function() {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function(session) {\n if (this.session)\n this.detach();\n\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n\n this.session.on('change', this.onChange);\n };\n\n this.detach = function() {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$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 \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 \n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\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 } else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n \n if (r.start.row > endRow)\n break;\n \n if (r.end.row < endRow\n && (\n startRow < r.end.row \n || startRow == r.end.row && start.column < r.end.column\n )\n ) {\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 \n if (r.start.row < endRow\n && (\n startRow < r.start.row \n || startRow == r.start.row && start.column < r.start.column\n )\n ) {\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\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\n}).call(RangeList.prototype);\n\nexports.RangeList = RangeList;\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/lib/oop\"], function(require, exports, module) {\n\"use strict\";\n\nvar RangeList = require(\"../range_list\").RangeList;\nvar oop = require(\"../lib/oop\");\nvar Fold = exports.Fold = function(range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n};\n\noop.inherits(Fold, RangeList);\n\n(function() {\n\n this.toString = function() {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function(foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function(fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.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\n this.addSubFold = function(fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n\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\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) 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\n return fold;\n };\n \n this.restoreRange = function(range) {\n return restoreRange(range, this.start);\n };\n\n}).call(Fold.prototype);\n\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}\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\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\n\nfunction Folding() {\n this.getFoldAt = function(row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n\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 } 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\n start.column += 1;\n end.column -= 1;\n\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\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 } else if (cmp == 2) {\n continue;\n } else\n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n\n return foundFolds;\n };\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 } 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 \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\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\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\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\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 } 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\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],\n end = foldLine.end.row,\n 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 } 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\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 \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\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\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\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n \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\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 } 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 } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n\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\n return fold;\n };\n\n this.addFolds = function(folds) {\n folds.forEach(function(fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function(fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\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 } 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 } else\n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\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\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\n this.removeFolds = function(folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function(fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\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\n this.expandFolds = function(folds) {\n folds.forEach(function(fold) {\n this.expandFold(fold);\n }, this);\n };\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) expandInner = true;\n } else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n } else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\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 } else {\n range = location;\n }\n \n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (\n folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0 \n && Range.comparePoints(folds[0].end, range.end) > 0\n ) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n \n if (expandInner != false) {\n this.removeFolds(folds);\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\n this.getRowFoldEnd = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function(docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\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\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\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function(row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(\n foldLine, row, endColumn, startRow, startColumn);\n }\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\n return fd;\n };\n\n this.toggleFold = function(tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\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\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1 ) {\n fold = folds[0];\n }\n }\n\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\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\n this.addFold(placeholder, range);\n };\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\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n iterator.stepForward();\n }\n \n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n\n iterator = new TokenIterator(this, row, column);\n \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 } else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n token = iterator.stepBackward();\n } else\n token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\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 \n if (test && !test(row)) continue;\n\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow\n ) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n \n this.foldToLevel = function(level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\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 \n if (this.$foldStyle == style)\n return;\n\n this.$foldStyle = style;\n \n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function(foldMode) {\n if (this.$foldMode == foldMode)\n return;\n \n this.$foldMode = foldMode;\n \n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n \n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\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 \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\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n\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\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\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function(row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\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 \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\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\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 \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 } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) \n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n \n return range;\n };\n \n \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 \n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n \n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function(delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\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}\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) {\n\"use strict\";\n\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\n\n\nfunction BracketMatch() {\n\n this.findMatchingBracket = function(position, chr) {\n if (position.column == 0) return null;\n\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1);\n if (charBeforeCursor == \"\") return null;\n\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n \n this.getBracketRange = function(pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n\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\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 } 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 \n return range;\n };\n this.getMatchingBracketRanges = function(pos) {\n var line = this.getLine(pos.row);\n\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 }\n\n if (!match)\n return null;\n\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\n return [startRange, endRange];\n };\n\n this.$brackets = {\n \")\": \"(\",\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\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 \n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n \n while (true) {\n \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\n if (token == null)\n break;\n \n value = token.value;\n valueIndex = value.length - 1;\n }\n \n return null;\n };\n\n this.$findClosingBracket = function(bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n\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\n if (!typeRe){\n typeRe = new RegExp(\n \"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n + \")+\"\n );\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n\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\n if (token == null)\n break;\n\n valueIndex = 0;\n }\n \n return null;\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) {\n\"use strict\";\n\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;\n\nvar EditSession = function(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function() {\n return this.join(\"\\n\");\n };\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(text);\n\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$bidiHandler = new BidiHandler(this);\n\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n};\n\n\nEditSession.$uid = 0;\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setDocument = function(doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n\n if (this.bgTokenizer)\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.resetCaches();\n };\n this.getDocument = function() {\n return this.doc;\n };\n this.$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\n this.$getRowCacheIndex = function(cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n\n return low -1;\n };\n\n this.resetCaches = function() {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer)\n this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function(e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function(delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n\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 \n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n this.setValue = function(text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n this.getValue =\n this.toString = function() {\n return this.doc.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.getState = function(row) {\n return this.bgTokenizer.getState(row);\n };\n this.getTokens = function(row) {\n return this.bgTokenizer.getTokens(row);\n };\n this.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 } 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 this.setUndoManager = function(undoManager) {\n this.$undoManager = undoManager;\n \n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n \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 } else {\n this.$syncInformUndoManager = function() {};\n }\n };\n this.markUndoGroup = function() {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n \n this.$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 };\n this.getUndoManager = function() {\n return this.$undoManager || this.$defaultUndoManager;\n };\n this.getTabString = function() {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n } else {\n return \"\\t\";\n }\n };\n this.setUseSoftTabs = function(val) {\n this.setOption(\"useSoftTabs\", val);\n };\n this.getUseSoftTabs = function() {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n this.setTabSize = function(tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n this.getTabSize = function() {\n return this.$tabSize;\n };\n this.isTabStop = function(position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n this.getNavigateWithinSoftTabs = function() {\n return this.$navigateWithinSoftTabs;\n };\n\n this.$overwrite = false;\n this.setOverwrite = function(overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n this.getOverwrite = function() {\n return this.$overwrite;\n };\n this.toggleOverwrite = function() {\n this.setOverwrite(!this.$overwrite);\n };\n this.addGutterDecoration = function(row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n this.removeGutterDecoration = function(row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n this.getBreakpoints = function() {\n return this.$breakpoints;\n };\n this.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 this.clearBreakpoints = function() {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n this.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 this.clearBreakpoint = function(row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.addMarker = function(range, clazz, type, inFront) {\n var id = this.$markerId++;\n\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\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n\n return id;\n };\n this.addDynamicMarker = function(marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n\n return marker;\n };\n this.removeMarker = function(markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n this.getMarkers = function(inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n\n this.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 this.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\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n this.setAnnotations = function(annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n this.getAnnotations = function() {\n return this.$annotations || [];\n };\n this.clearAnnotations = function() {\n this.setAnnotations([]);\n };\n this.$detectNewLine = function(text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n } else {\n this.$autoNewLine = \"\\n\";\n }\n };\n this.getWordRange = function(row, column) {\n var line = this.getLine(row);\n\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n\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\n var start = column;\n if (start > 0) {\n do {\n start--;\n }\n while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n this.getAWordRange = function(row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n this.setNewLineMode = function(newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n this.getNewLineMode = function() {\n return this.doc.getNewLineMode();\n };\n this.setUseWorker = function(useWorker) { this.setOption(\"useWorker\", useWorker); };\n this.getUseWorker = function() { return this.$useWorker; };\n this.onReloadTokenizer = function(e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = config.$modes;\n this.$mode = null;\n this.$modeId = null;\n this.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 } else {\n path = mode || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n\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 } 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\n this.$onChangeMode = function(mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode) \n return;\n \n var oldMode = this.$mode;\n this.$mode = mode;\n\n this.$stopWorker();\n\n if (this.$useWorker)\n this.$startWorker();\n\n var tokenizer = mode.getTokenizer();\n\n if(tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n var _self = this;\n this.bgTokenizer.on(\"update\", function(e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n\n this.bgTokenizer.setDocument(this.getDocument());\n\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n \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\n this.$stopWorker = function() {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function() {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n this.getMode = function() {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n this.setScrollTop = function(scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n this.getScrollTop = function() {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n this.setScrollLeft = function(scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n this.getScrollLeft = function() {\n return this.$scrollLeft;\n };\n this.getScreenWidth = function() {\n this.$computeWidth();\n if (this.lineWidgets) \n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n \n this.getLineWidgetMaxWidth = function() {\n if (this.lineWidgetsWidth != null) 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\n this.$computeWidth = function(force) {\n if (this.$modified || force) {\n this.$modified = false;\n\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n\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\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\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n this.getLine = function(row) {\n return this.doc.getLine(row);\n };\n this.getLines = function(firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n this.getLength = function() {\n return this.doc.getLength();\n };\n this.getTextRange = function(range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n this.insert = function(position, text) {\n return this.doc.insert(position, text);\n };\n this.remove = function(range) {\n return this.doc.remove(range);\n };\n this.removeFullLines = function(firstRow, lastRow){\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n this.undoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\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 } 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 this.redoChanges = function(deltas, dontSelect) {\n if (!deltas.length)\n return;\n\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\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 this.setUndoSelect = function(enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function(deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n\n var range, point;\n\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start) continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\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 } 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 this.replace = function(range, text) {\n return this.doc.replace(range, text);\n };\n this.moveText = function(fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n\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\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\n return toRange;\n };\n this.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 this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n\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 } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n\n this.$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) return 0;\n var diff = row-firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength()-1) return 0;\n var diff = row-lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\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 \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 this.moveLinesUp = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n this.moveLinesDown = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n this.duplicateLines = function(firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n\n this.$clipRowToDocument = function(row) {\n return Math.max(0, Math.min(row, this.doc.getLength()-1));\n };\n\n this.$clipColumnToRow = function(row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n\n this.$clipPositionToDocument = function(row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\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 } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function(range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(\n range.start.row,\n range.start.column\n );\n }\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 } else {\n range.end.column = this.$clipColumnToRow(\n range.end.row,\n range.end.column\n );\n }\n return range;\n };\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min : null,\n max : null\n };\n this.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\n this._signal(\"changeWrapMode\");\n }\n };\n this.getUseWrapMode = function() {\n return this.$useWrapMode;\n };\n this.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 this.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\n this.$constrainWrapLimit = function(wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n\n return wrapLimit;\n };\n this.getWrapLimit = function() {\n return this.$wrapLimit;\n };\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n this.getWrapLimitRange = function() {\n return {\n min : this.$wrapLimitRange.min,\n max : this.$wrapLimitRange.max\n };\n };\n\n this.$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 \n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n\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\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\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\n lastRow = firstRow;\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 } 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\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 } 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\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\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\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function(firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$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\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 } else {\n tokens = [];\n foldLine.walk(function(placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(\n placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(\n lines[row].substring(lastColumn, column),\n tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this),\n foldLine.end.row,\n lines[foldLine.end.row].length + 1\n );\n\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n\n this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n\n var isCode = this.$wrapAsCode;\n\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\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) len -= 1;\n }\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 } 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 this.$getDisplayTokens = function(str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\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 } 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 } else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n this.$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\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 } else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n this.getRowLength = function(row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n \n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n this.getRowLineCount = function(row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.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 } else {\n return 0;\n }\n };\n this.getScreenLastRowColumn = function(screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n this.getDocumentLastRowColumn = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n this.getDocumentLastRowColumnPosition = function(docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n this.getRowSplitData = function(row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n this.getScreenTabSize = function(screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n\n\n this.screenToDocumentRow = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n\n this.screenToDocumentColumn = function(screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n this.screenToDocumentPosition = function(screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return {row: 0, column: 0};\n\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n\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 } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\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\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\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\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n\n return {row: docRow, column: docColumn};\n };\n this.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\n docRow = pos.row;\n docColumn = pos.column;\n\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\n var rowEnd, row = 0;\n\n\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 } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ?foldLine.start.row :Infinity;\n\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\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\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 } 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(\n wrapRow[screenRowOffset - 1] || 0, textLine.length\n );\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n \n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n this.documentToScreenColumn = function(row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n this.documentToScreenRow = function(docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n this.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 } 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\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\n return screenRows;\n };\n this.$setFontMetrics = function(fm) {\n if (!this.$enableVarChar) 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 \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 } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n \n return [screenColumn, column];\n };\n };\n \n this.destroy = function() {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\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\n this.isFullWidth = isFullWidth;\n function 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 }\n\n}).call(EditSession.prototype);\n\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n\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\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\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\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});\n\nexports.EditSession = EditSession;\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\n\nvar Search = function() {\n this.$options = {};\n};\n\n(function() {\n this.set = function(options) {\n oop.mixin(this.$options, options);\n return this;\n };\n this.getOptions = function() {\n return lang.copyObject(this.$options);\n };\n this.setOptions = function(options) {\n this.$options = options;\n };\n this.find = function(session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n\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 ) {\n firstRange = null;\n return false;\n }\n \n return true;\n });\n\n return firstRange;\n };\n this.findAll = function(session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n\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 \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 \n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex\n ) {\n continue;\n }\n ranges.push(prevRange = new Range(\n row, startIndex, row + len - 1, endIndex\n ));\n if (len > 2)\n row = row + len - 2;\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\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row)\n i++;\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row)\n j--;\n \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\n return ranges;\n };\n this.replace = function(input, replacement) {\n var options = this.$options;\n\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n\n if (!re)\n return;\n\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n \n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--; ) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n \n return replacement;\n };\n\n this.$assembleRegExp = function(options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n\n var needle = options.needle;\n\n if (!options.needle)\n return options.re = false;\n\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch(e) {\n re = false;\n }\n return options.re = re;\n };\n\n this.$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++) try {\n re.push(new RegExp(parts[i], modifier));\n } catch(e) {\n return false;\n }\n return re;\n };\n\n this.$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\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n \n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n \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 \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()) return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1) 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) 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) 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) return false;\n }\n }\n };\n }\n return {forEach: forEach};\n };\n\n}).call(Search.prototype);\n\nfunction addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n return wordBoundary(needle[0]) + needle\n + wordBoundary(needle[needle.length - 1]);\n}\n\nexports.Search = Search;\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\n\nfunction HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n}\n\nfunction MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n}\n\nMultiHashHandler.prototype = HashHandler.prototype;\n\n(function() {\n \n\n this.addCommand = function(command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n\n this.commands[command.name] = command;\n\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n\n this.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 } 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\n this.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 \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 \n function getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position \n || (command.isDefault ? -100 : 0);\n }\n this._addCommandToBinding = function(keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n \n if (typeof position != \"number\") {\n position = getPosition(command);\n }\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\n this.addCommands = function(commands) {\n commands && Object.keys(commands).forEach(function(name) {\n var command = commands[name];\n if (!command)\n return;\n \n if (typeof command === \"string\")\n return this.bindKey(command, name);\n\n if (typeof command === \"function\")\n command = { exec: command };\n\n if (typeof command !== \"object\")\n return;\n\n if (!command.name)\n command.name = name;\n\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function(commands) {\n Object.keys(commands).forEach(function(name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function(keyList) {\n Object.keys(keyList).forEach(function(key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function(command) {\n this.bindKey(command.bindKey, command);\n };\n this.parseKeys = function(keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(x){return x;});\n var key = parts.pop();\n\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\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\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function(data, hashId, keyString, keyCode) {\n if (keyCode < 0) 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 \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 \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 \n this.getStatusText = function(editor, data) {\n return data.$keyChain || \"\";\n };\n\n}).call(HashHandler.prototype);\n\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\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) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\nvar CommandManager = function(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function(e) {\n return e.command.exec(e.editor, e.args || {});\n });\n};\n\noop.inherits(CommandManager, MultiHashHandler);\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.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)) return true;\n }\n return false;\n }\n\n if (typeof command === \"string\")\n command = this.commands[command];\n\n if (!command)\n return false;\n\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n\n var e = {editor: editor, command: command, args: args};\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function(editor) {\n if (this.$inReplay)\n return;\n\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n\n if (!this.macro.length)\n this.macro = this.oldMacro;\n\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\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function(editor) {\n if (this.$inReplay || !this.macro)\n return;\n\n if (this.recording)\n return this.toggleRecording(editor);\n\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 } finally {\n this.$inReplay = false;\n }\n };\n\n this.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\n}).call(CommandManager.prototype);\n\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) {\n\"use strict\";\n\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\n\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(\"./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(\"./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\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(\n \"Shift-Backspace|Backspace\",\n \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"\n ),\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 } 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\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: \"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\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\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\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\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\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 } 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\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\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) editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n}, {\n name: \"openCommandPallete\",\n description: \"Open command pallete\",\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}];\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/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"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/clipboard\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\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;\n\nvar clipboard = require(\"./clipboard\");\nvar Editor = function(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\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\n this.keyBinding = new KeyBinding(this);\n\n this.$search = new Search().set({\n wrap: true\n });\n\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n\n this.$initOperationListeners();\n \n this._$emitInputEvent = lang.delayedCall(function() {\n this._signal(\"input\", {});\n if (this.session && this.session.bgTokenizer)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n \n this.on(\"change\", function(_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\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\nEditor.$uid = 0;\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function() {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n\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 \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\n this.curOp = null;\n this.prevOp = {};\n this.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\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\n this.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) 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 this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n this.$historyTracker = function(e) {\n if (!this.$mergeUndoDeltas)\n return;\n\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\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\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (\n this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000\n ) {\n shouldMerge = false; // the sequence is too long\n }\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 this.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 } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n this.getKeyboardHandler = function() {\n return this.keyBinding.getKeyboardHandler();\n };\n this.setSession = function(session) {\n if (this.session == session)\n return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n\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\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\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 \n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n \n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n \n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n \n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n \n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n \n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n \n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n \n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n \n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n \n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n \n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n \n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n \n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n \n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n \n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n \n this.onChangeMode();\n \n this.onCursorChange();\n \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 } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n \n this.curOp = null;\n \n oldSession && oldSession._signal(\"changeEditor\", {oldEditor: this});\n session && session._signal(\"changeEditor\", {editor: this});\n \n if (session && session.bgTokenizer)\n session.bgTokenizer.scheduleStart();\n };\n this.getSession = function() {\n return this.session;\n };\n this.setValue = function(val, cursorPos) {\n this.session.doc.setValue(val);\n\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n\n return val;\n };\n this.getValue = function() {\n return this.session.getValue();\n };\n this.getSelection = function() {\n return this.selection;\n };\n this.resize = function(force) {\n this.renderer.onResize(force);\n };\n this.setTheme = function(theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n this.getTheme = function() {\n return this.renderer.getTheme();\n };\n this.setStyle = function(style) {\n this.renderer.setStyle(style);\n };\n this.unsetStyle = function(style) {\n this.renderer.unsetStyle(style);\n };\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n this.setFontSize = function(size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$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.bgTokenizer) return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function(id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var ranges = session.getMatchingBracketRanges(self.getCursorPosition());\n if (!ranges && session.$mode.getMatching) \n ranges = session.$mode.getMatching(self.session);\n if (!ranges)\n return;\n\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\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\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function(range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n }, 50);\n };\n this.$highlightTags = function() {\n if (this.$highlightTagPending)\n return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function() {\n self.$highlightTagPending = false;\n \n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n \n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n \n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n if (token.type.indexOf(\"tag-open\") !== -1) {\n token = iterator.stepForward();\n if (!token)\n return;\n }\n \n var tag = token.value;\n var currentTag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n \n if (prevToken.value === '<'){\n do {\n prevToken = token;\n token = iterator.stepForward();\n\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '</') {\n depth--;\n }\n }\n } else if (tag === currentTag && token.value === '/>') { // self closing tag\n depth--;\n }\n }\n \n } while (token && depth >= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '</') {\n depth--;\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 } 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 iterator.stepForward();\n }\n \n if (!token) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n \n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn();\n var range = new Range(row, column, row, column+token.value.length);\n var sbm = session.$backMarkers[session.$tagHighlight];\n if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n }\n \n if (!session.$tagHighlight)\n session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n this.focus = function() {\n var _self = this;\n setTimeout(function() {\n if (!_self.isFocused())\n _self.textInput.focus();\n });\n this.textInput.focus();\n };\n this.isFocused = function() {\n return this.textInput.isFocused();\n };\n this.blur = function() {\n this.textInput.blur();\n };\n this.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 this.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\n this.$cursorChange = function() {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$highlightTags();\n this.$updateHighlightActiveLine();\n };\n this.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\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n\n this.onTokenizerUpdate = function(e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n\n\n this.onScrollTopChange = function() {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n\n this.onScrollLeftChange = function() {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n this.onCursorChange = function() {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n\n this.$updateHighlightActiveLine = function() {\n var session = this.getSession();\n\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\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\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 } 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\n this.onSelectionChange = function(e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n\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 } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function() {\n var session = this.session;\n\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n \n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n \n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n \n return re;\n };\n\n\n this.onChangeFrontMarker = function() {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function() {\n this.renderer.updateBackMarkers();\n };\n\n\n this.onChangeBreakpoint = function() {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function() {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n\n this.onChangeMode = function(e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n\n\n this.onChangeWrapLimit = function() {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function() {\n this.renderer.onResize(true);\n };\n\n\n this.onChangeFold = function() {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n this.getSelectedText = function() {\n return this.session.getTextRange(this.getSelectionRange());\n };\n this.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 this.onCopy = function() {\n this.commands.exec(\"copy\", this);\n };\n this.onCut = function() {\n this.commands.exec(\"cut\", this);\n };\n this.onPaste = function(text, event) {\n var e = {text: text, event: event};\n this.commands.exec(\"paste\", this, e);\n };\n \n this.$handlePaste = function(e) {\n if (typeof e == \"string\") \n e = {text: e};\n this._signal(\"paste\", e);\n var text = e.text;\n\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 } else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function(range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n \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 \n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n \n session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function(command, args) {\n return this.commands.exec(command, this, args);\n };\n this.insert = function(text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\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 }\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\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\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\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(\n new Range(cursor.row, start + transform.selection[0],\n cursor.row, start + transform.selection[1]));\n } else { // Transform relative to the current row.\n this.selection.setSelectionRange(\n new Range(cursor.row + transform.selection[0],\n transform.selection[1],\n cursor.row + transform.selection[2],\n 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\n session.insert({row: cursor.row+1, column: 0}, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n\n this.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n\n var startRow, endRow;\n if (this.selection.isEmpty()) {\n startRow = 0;\n endRow = session.doc.getLength() - 1;\n } else {\n var selectedRange = this.getSelectionRange();\n\n startRow = selectedRange.start.row;\n endRow = selectedRange.end.row;\n }\n\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var line, currIndent, range;\n var tab = session.getTabString();\n\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\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\n mode.autoOutdent(prevLineState, session, row);\n }\n };\n\n\n this.onTextInput = function(text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n \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 \n this.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\n this.onCommandKey = function(e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n this.setOverwrite = function(overwrite) {\n this.session.setOverwrite(overwrite);\n };\n this.getOverwrite = function() {\n return this.session.getOverwrite();\n };\n this.toggleOverwrite = function() {\n this.session.toggleOverwrite();\n };\n this.setScrollSpeed = function(speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n this.getScrollSpeed = function() {\n return this.getOption(\"scrollSpeed\");\n };\n this.setDragDelay = function(dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n this.getDragDelay = function() {\n return this.getOption(\"dragDelay\");\n };\n this.setSelectionStyle = function(val) {\n this.setOption(\"selectionStyle\", val);\n };\n this.getSelectionStyle = function() {\n return this.getOption(\"selectionStyle\");\n };\n this.setHighlightActiveLine = function(shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n this.getHighlightActiveLine = function() {\n return this.getOption(\"highlightActiveLine\");\n };\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n this.setHighlightSelectedWord = function(shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n this.getHighlightSelectedWord = function() {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function(shouldAnimate){\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function(){\n return this.renderer.getAnimatedScroll();\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function() {\n return this.renderer.getDisplayIndentGuides();\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.renderer.getShowPrintMargin();\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.renderer.getPrintMarginColumn();\n };\n this.setReadOnly = function(readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n this.getReadOnly = function() {\n return this.getOption(\"readOnly\");\n };\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n this.setShowFoldWidgets = function(show) {\n this.setOption(\"showFoldWidgets\", show);\n\n };\n this.getShowFoldWidgets = function() {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function() {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.remove = function(dir) {\n if (this.selection.isEmpty()){\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\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\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\n this.session.remove(range);\n this.clearSelection();\n };\n this.removeWordRight = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeWordLeft = function() {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.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 this.removeToLineEnd = function() {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n\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\n this.session.remove(range);\n this.clearSelection();\n };\n this.splitLine = function() {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n this.transposeLetters = function() {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n\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 this.toLowerCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\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 this.toUpperCase = function() {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\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 this.indent = function() {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\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 \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\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\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 this.blockIndent = function() {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n this.blockOutdent = function() {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n this.sortLines = function() {\n var rows = this.$getSelectedRows();\n var session = this.session;\n\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n\n lines.sort(function(a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\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 this.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\n this.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 this.getNumberAt = function(row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n\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 this.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\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\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n\n if(fp !== nr.end && column < fp){\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\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\n this.$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 ];\n\n this.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) 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\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 } 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 this.removeLines = function() {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.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 } 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\n sel.setSelectionRange(range, reverse);\n }\n };\n this.moveLinesDown = function() {\n this.$moveLines(1, false);\n };\n this.moveLinesUp = function() {\n this.$moveLines(-1, false);\n };\n this.moveText = function(range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n this.copyLinesUp = function() {\n this.$moveLines(-1, true);\n };\n this.copyLinesDown = function() {\n this.$moveLines(1, true);\n };\n this.$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) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n \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) 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) rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n \n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n this.$getSelectedRows = function(range) {\n range = (range || this.getSelectionRange()).collapseRows();\n\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function(compositionState) {\n this.renderer.showComposition(compositionState);\n };\n\n this.onCompositionUpdate = function(text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function() {\n this.renderer.hideComposition();\n };\n this.getFirstVisibleRow = function() {\n return this.renderer.getFirstVisibleRow();\n };\n this.getLastVisibleRow = function() {\n return this.renderer.getLastVisibleRow();\n };\n this.isRowVisible = function(row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n this.isRowFullyVisible = function(row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n this.$getVisibleRowCount = function() {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$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\n if (select === true) {\n this.selection.$moveSelection(function(){\n this.moveCursorBy(rows, 0);\n });\n } else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n\n var scrollTop = renderer.scrollTop;\n\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n\n renderer.animateScrolling(scrollTop);\n };\n this.selectPageDown = function() {\n this.$moveByPage(1, true);\n };\n this.selectPageUp = function() {\n this.$moveByPage(-1, true);\n };\n this.gotoPageDown = function() {\n this.$moveByPage(1, false);\n };\n this.gotoPageUp = function() {\n this.$moveByPage(-1, false);\n };\n this.scrollPageDown = function() {\n this.$moveByPage(1);\n };\n this.scrollPageUp = function() {\n this.$moveByPage(-1);\n };\n this.scrollToRow = function(row) {\n this.renderer.scrollToRow(row);\n };\n this.scrollToLine = function(line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n this.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 this.getCursorPosition = function() {\n return this.selection.getCursor();\n };\n this.getCursorPositionScreen = function() {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n this.getSelectionRange = function() {\n return this.selection.getRange();\n };\n this.selectAll = function() {\n this.selection.selectAll();\n };\n this.clearSelection = function() {\n this.selection.clearSelection();\n };\n this.moveCursorTo = function(row, column) {\n this.selection.moveCursorTo(row, column);\n };\n this.moveCursorToPosition = function(pos) {\n this.selection.moveCursorToPosition(pos);\n };\n this.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 token = prevToken || iterator.stepForward();\n\n if (!token) 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 \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\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\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\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 \n if (prevToken.value === '<') {\n depth[token.value]++;\n }\n else if (prevToken.value === '</') {\n depth[token.value]--;\n }\n \n if (depth[token.value] === -1) {\n matchType = 'tag';\n found = true;\n }\n }\n\n if (!found) {\n prevToken = token;\n token = iterator.stepForward();\n i = 0;\n }\n } while (token && !found);\n if (!matchType)\n return;\n\n var range, pos;\n if (matchType === 'bracket') {\n range = this.session.getBracketRange(cursor);\n if (!range) {\n range = new Range(\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() + i - 1,\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() + i - 1\n );\n pos = range.start;\n if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)\n range = this.session.getBracketRange(pos);\n }\n }\n else if (matchType === 'tag') {\n if (token && token.type.indexOf('tag-name') !== -1) \n var tag = token.value;\n else\n return;\n\n range = new Range(\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() - 2,\n iterator.getCurrentTokenRow(),\n iterator.getCurrentTokenColumn() - 2\n );\n if (range.compare(cursor.row, cursor.column) === 0) {\n found = false;\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n \n if (prevToken) {\n if (prevToken.type.indexOf('tag-close') !== -1) {\n range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n }\n\n if (token.value === tag && token.type.indexOf('tag-name') !== -1) {\n if (prevToken.value === '<') {\n depth[tag]++;\n }\n else if (prevToken.value === '</') {\n depth[tag]--;\n }\n \n if (depth[tag] === 0)\n found = true;\n }\n }\n } while (prevToken && !found);\n }\n if (token && token.type.indexOf('tag-name')) {\n pos = range.start;\n if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)\n pos = range.end;\n }\n }\n\n pos = range && range.cursor || pos;\n if (pos) {\n if (select) {\n if (range && expand) {\n this.selection.setRange(range);\n } else if (range && range.isEqual(this.getSelectionRange())) {\n this.clearSelection();\n } else {\n this.selection.selectTo(pos.row, pos.column);\n }\n } else {\n this.selection.moveTo(pos.row, pos.column);\n }\n }\n };\n this.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\n if (!this.isRowFullyVisible(lineNumber - 1))\n this.scrollToLine(lineNumber - 1, true, animate);\n };\n this.navigateTo = function(row, column) {\n this.selection.moveTo(row, column);\n };\n this.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 this.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 this.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 this.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 this.navigateLineStart = function() {\n this.selection.moveCursorLineStart();\n this.clearSelection();\n };\n this.navigateLineEnd = function() {\n this.selection.moveCursorLineEnd();\n this.clearSelection();\n };\n this.navigateFileEnd = function() {\n this.selection.moveCursorFileEnd();\n this.clearSelection();\n };\n this.navigateFileStart = function() {\n this.selection.moveCursorFileStart();\n this.clearSelection();\n };\n this.navigateWordRight = function() {\n this.selection.moveCursorWordRight();\n this.clearSelection();\n };\n this.navigateWordLeft = function() {\n this.selection.moveCursorWordLeft();\n this.clearSelection();\n };\n this.replace = function(replacement, options) {\n if (options)\n this.$search.set(options);\n\n var range = this.$search.find(this.session);\n var replaced = 0;\n if (!range)\n return replaced;\n\n if (this.$tryReplace(range, replacement)) {\n replaced = 1;\n }\n\n this.selection.setSelectionRange(range);\n this.renderer.scrollSelectionIntoView(range.start, range.end);\n\n return replaced;\n };\n this.replaceAll = function(replacement, options) {\n if (options) {\n this.$search.set(options);\n }\n\n var ranges = this.$search.findAll(this.session);\n var replaced = 0;\n if (!ranges.length)\n return replaced;\n\n var selection = this.getSelectionRange();\n this.selection.moveTo(0, 0);\n\n for (var i = ranges.length - 1; i >= 0; --i) {\n if(this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n\n return replaced;\n };\n\n this.$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 } else {\n return null;\n }\n };\n this.getLastSearchOptions = function() {\n return this.$search.getOptions();\n };\n this.find = function(needle, options, animate) {\n if (!options)\n options = {};\n\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n\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\n this.$search.set(options);\n if (!options.start)\n this.$search.set({start: range});\n\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 this.findNext = function(options, animate) {\n this.find({skipCurrent: true, backwards: false}, options, animate);\n };\n this.findPrevious = function(options, animate) {\n this.find(options, {skipCurrent: true, backwards: true}, animate);\n };\n\n this.revealRange = function(range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n\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 this.undo = function() {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.redo = function() {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.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 this.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 ) {\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 } else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\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\n\n this.$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 this.prompt = function(message, options, callback) {\n var editor = this;\n config.loadModule(\"./ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n\n}).call(Editor.prototype);\n\n\n\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 \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 value = this.session && (this.renderer.$composition || this.getValue());\n if (value && 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 } else if (!value && !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 } else if (!value && 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\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 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\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n\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});\n\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(\n lastLineNumber.toString().length,\n (config.lastRow + 1).toString().length,\n 2\n ) * 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};\n\nexports.Editor = Editor;\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar UndoManager = function() {\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.reset();\n};\n\n(function() {\n \n this.addSession = function(session) {\n this.$session = session;\n };\n this.add = function(delta, allowMerge, session) {\n if (this.$fromUndo) return;\n if (delta == this.$lastDelta) return;\n if (!this.$keepRedoStack) this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\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 \n this.addSelection = function(selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n \n this.startNewGroup = function() {\n this.lastDeltas = null;\n return this.$rev;\n };\n \n this.markIgnored = function(from, to) {\n if (to == null) 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 \n this.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 \n this.getRevision = function() {\n return this.$rev;\n };\n \n this.getDeltas = function(from, to) {\n if (to == null) 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 \n this.getChangedRanges = function(from, to) {\n if (to == null) to = this.$rev + 1;\n \n };\n \n this.getChangedLines = function(from, to) {\n if (to == null) to = this.$rev + 1;\n \n };\n this.undo = function(session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n \n if (!rearrangeUndoStack(stack, stack.length))\n return;\n \n if (!session)\n session = this.$session;\n \n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n \n this.$fromUndo = true;\n \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 \n this.$fromUndo = false;\n\n return undoSelectionRange;\n };\n this.redo = function(session, dontSelect) {\n this.lastDeltas = null;\n \n if (!session)\n session = this.$session;\n \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 \n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n \n return redoSelectionRange;\n };\n \n this.$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 this.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 this.canUndo = function() {\n return this.$undoStack.length > 0;\n };\n this.canRedo = function() {\n return this.$redoStack.length > 0;\n };\n this.bookmark = function(rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n this.isAtBookmark = function() {\n return this.$rev === this.mark;\n };\n \n this.toJSON = function() {\n \n };\n \n this.fromJSON = function() {\n \n };\n \n this.hasUndo = this.canUndo;\n this.hasRedo = this.canRedo;\n this.isClean = this.isAtBookmark;\n this.markClean = this.bookmark;\n \n this.$prettyPrint = function(delta) {\n if (delta) return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n}).call(UndoManager.prototype);\n\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}\n\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\n\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) end = start;\n\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}\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 } else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\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}\n\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n \n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n } else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n } else {\n return null;\n }\n } else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n } else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n } else {\n return null;\n }\n } else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n } else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n } else {\n return null;\n }\n } else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n } else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\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 \n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n } else {\n shift(d1, c1, 1);\n }\n } else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n } else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n } else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n } else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n } else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n } else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n } else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n } else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\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\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\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\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 \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}\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 } 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}\n\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\n\nvar Lines = function(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n \n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n};\n\n(function() {\n \n this.moveContainer = function(config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n }; \n \n this.pageChanged = function(oldConfig, newConfig) {\n return (\n Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight)\n );\n };\n \n this.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 \n this.computeLineHeight = function(row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n \n this.getLength = function() {\n return this.cells.length;\n };\n \n this.get = function(index) {\n return this.cells[index];\n };\n \n this.shift = function() {\n this.$cacheCell(this.cells.shift());\n };\n \n this.pop = function() {\n this.$cacheCell(this.cells.pop());\n };\n \n this.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 } else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n \n this.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 } else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n \n this.last = function() {\n if (this.cells.length)\n return this.cells[this.cells.length-1];\n else\n return null;\n };\n \n this.$cacheCell = function(cell) {\n if (!cell)\n return;\n \n cell.element.remove();\n this.cellCache.push(cell);\n };\n \n this.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 \n this.element.appendChild(element);\n \n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n cell.row = row;\n \n return cell;\n };\n \n}).call(Lines.prototype);\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\"], function(require, exports, module) {\n\"use strict\";\n\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;\n\nvar Gutter = function(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 \n this.gutterWidth = 0;\n\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n \n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.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\n this.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\n this.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\n this.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: []};\n \n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n\n if (rowInfo.text.indexOf(annoText) === -1)\n rowInfo.text.push(annoText);\n\n var type = annotation.type;\n if (type == \"error\")\n rowInfo.className = \" ace_error\";\n else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (type == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\n }\n };\n\n this.$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 } else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\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\n this.update = function(config) {\n this.config = config;\n \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 \n this.oldLastRow = lastRow;\n this.config = config;\n \n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n \n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n\n var cell = null;\n var index = -1;\n var row = firstRow;\n \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 \n break;\n }\n\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n } else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n \n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n\n this.$updateGutterWidth = function(config) {\n var session = this.session;\n \n var gutterRenderer = session.gutterRenderer || this.$renderer;\n \n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n \n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n\n var gutterWidth = gutterRenderer \n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n \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 \n this.$updateCursorRow = function() {\n if (!this.$highlightGutterLine)\n return;\n \n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n \n this.$cursorRow = position.row;\n };\n \n this.updateLineHighlight = function() {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n\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 \n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n \n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n \n this.$lines.moveContainer(config);\n\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 \n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n\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\n if (oldLastRow > lastRow)\n for (var row=this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row>0; row--)\n this.$lines.pop();\n\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n \n this.updateLineHighlight();\n \n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n\n this.$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\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\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n\n row++;\n }\n return fragment;\n };\n \n this.$renderCell = function(cell, config, fold, row) {\n var element = cell.element;\n \n var session = this.session;\n \n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n\n var firstLineNumber = session.$firstLineNumber;\n \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 \n var className = \"ace_gutter-cell \";\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 \n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row])\n className += this.$annotations[row].className;\n if (element.className != className)\n element.className = className;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row)\n className += \" ace_closed\";\n else\n className += \" ace_open\";\n if (foldWidget.className != className)\n foldWidget.className = className;\n\n var foldHeight = config.lineHeight + \"px\";\n dom.setStyle(foldWidget.style, \"height\", foldHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n } else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n \n var text = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n \n if (text !== textNode.data) {\n textNode.data = text;\n }\n \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 \n cell.text = text;\n return cell;\n };\n\n this.$fixedWidth = false;\n \n this.$highlightGutterLine = true;\n this.$renderer = \"\";\n this.setHighlightGutterLine = function(highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n \n this.$showLineNumbers = true;\n this.$renderer = \"\";\n this.setShowLineNumbers = function(show) {\n this.$renderer = !show && {\n getWidth: function() {return 0;},\n getText: function() {return \"\";}\n };\n };\n \n this.getShowLineNumbers = function() {\n return this.$showLineNumbers;\n };\n \n this.$showFoldWidgets = true;\n this.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\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n \n this.getShowFoldWidgets = function() {\n return this.$showFoldWidgets;\n };\n\n this.$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\n this.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\n}).call(Gutter.prototype);\n\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n \n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n \n return element;\n}\n\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\n\nvar Marker = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n};\n\n(function() {\n\n this.$padding = 0;\n\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n this.setSession = function(session) {\n this.session = session;\n };\n \n this.setMarkers = function(markers) {\n this.markers = markers;\n };\n \n this.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 } else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n\n this.update = function(config) {\n if (!config) return;\n\n this.config = config;\n\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n\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 } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\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 } 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\n this.$getTop = function(row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n this.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, \n clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end),\n layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n this.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\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 } else {\n this.elt(\n clazz + \" ace_br1 ace_start\",\n \"height:\"+ height+ \"px;\"+ \"right:0;\"+ \"top:\"+top+ \"px;left:\"+ left+ \"px;\" + (extraStyle || \"\")\n );\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 } else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n\n this.elt(\n clazz + \" ace_br12\",\n \"height:\"+ height+ \"px;\"+\n \"width:\"+ width+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:\"+ padding+ \"px;\"+ (extraStyle || \"\")\n );\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 \n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n\n this.elt(\n clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"),\n \"height:\"+ height+ \"px;\"+\n \"right:0;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:\"+ padding+ \"px;\"+ (extraStyle || \"\")\n );\n };\n this.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\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n\n this.elt(\n clazz,\n \"height:\"+ height+ \"px;\"+\n \"width:\"+ width+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:\"+ left+ \"px;\"+ (extraStyle || \"\")\n );\n };\n this.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\n selections.forEach(function(selection) {\n this.elt(\n clazz,\n \"height:\" + height + \"px;\" +\n \"width:\" + selection.width + (extraLength || 0) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\")\n );\n }, this);\n };\n\n this.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\n this.elt(\n clazz,\n \"height:\"+ height+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:0;right:0;\"+ (extraStyle || \"\")\n );\n };\n \n this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n\n this.elt(\n clazz,\n \"height:\"+ height+ \"px;\"+\n \"top:\"+ top+ \"px;\"+\n \"left:0;right:0;\"+ (extraStyle || \"\")\n );\n };\n\n}).call(Marker.prototype);\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\"], function(require, exports, module) {\n\"use strict\";\n\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;\n\nvar Text = function(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\n(function() {\n\n oop.implement(this, EventEmitter);\n\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n this.MAX_LINE_LENGTH = 10000;\n\n this.$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\n this.setPadding = function(padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n\n this.getLineHeight = function() {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n\n this.getCharacterWidth = function() {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n \n this.$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\n this.checkForSizeChanges = function() {\n this.$fontMetrics.checkForSizeChanges();\n };\n this.$pollSizeChanges = function() {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n this.setSession = function(session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n\n this.showInvisibles = false;\n this.showSpaces = false;\n this.showTabs = false;\n this.showEOL = false;\n this.setShowInvisibles = function(showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n\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 } else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n\n this.displayIndentGuides = true;\n this.setDisplayIndentGuides = function(display) {\n if (this.displayIndentGuides == display)\n return false;\n\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n\n this.$tabStrings = [];\n this.onChangeTabSize =\n this.$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 } 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\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\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n \n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n\n this.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 \n this.config = config;\n\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n\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 } else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx ++;\n }\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\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\n var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(\n lineElement, row, row == foldStart ? foldLine : false\n );\n\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n\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\n this.scrollLines = function(config) {\n var oldConfig = this.config;\n this.config = config;\n\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n \n this.$lines.moveContainer(config);\n \n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n\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\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\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n };\n\n this.$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\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\n var line = this.$lines.createCell(row, config, this.session);\n \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\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n } else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n\n row++;\n }\n return fragment;\n };\n\n this.update = function(config) {\n this.$lines.moveContainer(config);\n \n this.config = config;\n\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n \n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n\n this.$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]+)|(\\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 \n var valueFragment = this.dom.createFragment(this.element);\n\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 \n if (!self.showSpaces && simpleSpace)\n continue;\n\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n\n i = m.index + m[0].length;\n \n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\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 } 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 } else {\n valueFragment.appendChild(this.com.createTextNode(simpleSpace, this.element));\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 } else if (cjkSpace) {\n screenColumn += 1;\n \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 } 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 \n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n\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 \n span.className = classes;\n span.appendChild(valueFragment);\n \n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n \n return screenColumn + value.length;\n };\n\n this.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 return value.substr(cols);\n } else if (value[0] == \"\\t\") {\n for (var i=0; i<cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n return value.substr(cols);\n }\n return value;\n };\n\n this.$createLineElement = function(parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n \n return lineEl;\n };\n\n this.$renderWrappedLine = function(parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n \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\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n } else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(\n lineEl, screenColumn,\n token, value.substring(0, splitChars - chars)\n );\n value = value.substring(splitChars - chars);\n chars = splitChars;\n\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n\n lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n\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(\n lineEl, screenColumn, token, value\n );\n }\n }\n }\n \n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n\n this.$renderSimpleLine = function(parent, tokens) {\n var screenColumn = 0;\n var token = tokens[0];\n var value = token.value;\n if (this.displayIndentGuides)\n value = this.renderIndentGuide(parent, value);\n if (value)\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n for (var i = 1; i < tokens.length; i++) {\n token = tokens[i];\n value = token.value;\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 \n this.$renderOverflowMessage = function(parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token,\n value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n \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 \n parent.appendChild(overflowEl); \n };\n this.$renderLine = function(parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n\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 } 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 } else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n\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 \n lastLineEl.appendChild(invisibleEl);\n }\n };\n\n this.$getFoldLineTokens = function(row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n\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\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\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n\n col = from + value.length;\n idx += 1;\n }\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 } else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\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 } else {\n if (isNewRow)\n tokens = session.getTokens(row);\n\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n\n return renderTokens;\n };\n\n this.$useLineGroups = function() {\n return this.session.getUseWrapMode();\n };\n\n this.destroy = function() {};\n}).call(Text.prototype);\n\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"../lib/dom\");\n\nvar Cursor = function(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n \n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n\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\n(function() {\n \n this.$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\n this.$startCssAnimation = function() {\n var cursors = this.cursors;\n for (var i = cursors.length; i--; )\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n\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 \n this.$stopCssAnimation = function() {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n\n this.$padding = 0;\n this.setPadding = function(padding) {\n this.$padding = padding;\n };\n\n this.setSession = function(session) {\n this.session = session;\n };\n\n this.setBlinking = function(blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n\n this.setBlinkInterval = function(blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n\n this.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\n this.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\n this.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\n this.hideCursor = function() {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.showCursor = function() {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.restartTimer = function() {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n \n update(true);\n\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\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 \n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n } else {\n var blink = function(){\n this.timeoutId = setTimeout(function() {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n \n this.intervalId = setInterval(function() {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n\n this.getPixelPosition = function(position, onScreen) {\n if (!this.config || !this.session)\n return {left : 0, top : 0};\n\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\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n\n return {left : cursorLeft, top : cursorTop};\n };\n\n this.isCursorInView = function(pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n\n this.update = function(config) {\n this.config = config;\n\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n\n if (selections === undefined || selections.length === 0){\n selections = [{cursor: null}];\n }\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\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n \n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\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 } else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n \n this.drawCursor = null;\n\n this.$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\n this.destroy = function() {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n\n}).call(Cursor.prototype);\n\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) {\n\"use strict\";\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 = function(parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n\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\n parent.appendChild(this.element);\n\n this.setVisible(false);\n this.skipEvent = false;\n\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n\n this.setVisible = function(isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\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};\n\noop.inherits(VScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-v';\n this.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 this.getWidth = function() {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n this.setHeight = function(height) {\n this.element.style.height = height + \"px\";\n };\n this.setInnerHeight = \n this.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 } else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n this.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\n}).call(VScrollBar.prototype);\nvar HScrollBar = function(parent, renderer) {\n ScrollBar.call(this, parent);\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};\n\noop.inherits(HScrollBar, ScrollBar);\n\n(function() {\n\n this.classSuffix = '-h';\n this.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 this.getHeight = function() {\n return this.isVisible ? this.height : 0;\n };\n this.setWidth = function(width) {\n this.element.style.width = width + \"px\";\n };\n this.setInnerWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollWidth = function(width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollLeft = function(scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n\n}).call(HScrollBar.prototype);\n\n\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\n\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module) {\n\"use strict\";\n\nvar event = require(\"./lib/event\");\n\n\nvar RenderLoop = function(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\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n \n if (_self.changes) {\n if (_self.$recursionLimit-- < 0) return;\n _self.schedule();\n } else {\n _self.$recursionLimit = 2;\n }\n };\n};\n\n(function() {\n\n this.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\n this.clear = function(change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n\n}).call(RenderLoop.prototype);\n\nexports.RenderLoop = RenderLoop;\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) {\n\nvar 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;\n\nvar CHAR_COUNT = 256;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\n\nvar FontMetrics = exports.FontMetrics = function(parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n \n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n \n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n \n \n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n \n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n \n this.$characterSize = {width: 0, height: 0};\n \n \n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n \n this.$characterSize = {width: 0, height: 0};\n \n this.$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\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n } else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n\n this.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 \n this.$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\n this.$pollSizeChanges = function() {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n \n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n \n this.setPolling = function(val) {\n if (val) {\n this.$pollSizeChanges();\n } else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n\n this.$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\n this.$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 \n this.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\n this.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\n \n this.$getZoom = function getZoom(element) {\n if (!element || !element.parentElement) return 1;\n return (window.getComputedStyle(element).zoom || 1) * getZoom(element.parentElement);\n };\n this.$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 this.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\n if (!this.els)\n this.$initTransformMeasureNodes();\n \n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\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\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n \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 \n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/lib/useragent\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\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 RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = \"\\\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.ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\npadding: 0;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\ncontain: style size layout;\\\nfont-variant-ligatures: no-common-ligatures;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncontain: style size layout;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-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==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-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==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\ncontain: strict;\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ncontain: strict;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: transparent;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\n}\\\n.ace_composition_placeholder { color: transparent }\\\n.ace_composition_marker { \\\nborder-bottom: 1px solid;\\\nposition: absolute;\\\nborder-radius: 0;\\\nmargin-top: 1px;\\\n}\\\n[ace_nocontext=true] {\\\ntransform: none!important;\\\nfilter: none!important;\\\nclip-path: none!important;\\\nmask : none!important;\\\ncontain: none!important;\\\nperspective: none!important;\\\nmix-blend-mode: initial!important;\\\nz-index: auto;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\nheight: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\nposition: absolute;\\\nheight: 1000000px;\\\nwidth: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\\ncontain: style size layout;\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_hidpi .ace_text-layer,\\\n.ace_hidpi .ace_gutter-layer,\\\n.ace_hidpi .ace_content,\\\n.ace_hidpi .ace_gutter {\\\ncontain: strict;\\\nwill-change: transform;\\\n}\\\n.ace_hidpi .ace_text-layer > .ace_line, \\\n.ace_hidpi .ace_text-layer > .ace_line_group {\\\ncontain: strict;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\\nopacity: 0;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_animate-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: step-end;\\\nanimation-name: blink-ace-animate;\\\nanimation-iteration-count: infinite;\\\n}\\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: ease-in-out;\\\nanimation-name: blink-ace-animate-smooth;\\\n}\\\n@keyframes blink-ace-animate {\\\nfrom, to { opacity: 1; }\\\n60% { opacity: 0; }\\\n}\\\n@keyframes blink-ace-animate-smooth {\\\nfrom, to { opacity: 1; }\\\n45% { opacity: 1; }\\\n60% { opacity: 0; }\\\n85% { opacity: 0; }\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_error_bracket {\\\nposition: absolute;\\\nborder-bottom: 1px solid #DE5555;\\\nborder-radius: 0;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block; \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_inline_button {\\\nborder: 1px solid lightgray;\\\ndisplay: inline-block;\\\nmargin: -1px 8px;\\\npadding: 0 5px;\\\npointer-events: auto;\\\ncursor: pointer;\\\n}\\\n.ace_inline_button:hover {\\\nborder-color: gray;\\\nbackground: rgba(200,200,200,0.2);\\\ndisplay: inline-block;\\\npointer-events: auto;\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n.ace_mobile-menu {\\\nposition: absolute;\\\nline-height: 1.5;\\\nborder-radius: 4px;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\nbackground: white;\\\nbox-shadow: 1px 3px 2px grey;\\\nborder: 1px solid #dcdcdc;\\\ncolor: black;\\\n}\\\n.ace_dark > .ace_mobile-menu {\\\nbackground: #333;\\\ncolor: #ccc;\\\nbox-shadow: 1px 3px 2px grey;\\\nborder: 1px solid #444;\\\n}\\\n.ace_mobile-button {\\\npadding: 2px;\\\ncursor: pointer;\\\noverflow: hidden;\\\n}\\\n.ace_mobile-button:hover {\\\nbackground-color: #eee;\\\nopacity:1;\\\n}\\\n.ace_mobile-button:active {\\\nbackground-color: #ddd;\\\n}\\\n.ace_placeholder {\\\nfont-family: arial;\\\ntransform: scale(0.9);\\\ntransform-origin: left;\\\nwhite-space: pre;\\\nopacity: 0.7;\\\nmargin: 0 10px;\\\n}\";\n\nvar useragent = require(\"./lib/useragent\");\nvar HIDE_TEXTAREA = useragent.isIE;\n\ndom.importCssString(editorCss, \"ace_editor.css\", false);\n\nvar VirtualRenderer = function(container, theme) {\n var _self = this;\n\n this.container = container || dom.createElement(\"div\");\n\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI) dom.addCssClass(this.container, \"ace_hidpi\");\n\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null) \n config.set(\"useStrictCSP\", false);\n\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\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n \n this.container.appendChild(this.scroller);\n\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n\n this.$markerBack = new MarkerLayer(this.content);\n\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n\n this.$markerFront = new MarkerLayer(this.content);\n\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n\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\n this.scrollTop = 0;\n this.scrollLeft = 0;\n\n this.cursorPos = {\n row : 0,\n column : 0\n };\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\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\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 \n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n \n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n \n this.$keepTextAreaAtCursor = !useragent.isIOS;\n\n this.$loop = new RenderLoop(\n this.$renderChanges.bind(this),\n this.container.ownerDocument.defaultView\n );\n this.$loop.schedule(this.CHANGE_FULL);\n\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n};\n\n(function() {\n\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n\n oop.implement(this, EventEmitter);\n\n this.updateCharacterSize = function() {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\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 this.setSession = function(session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n \n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n\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 \n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n \n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n this.updateLines = function(firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n\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\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\n this.onChangeNewLineMode = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n \n this.onChangeTabSize = function() {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n this.updateText = function() {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n this.updateFull = function(force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n this.updateFontSize = function() {\n this.$textLayer.checkForSizeChanges();\n };\n\n this.$changes = 0;\n this.$updateSizeAsync = function() {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n this.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\n \n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n\n if (force)\n this.$gutterLayer.$padding = null;\n\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n };\n \n this.$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\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n\n changes = changes | this.CHANGE_SCROLL;\n }\n\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n \n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n \n this.gutterWidth = gutterWidth;\n \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 \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\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n \n size.$dirty = !width || !height;\n\n if (changes)\n this._signal(\"resize\", oldSize);\n\n return changes;\n };\n\n this.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\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else {\n this.$computeLayerConfig();\n }\n };\n this.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 this.setAnimatedScroll = function(shouldAnimate){\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n this.getAnimatedScroll = function() {\n return this.$animatedScroll;\n };\n this.setShowInvisibles = function(showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function() {\n return this.getOption(\"showInvisibles\");\n };\n this.getDisplayIndentGuides = function() {\n return this.getOption(\"displayIndentGuides\");\n };\n\n this.setDisplayIndentGuides = function(display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n this.setShowPrintMargin = function(showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n this.getShowPrintMargin = function() {\n return this.getOption(\"showPrintMargin\");\n };\n this.setPrintMarginColumn = function(showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n this.getPrintMarginColumn = function() {\n return this.getOption(\"printMarginColumn\");\n };\n this.getShowGutter = function(){\n return this.getOption(\"showGutter\");\n };\n this.setShowGutter = function(show){\n return this.setOption(\"showGutter\", show);\n };\n\n this.getFadeFoldWidgets = function(){\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function(show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n\n this.setHighlightGutterLine = function(shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function() {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.$updatePrintMargin = function() {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n\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\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 \n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n this.getContainerElement = function() {\n return this.container;\n };\n this.getMouseEventTarget = function() {\n return this.scroller;\n };\n this.getTextAreaContainer = function() {\n return this.container;\n };\n this.$moveTextAreaToCursor = function() {\n if (this.$isMousePressed) 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 \n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n\n var h = composition && composition.useTextareaForIME ? this.lineHeight : HIDE_TEXTAREA ? 0 : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\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 \n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n\n posLeft += this.gutterWidth + this.margin.left;\n\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 this.getFirstVisibleRow = function() {\n return this.layerConfig.firstRow;\n };\n this.getFirstFullyVisibleRow = function() {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n this.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 this.getLastVisibleRow = function() {\n return this.layerConfig.lastRow;\n };\n\n this.$padding = null;\n this.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 \n this.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 \n this.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 this.getHScrollBarAlwaysVisible = function() {\n return this.$hScrollBarAlwaysVisible;\n };\n this.setHScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.getVScrollBarAlwaysVisible = function() {\n return this.$vScrollBarAlwaysVisible;\n };\n this.setVScrollBarAlwaysVisible = function(alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.$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 this.$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 \n this.$frozen = false;\n this.freeze = function() {\n this.$frozen = true;\n };\n \n this.unfreeze = function() {\n this.$frozen = false;\n };\n\n this.$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 \n this._signal(\"beforeRender\", changes);\n \n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n\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 ) {\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 - this.layerConfig.firstRow) * 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 \n dom.translate(this.content, -this.scrollLeft, -config.offset);\n \n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n \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 }\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 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\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 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\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 }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n }\n\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n\n this._signal(\"afterRender\", changes);\n };\n\n \n this.$autosize = function() {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, \n Math.max((this.$minLines || 1) * this.lineHeight, height)\n ) + 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 \n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n \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 \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 \n this._signal(\"autosize\");\n }\n };\n \n this.$computeLayerConfig = function() {\n var session = this.session;\n var size = this.$size;\n \n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n\n var longestLine = this.$getLongestLine();\n \n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n\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\n var minHeight = size.scrollerHeight + this.lineHeight;\n \n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n \n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top,\n Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, \n longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n \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\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\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n\n offset = this.scrollTop - firstRowScreen * lineHeight;\n\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 \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\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n\n return changes;\n };\n\n this.$updateLines = function() {\n if (!this.$changedLines) return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n\n var layerConfig = this.layerConfig;\n\n if (firstRow > layerConfig.lastRow + 1) { return; }\n if (lastRow < layerConfig.firstRow) { return; }\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\n this.$getLongestLine = function() {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n \n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n this.updateFrontMarkers = function() {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n this.updateBackMarkers = function() {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n this.addGutterDecoration = function(row, className){\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function(row, className){\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n this.updateBreakpoints = function(rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.setAnnotations = function(annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.updateCursor = function() {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n this.hideCursor = function() {\n this.$cursorLayer.hideCursor();\n };\n this.showCursor = function() {\n this.$cursorLayer.showCursor();\n };\n\n this.scrollSelectionIntoView = function(anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n this.scrollCursorIntoView = function(cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n\n var left = pos.left;\n var top = pos.top;\n \n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n \n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n \n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight)\n top -= offset * this.$size.scrollerHeight;\n if (top === 0)\n top = -this.scrollMargin.top;\n this.session.setScrollTop(top);\n } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\n top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n\n var scrollLeft = this.scrollLeft;\n\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n };\n this.getScrollTop = function() {\n return this.session.getScrollTop();\n };\n this.getScrollLeft = function() {\n return this.session.getScrollLeft();\n };\n this.getScrollTopRow = function() {\n return this.scrollTop / this.lineHeight;\n };\n this.getScrollBottomRow = function() {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n this.scrollToRow = function(row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n\n this.alignCursor = function(cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = {row: cursor, column: 0};\n\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n\n this.session.setScrollTop(offset);\n return offset;\n };\n\n this.STEPS = 8;\n this.$calcSteps = function(fromValue, toValue){\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n\n var func = function(t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n\n return steps;\n };\n this.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\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n\n this.animateScrolling = function(fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n \n if (fromValue == toValue)\n return;\n \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 \n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps};\n\n clearInterval(this.$timer);\n\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function() {\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 } else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n } else {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n callback && callback();\n }\n }, 10);\n };\n this.scrollToY = function(scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n this.scrollToX = function(scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n this.scrollTo = function(x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n this.scrollBy = function(deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n this.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\n this.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 } else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\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\n return {row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX};\n };\n\n this.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 } else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\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\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n this.textToScreenCoordinates = function(row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n\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 \n var y = pos.row * this.lineHeight;\n\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n this.visualizeFocus = function() {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n this.visualizeBlur = function() {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n this.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 \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 this.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 this.hideComposition = function() {\n if (!this.$composition)\n return;\n \n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n\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 \n this.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) {\n tokens.push(newToken);\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 \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\n this.removeExtraToken = function(row, column) {\n this.updateLines(row, row);\n };\n this.setTheme = function(theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange',{theme:theme});\n\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n } else {\n afterLoad(theme);\n }\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(\n module.cssText,\n module.cssClass,\n _self.container\n );\n\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n\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\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\n _self._dispatchEvent('themeLoaded', {theme:module});\n cb && cb();\n }\n };\n this.getTheme = function() {\n return this.$themeId;\n };\n this.setStyle = function(style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n this.unsetStyle = function(style) {\n dom.removeCssClass(this.container, style);\n };\n \n this.setCursorStyle = function(style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n this.setMouseCursor = function(cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n \n this.attachToShadowRoot = function() {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n this.destroy = function() {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n };\n\n}).call(VirtualRenderer.prototype);\n\n\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\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 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 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 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 },\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\n\nexports.VirtualRenderer = VirtualRenderer;\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 = 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.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);\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) {\n\"use strict\";\n\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\n\nvar PlaceHolder = function(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);\n this.$others = others;\n \n this.$onCursorChange = function() {\n setTimeout(function() {\n _self.onCursorChange();\n });\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\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n\n(function() {\n\n oop.implement(this, EventEmitter);\n this.setup = function() {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n \n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n\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 this.showOtherMarkers = function() {\n if (this.othersActive) 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 this.hideOtherMarkers = function() {\n if (!this.othersActive) 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 this.onUpdate = function(delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n \n var range = delta;\n if (range.start.row !== range.end.row) return;\n if (range.start.row !== this.pos.row) 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 \n this.updateAnchors(delta);\n \n if (inMainRange)\n this.length += lengthDiff;\n\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 } 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 \n this.$updating = false;\n this.updateMarkers();\n };\n \n this.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 \n this.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\n this.onCursorChange = function(event) {\n if (this.$updating || !this.session) 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 } else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n }; \n this.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 this.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}).call(PlaceHolder.prototype);\n\n\nexports.PlaceHolder = PlaceHolder;\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module) {\n\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\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 \n if (ctrl && useragent.isMac)\n button = ev.button;\n\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n \n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n \n if (button !== 0)\n return;\n\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\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function(e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n \n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n \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 } else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n } else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n \n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n \n editor.inVirtualSelectionMode = true;\n \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\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 } 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\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n \n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n\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 } else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n \n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead); \n else\n selection.moveToPosition(pos);\n \n screenCursor = {row: -1, column: -1};\n\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\n var onSelectionInterval = blockSelect;\n\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function() {onSelectionInterval();}, 20);\n\n return e.preventDefault();\n }\n}\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) {\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 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}];\n\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\nvar RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\n\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\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\n if (!range.cursor)\n range.cursor = range.end;\n\n var removed = this.rangeList.add(range);\n\n this.$onAddRange(range);\n\n if (removed.length)\n this.$onRemoveRange(removed);\n\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\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\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\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\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\n for (var i = removed.length; i--; ) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n\n this._signal(\"removeRange\", {ranges: removed});\n\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\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\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 } 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 \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\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\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n\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\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 } else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n } else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n\n if (startRow == endRow)\n includeEmptyLines = true;\n\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(\n this.session.screenToDocumentPosition(row, startColumn, startOffsetX),\n this.session.screenToDocumentPosition(row, endColumn, endOffsetX)\n );\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\n if (yBackwards)\n rectSel.reverse();\n\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\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\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n\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\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\n this.$onAddRange = function(e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onRemoveRange = function(e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onMultiSelect = function(e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onSingleSelect = function(e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\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 } else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n } else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n } else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\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 \n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n \n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n\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\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 \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 \n return result;\n };\n this.exitMultiSelectMode = function() {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\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 } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\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 \n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n\n var selection = this.multiSelect;\n\n if (!additive)\n selection.toSingleRange(ranges[0]);\n\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 \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\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\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 } else {\n var anchor = lead;\n }\n\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n } else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n } else {\n if (skip)\n var toRemove = range.cursor;\n }\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\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\n var words = [];\n for (var i = all.length; i--; ) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n\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\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\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 \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 \n if (fr < 0) fr = 0;\n if (lr >= max) 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 } else {\n sameRowRanges.forEach(function(r) {\n sel.substractPoint(r.cursor);\n });\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\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\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\n this.$reAlignText = function(lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n\n return lines.map(function(line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\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\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\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\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);\n\n\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\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\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\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\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n\n addAltCursorListeners(editor);\n}\n\nfunction addAltCursorListeners(editor){\n if (!editor.textInput) 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 } else if (altCursor) {\n reset();\n }\n }, editor);\n\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}\n\nexports.MultiSelect = MultiSelect;\n\n\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function(val) {\n MultiSelect(this);\n if (val) {\n this.on(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n } else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\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\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\n\nvar Range = require(\"../../range\").Range;\n\nvar FoldMode = exports.FoldMode = function() {};\n\n(function() {\n\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\n this.getFoldWidgetRange = function(session, foldStyle, row) {\n return null;\n };\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\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n\n if (level == -1)\n continue;\n\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\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\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n\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\n this.closingBracketBlock = function(session, bracket, row, column, typeRe) {\n var end = {row: row, column: column};\n var start = session.$findOpeningBracket(bracket, end);\n\n if (!start)\n return;\n\n start.column++;\n end.column--;\n\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\nexports.$id = \"ace/theme/textmate\";\n\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar dom = require(\"./lib/dom\");\n\nfunction 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 \n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n\n(function() {\n this.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 } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.$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 \n this.$onChangeEditor = function(e) {\n this.attach(e.editor);\n };\n \n this.attach = function(editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n\n if (this.editor == editor)\n return;\n\n this.detach();\n this.editor = editor;\n \n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n this.detach = function(e) {\n var editor = this.editor;\n if (!editor)\n return;\n \n this.editor = null;\n editor.widgetManager = null;\n \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\n this.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 } else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n \n this.updateOnChange = function(delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n \n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\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 } 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 \n this.$updateRows = function() {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) 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\n this.$registerLineWidget = function(w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n \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 \n this.session.lineWidgets[w.row] = w;\n return w;\n };\n \n this.addLineWidget = function(w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n \n if (!this.editor) return w;\n \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.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n \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 \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 \n this.session._emit(\"changeFold\", {data:{start:{row: w.row}}});\n \n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n \n this.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) try {\n w.editor.destroy();\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 } 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 \n this.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 \n this.onWidgetChanged = function(w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n \n this.measureWidgets = function(e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n \n if (!changedWidgets || !changedWidgets.length) return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el) continue;\n if (w.session != this.session) 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 \n w.h = w.el.offsetHeight;\n \n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\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 \n this.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 \n while (first > 0 && !lineWidgets[first])\n first--;\n \n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el) 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 \n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n \n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n \n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n } else {\n w.el.style.right = \"\";\n }\n }\n };\n \n}).call(LineWidgets.prototype);\n\n\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(require, exports, module) {\n\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\n\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n\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}\n\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n \n var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n \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 \n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n\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 \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}\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 \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 } 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 } else if (oldWidget) {\n return;\n } else {\n gutterAnno = {\n text: [\"Looks good!\"],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n \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 \n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n \n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"<br>\");\n \n el.appendChild(dom.createElement(\"div\"));\n \n var kb = function(_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return {command: \"null\"};\n }\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 \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 \n editor.session.widgetManager.addLineWidget(w);\n \n w.el.onmousedown = editor.focus.bind(editor);\n \n editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight});\n};\n\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/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"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\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\n\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\n\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\");\n\nexports.config = require(\"./config\");\nexports.require = require;\n\nif (typeof define === \"function\")\n exports.define = define;\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\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n\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 } else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n\n var doc = exports.createEditSession(value);\n\n var editor = new Editor(new Renderer(el), doc, options);\n\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode) env.textarea = oldNode;\n event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function() {\n event.removeListener(window, \"resize\", env.onResize);\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}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n window.ace[\"default\"] = window.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = window.ace;\n }\n });\n })();\n ","(function() {\n var context = this;\n\n (function() {\n (function() {\n var slice = [].slice;\n\n this.ActionCable = {\n INTERNAL: {\n \"message_types\": {\n \"welcome\": \"welcome\",\n \"ping\": \"ping\",\n \"confirmation\": \"confirm_subscription\",\n \"rejection\": \"reject_subscription\"\n },\n \"default_mount_path\": \"/cable\",\n \"protocols\": [\"actioncable-v1-json\", \"actioncable-unsupported\"]\n },\n WebSocket: window.WebSocket,\n logger: window.console,\n createConsumer: function(url) {\n var ref;\n if (url == null) {\n url = (ref = this.getConfig(\"url\")) != null ? ref : this.INTERNAL.default_mount_path;\n }\n return new ActionCable.Consumer(this.createWebSocketURL(url));\n },\n getConfig: function(name) {\n var element;\n element = document.head.querySelector(\"meta[name='action-cable-\" + name + \"']\");\n return element != null ? element.getAttribute(\"content\") : void 0;\n },\n createWebSocketURL: function(url) {\n var a;\n if (url && !/^wss?:/i.test(url)) {\n a = document.createElement(\"a\");\n a.href = url;\n a.href = a.href;\n a.protocol = a.protocol.replace(\"http\", \"ws\");\n return a.href;\n } else {\n return url;\n }\n },\n startDebugging: function() {\n return this.debugging = true;\n },\n stopDebugging: function() {\n return this.debugging = null;\n },\n log: function() {\n var messages, ref;\n messages = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n if (this.debugging) {\n messages.push(Date.now());\n return (ref = this.logger).log.apply(ref, [\"[ActionCable]\"].concat(slice.call(messages)));\n }\n }\n };\n\n }).call(this);\n }).call(context);\n\n var ActionCable = context.ActionCable;\n\n (function() {\n (function() {\n var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n ActionCable.ConnectionMonitor = (function() {\n var clamp, now, secondsSince;\n\n ConnectionMonitor.pollInterval = {\n min: 3,\n max: 30\n };\n\n ConnectionMonitor.staleThreshold = 6;\n\n function ConnectionMonitor(connection) {\n this.connection = connection;\n this.visibilityDidChange = bind(this.visibilityDidChange, this);\n this.reconnectAttempts = 0;\n }\n\n ConnectionMonitor.prototype.start = function() {\n if (!this.isRunning()) {\n this.startedAt = now();\n delete this.stoppedAt;\n this.startPolling();\n document.addEventListener(\"visibilitychange\", this.visibilityDidChange);\n return ActionCable.log(\"ConnectionMonitor started. pollInterval = \" + (this.getPollInterval()) + \" ms\");\n }\n };\n\n ConnectionMonitor.prototype.stop = function() {\n if (this.isRunning()) {\n this.stoppedAt = now();\n this.stopPolling();\n document.removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n return ActionCable.log(\"ConnectionMonitor stopped\");\n }\n };\n\n ConnectionMonitor.prototype.isRunning = function() {\n return (this.startedAt != null) && (this.stoppedAt == null);\n };\n\n ConnectionMonitor.prototype.recordPing = function() {\n return this.pingedAt = now();\n };\n\n ConnectionMonitor.prototype.recordConnect = function() {\n this.reconnectAttempts = 0;\n this.recordPing();\n delete this.disconnectedAt;\n return ActionCable.log(\"ConnectionMonitor recorded connect\");\n };\n\n ConnectionMonitor.prototype.recordDisconnect = function() {\n this.disconnectedAt = now();\n return ActionCable.log(\"ConnectionMonitor recorded disconnect\");\n };\n\n ConnectionMonitor.prototype.startPolling = function() {\n this.stopPolling();\n return this.poll();\n };\n\n ConnectionMonitor.prototype.stopPolling = function() {\n return clearTimeout(this.pollTimeout);\n };\n\n ConnectionMonitor.prototype.poll = function() {\n return this.pollTimeout = setTimeout((function(_this) {\n return function() {\n _this.reconnectIfStale();\n return _this.poll();\n };\n })(this), this.getPollInterval());\n };\n\n ConnectionMonitor.prototype.getPollInterval = function() {\n var interval, max, min, ref;\n ref = this.constructor.pollInterval, min = ref.min, max = ref.max;\n interval = 5 * Math.log(this.reconnectAttempts + 1);\n return Math.round(clamp(interval, min, max) * 1000);\n };\n\n ConnectionMonitor.prototype.reconnectIfStale = function() {\n if (this.connectionIsStale()) {\n ActionCable.log(\"ConnectionMonitor detected stale connection. reconnectAttempts = \" + this.reconnectAttempts + \", pollInterval = \" + (this.getPollInterval()) + \" ms, time disconnected = \" + (secondsSince(this.disconnectedAt)) + \" s, stale threshold = \" + this.constructor.staleThreshold + \" s\");\n this.reconnectAttempts++;\n if (this.disconnectedRecently()) {\n return ActionCable.log(\"ConnectionMonitor skipping reopening recent disconnect\");\n } else {\n ActionCable.log(\"ConnectionMonitor reopening\");\n return this.connection.reopen();\n }\n }\n };\n\n ConnectionMonitor.prototype.connectionIsStale = function() {\n var ref;\n return secondsSince((ref = this.pingedAt) != null ? ref : this.startedAt) > this.constructor.staleThreshold;\n };\n\n ConnectionMonitor.prototype.disconnectedRecently = function() {\n return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n };\n\n ConnectionMonitor.prototype.visibilityDidChange = function() {\n if (document.visibilityState === \"visible\") {\n return setTimeout((function(_this) {\n return function() {\n if (_this.connectionIsStale() || !_this.connection.isOpen()) {\n ActionCable.log(\"ConnectionMonitor reopening stale connection on visibilitychange. visbilityState = \" + document.visibilityState);\n return _this.connection.reopen();\n }\n };\n })(this), 200);\n }\n };\n\n now = function() {\n return new Date().getTime();\n };\n\n secondsSince = function(time) {\n return (now() - time) / 1000;\n };\n\n clamp = function(number, min, max) {\n return Math.max(min, Math.min(max, number));\n };\n\n return ConnectionMonitor;\n\n })();\n\n }).call(this);\n (function() {\n var i, message_types, protocols, ref, supportedProtocols, unsupportedProtocol,\n slice = [].slice,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n ref = ActionCable.INTERNAL, message_types = ref.message_types, protocols = ref.protocols;\n\n supportedProtocols = 2 <= protocols.length ? slice.call(protocols, 0, i = protocols.length - 1) : (i = 0, []), unsupportedProtocol = protocols[i++];\n\n ActionCable.Connection = (function() {\n Connection.reopenDelay = 500;\n\n function Connection(consumer) {\n this.consumer = consumer;\n this.open = bind(this.open, this);\n this.subscriptions = this.consumer.subscriptions;\n this.monitor = new ActionCable.ConnectionMonitor(this);\n this.disconnected = true;\n }\n\n Connection.prototype.send = function(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data));\n return true;\n } else {\n return false;\n }\n };\n\n Connection.prototype.open = function() {\n if (this.isActive()) {\n ActionCable.log(\"Attempted to open WebSocket, but existing socket is \" + (this.getState()));\n return false;\n } else {\n ActionCable.log(\"Opening WebSocket, current state is \" + (this.getState()) + \", subprotocols: \" + protocols);\n if (this.webSocket != null) {\n this.uninstallEventHandlers();\n }\n this.webSocket = new ActionCable.WebSocket(this.consumer.url, protocols);\n this.installEventHandlers();\n this.monitor.start();\n return true;\n }\n };\n\n Connection.prototype.close = function(arg) {\n var allowReconnect, ref1;\n allowReconnect = (arg != null ? arg : {\n allowReconnect: true\n }).allowReconnect;\n if (!allowReconnect) {\n this.monitor.stop();\n }\n if (this.isActive()) {\n return (ref1 = this.webSocket) != null ? ref1.close() : void 0;\n }\n };\n\n Connection.prototype.reopen = function() {\n var error;\n ActionCable.log(\"Reopening WebSocket, current state is \" + (this.getState()));\n if (this.isActive()) {\n try {\n return this.close();\n } catch (error1) {\n error = error1;\n return ActionCable.log(\"Failed to reopen WebSocket\", error);\n } finally {\n ActionCable.log(\"Reopening WebSocket in \" + this.constructor.reopenDelay + \"ms\");\n setTimeout(this.open, this.constructor.reopenDelay);\n }\n } else {\n return this.open();\n }\n };\n\n Connection.prototype.getProtocol = function() {\n var ref1;\n return (ref1 = this.webSocket) != null ? ref1.protocol : void 0;\n };\n\n Connection.prototype.isOpen = function() {\n return this.isState(\"open\");\n };\n\n Connection.prototype.isActive = function() {\n return this.isState(\"open\", \"connecting\");\n };\n\n Connection.prototype.isProtocolSupported = function() {\n var ref1;\n return ref1 = this.getProtocol(), indexOf.call(supportedProtocols, ref1) >= 0;\n };\n\n Connection.prototype.isState = function() {\n var ref1, states;\n states = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return ref1 = this.getState(), indexOf.call(states, ref1) >= 0;\n };\n\n Connection.prototype.getState = function() {\n var ref1, state, value;\n for (state in WebSocket) {\n value = WebSocket[state];\n if (value === ((ref1 = this.webSocket) != null ? ref1.readyState : void 0)) {\n return state.toLowerCase();\n }\n }\n return null;\n };\n\n Connection.prototype.installEventHandlers = function() {\n var eventName, handler;\n for (eventName in this.events) {\n handler = this.events[eventName].bind(this);\n this.webSocket[\"on\" + eventName] = handler;\n }\n };\n\n Connection.prototype.uninstallEventHandlers = function() {\n var eventName;\n for (eventName in this.events) {\n this.webSocket[\"on\" + eventName] = function() {};\n }\n };\n\n Connection.prototype.events = {\n message: function(event) {\n var identifier, message, ref1, type;\n if (!this.isProtocolSupported()) {\n return;\n }\n ref1 = JSON.parse(event.data), identifier = ref1.identifier, message = ref1.message, type = ref1.type;\n switch (type) {\n case message_types.welcome:\n this.monitor.recordConnect();\n return this.subscriptions.reload();\n case message_types.ping:\n return this.monitor.recordPing();\n case message_types.confirmation:\n return this.subscriptions.notify(identifier, \"connected\");\n case message_types.rejection:\n return this.subscriptions.reject(identifier);\n default:\n return this.subscriptions.notify(identifier, \"received\", message);\n }\n },\n open: function() {\n ActionCable.log(\"WebSocket onopen event, using '\" + (this.getProtocol()) + \"' subprotocol\");\n this.disconnected = false;\n if (!this.isProtocolSupported()) {\n ActionCable.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n return this.close({\n allowReconnect: false\n });\n }\n },\n close: function(event) {\n ActionCable.log(\"WebSocket onclose event\");\n if (this.disconnected) {\n return;\n }\n this.disconnected = true;\n this.monitor.recordDisconnect();\n return this.subscriptions.notifyAll(\"disconnected\", {\n willAttemptReconnect: this.monitor.isRunning()\n });\n },\n error: function() {\n return ActionCable.log(\"WebSocket onerror event\");\n }\n };\n\n return Connection;\n\n })();\n\n }).call(this);\n (function() {\n var slice = [].slice;\n\n ActionCable.Subscriptions = (function() {\n function Subscriptions(consumer) {\n this.consumer = consumer;\n this.subscriptions = [];\n }\n\n Subscriptions.prototype.create = function(channelName, mixin) {\n var channel, params, subscription;\n channel = channelName;\n params = typeof channel === \"object\" ? channel : {\n channel: channel\n };\n subscription = new ActionCable.Subscription(this.consumer, params, mixin);\n return this.add(subscription);\n };\n\n Subscriptions.prototype.add = function(subscription) {\n this.subscriptions.push(subscription);\n this.consumer.ensureActiveConnection();\n this.notify(subscription, \"initialized\");\n this.sendCommand(subscription, \"subscribe\");\n return subscription;\n };\n\n Subscriptions.prototype.remove = function(subscription) {\n this.forget(subscription);\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\");\n }\n return subscription;\n };\n\n Subscriptions.prototype.reject = function(identifier) {\n var i, len, ref, results, subscription;\n ref = this.findAll(identifier);\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n subscription = ref[i];\n this.forget(subscription);\n this.notify(subscription, \"rejected\");\n results.push(subscription);\n }\n return results;\n };\n\n Subscriptions.prototype.forget = function(subscription) {\n var s;\n this.subscriptions = (function() {\n var i, len, ref, results;\n ref = this.subscriptions;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n s = ref[i];\n if (s !== subscription) {\n results.push(s);\n }\n }\n return results;\n }).call(this);\n return subscription;\n };\n\n Subscriptions.prototype.findAll = function(identifier) {\n var i, len, ref, results, s;\n ref = this.subscriptions;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n s = ref[i];\n if (s.identifier === identifier) {\n results.push(s);\n }\n }\n return results;\n };\n\n Subscriptions.prototype.reload = function() {\n var i, len, ref, results, subscription;\n ref = this.subscriptions;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n subscription = ref[i];\n results.push(this.sendCommand(subscription, \"subscribe\"));\n }\n return results;\n };\n\n Subscriptions.prototype.notifyAll = function() {\n var args, callbackName, i, len, ref, results, subscription;\n callbackName = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];\n ref = this.subscriptions;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n subscription = ref[i];\n results.push(this.notify.apply(this, [subscription, callbackName].concat(slice.call(args))));\n }\n return results;\n };\n\n Subscriptions.prototype.notify = function() {\n var args, callbackName, i, len, results, subscription, subscriptions;\n subscription = arguments[0], callbackName = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : [];\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription);\n } else {\n subscriptions = [subscription];\n }\n results = [];\n for (i = 0, len = subscriptions.length; i < len; i++) {\n subscription = subscriptions[i];\n results.push(typeof subscription[callbackName] === \"function\" ? subscription[callbackName].apply(subscription, args) : void 0);\n }\n return results;\n };\n\n Subscriptions.prototype.sendCommand = function(subscription, command) {\n var identifier;\n identifier = subscription.identifier;\n return this.consumer.send({\n command: command,\n identifier: identifier\n });\n };\n\n return Subscriptions;\n\n })();\n\n }).call(this);\n (function() {\n ActionCable.Subscription = (function() {\n var extend;\n\n function Subscription(consumer, params, mixin) {\n this.consumer = consumer;\n if (params == null) {\n params = {};\n }\n this.identifier = JSON.stringify(params);\n extend(this, mixin);\n }\n\n Subscription.prototype.perform = function(action, data) {\n if (data == null) {\n data = {};\n }\n data.action = action;\n return this.send(data);\n };\n\n Subscription.prototype.send = function(data) {\n return this.consumer.send({\n command: \"message\",\n identifier: this.identifier,\n data: JSON.stringify(data)\n });\n };\n\n Subscription.prototype.unsubscribe = function() {\n return this.consumer.subscriptions.remove(this);\n };\n\n extend = function(object, properties) {\n var key, value;\n if (properties != null) {\n for (key in properties) {\n value = properties[key];\n object[key] = value;\n }\n }\n return object;\n };\n\n return Subscription;\n\n })();\n\n }).call(this);\n (function() {\n ActionCable.Consumer = (function() {\n function Consumer(url) {\n this.url = url;\n this.subscriptions = new ActionCable.Subscriptions(this);\n this.connection = new ActionCable.Connection(this);\n }\n\n Consumer.prototype.send = function(data) {\n return this.connection.send(data);\n };\n\n Consumer.prototype.connect = function() {\n return this.connection.open();\n };\n\n Consumer.prototype.disconnect = function() {\n return this.connection.close({\n allowReconnect: false\n });\n };\n\n Consumer.prototype.ensureActiveConnection = function() {\n if (!this.connection.isActive()) {\n return this.connection.open();\n }\n };\n\n return Consumer;\n\n })();\n\n }).call(this);\n }).call(this);\n\n if (typeof module === \"object\" && module.exports) {\n module.exports = ActionCable;\n } else if (typeof define === \"function\" && define.amd) {\n define(ActionCable);\n }\n}).call(this);\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 createError = require('../core/createError');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\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)) {\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 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(createError('Request aborted', config, 'ECONNABORTED', 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(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n var transitional = config.transitional || defaults.transitional;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(\n timeoutErrorMessage,\n config,\n transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',\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 Cancel('canceled') : 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 // 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.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.VERSION = require('./env/data').version;\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\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\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 Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` 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\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 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(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\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 return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\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 Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\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 enhanceError = require('./enhanceError');\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 {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar Cancel = require('../cancel/Cancel');\n\n/**\n * Throws a `Cancel` 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 Cancel('canceled');\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\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.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 return error;\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 '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 createError = require('./createError');\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(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\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 enhanceError = require('./core/enhanceError');\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: {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n },\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 if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {\n setContentTypeIfUnset(headers, 'application/json');\n return stringifySafely(data);\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 enhanceError(e, this, 'E_JSON_PARSE');\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 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","module.exports = {\n \"version\": \"0.22.0\"\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\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 (typeof payload === 'object') && (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","'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\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 VERSION = require('../env/data').version;\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 Error(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')));\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 TypeError('options must be an object');\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 TypeError('option ' + opt + ' must be ' + result);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw Error('Unknown option ' + opt);\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/**\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 toString.call(val) === '[object Array]';\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 * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\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) && (val.buffer instanceof ArrayBuffer);\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 (toString.call(val) !== '[object 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 * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\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 URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\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\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};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar redefineAll = require('../internals/redefine-all');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar hasOwn = require('../internals/has-own-property');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar splice = uncurryThis([].splice);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (store) {\n return store.frozen || (store.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n return find(store.entries, function (it) {\n return it[0] === key;\n });\n};\n\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.entries.push([key, value]);\n },\n 'delete': function (key) {\n var index = findIndex(this.entries, function (it) {\n return it[0] === key;\n });\n if (~index) splice(this.entries, index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n id: id++,\n frozen: undefined\n });\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var data = getWeakData(anObject(key), true);\n if (data === true) uncaughtFrozenStore(state).set(key, value);\n else data[state.id] = value;\n return that;\n };\n\n redefineAll(Prototype, {\n // `{ WeakMap, WeakSet }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.delete\n // https://tc39.es/ecma262/#sec-weakset.prototype.delete\n 'delete': function (key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n return data && hasOwn(data, state.id) && delete data[state.id];\n },\n // `{ WeakMap, WeakSet }.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.has\n // https://tc39.es/ecma262/#sec-weakset.prototype.has\n has: function has(key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).has(key);\n return data && hasOwn(data, state.id);\n }\n });\n\n redefineAll(Prototype, IS_MAP ? {\n // `WeakMap.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.get\n get: function get(key) {\n var state = getInternalState(this);\n if (isObject(key)) {\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).get(key);\n return data ? data[state.id] : undefined;\n }\n },\n // `WeakMap.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.set\n set: function set(key, value) {\n return define(this, key, value);\n }\n } : {\n // `WeakSet.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-weakset.prototype.add\n add: function add(value) {\n return define(this, value, true);\n }\n });\n\n return Constructor;\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","var 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-x/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line unicorn/relative-url-style -- required for testing\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\n\nvar RangeError = global.RangeError;\nvar exec = uncurryThis(regexSeparators.exec);\nvar floor = Math.floor;\nvar fromCharCode = String.fromCharCode;\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar toLowerCase = uncurryThis(''.toLowerCase);\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = charCodeAt(string, counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = charCodeAt(string, counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n push(output, value);\n counter--;\n }\n } else {\n push(output, value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n while (delta > baseMinusTMin * tMax >> 1) {\n delta = floor(delta / baseMinusTMin);\n k += base;\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n push(output, fromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n push(output, delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n var k = base;\n while (true) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n k += base;\n }\n\n push(output, fromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n handledCPCount++;\n }\n }\n\n delta++;\n n++;\n }\n return join(output, '');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = split(replace(toLowerCase(input), regexSeparators, '\\u002E'), '.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label);\n }\n return join(encoded, '.');\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n","var $ = require('../internals/export');\nvar isIntegralNumber = require('../internals/is-integral-number');\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n isInteger: isIntegralNumber\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar proxyAccessor = require('../internals/proxy-accessor');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = global.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar SyntaxError = global.SyntaxError;\nvar exec = uncurryThis(RegExpPrototype.exec);\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n// TODO: Use only propper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar MISSED_STICKY = stickyHelpers.MISSED_STICKY;\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar BASE_FORCED = DESCRIPTORS &&\n (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\n }));\n\nvar handleDotAll = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var brackets = false;\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n result += chr + charAt(string, ++index);\n continue;\n }\n if (!brackets && chr === '.') {\n result += '[\\\\s\\\\S]';\n } else {\n if (chr === '[') {\n brackets = true;\n } else if (chr === ']') {\n brackets = false;\n } result += chr;\n }\n } return result;\n};\n\nvar handleNCG = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var named = [];\n var names = {};\n var brackets = false;\n var ncg = false;\n var groupid = 0;\n var groupname = '';\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n chr = chr + charAt(string, ++index);\n } else if (chr === ']') {\n brackets = false;\n } else if (!brackets) switch (true) {\n case chr === '[':\n brackets = true;\n break;\n case chr === '(':\n if (exec(IS_NCG, stringSlice(string, index + 1))) {\n index += 2;\n ncg = true;\n }\n result += chr;\n groupid++;\n continue;\n case chr === '>' && ncg:\n if (groupname === '' || hasOwn(names, groupname)) {\n throw new SyntaxError('Invalid capture group name');\n }\n names[groupname] = true;\n named[named.length] = [groupname, groupid];\n ncg = false;\n groupname = '';\n continue;\n }\n if (ncg) groupname += chr;\n else result += chr;\n } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_FORCED)) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var groups = [];\n var rawPattern = pattern;\n var rawFlags, dotAll, sticky, handled, result, state;\n\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n return pattern;\n }\n\n if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {\n pattern = pattern.source;\n if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);\n }\n\n pattern = pattern === undefined ? '' : toString(pattern);\n flags = flags === undefined ? '' : toString(flags);\n rawPattern = pattern;\n\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n dotAll = !!flags && stringIndexOf(flags, 's') > -1;\n if (dotAll) flags = replace(flags, /s/g, '');\n }\n\n rawFlags = flags;\n\n if (MISSED_STICKY && 'sticky' in re1) {\n sticky = !!flags && stringIndexOf(flags, 'y') > -1;\n if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');\n }\n\n if (UNSUPPORTED_NCG) {\n handled = handleNCG(pattern);\n pattern = handled[0];\n groups = handled[1];\n }\n\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n if (dotAll || sticky || groups.length) {\n state = enforceInternalState(result);\n if (dotAll) {\n state.dotAll = true;\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n }\n if (sticky) state.sticky = true;\n if (groups.length) state.groups = groups;\n }\n\n if (pattern !== rawPattern) try {\n // fails in old engines, but we have no alternatives for unsupported regex syntax\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n } catch (error) { /* empty */ }\n\n return result;\n };\n\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]);\n }\n\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n redefine(global, 'RegExp', RegExpWrapper);\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar classof = require('../internals/classof-raw');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getInternalState = require('../internals/internal-state').get;\n\nvar RegExpPrototype = RegExp.prototype;\nvar TypeError = global.TypeError;\n\n// `RegExp.prototype.dotAll` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.dotall\nif (DESCRIPTORS && UNSUPPORTED_DOT_ALL) {\n defineProperty(RegExpPrototype, 'dotAll', {\n configurable: true,\n get: function () {\n if (this === RegExpPrototype) return undefined;\n // We can't use InternalStateModule.getterFor because\n // we don't add metadata for regexps created by a literal.\n if (classof(this) === 'RegExp') {\n return !!getInternalState(this).dotAll;\n }\n throw TypeError('Incompatible receiver, RegExp required');\n }\n });\n}\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar MISSED_STICKY = require('../internals/regexp-sticky-helpers').MISSED_STICKY;\nvar classof = require('../internals/classof-raw');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getInternalState = require('../internals/internal-state').get;\n\nvar RegExpPrototype = RegExp.prototype;\nvar TypeError = global.TypeError;\n\n// `RegExp.prototype.sticky` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.sticky\nif (DESCRIPTORS && MISSED_STICKY) {\n defineProperty(RegExpPrototype, 'sticky', {\n configurable: true,\n get: function () {\n if (this === RegExpPrototype) return undefined;\n // We can't use InternalStateModule.getterFor because\n // we don't add metadata for regexps created by a literal.\n if (classof(this) === 'RegExp') {\n return !!getInternalState(this).sticky;\n }\n throw TypeError('Incompatible receiver, RegExp required');\n }\n });\n}\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.set.constructor');\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\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 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 = global.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 (searchValue != null) {\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 global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar redefineAll = require('../internals/redefine-all');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar isExtensible = require('../internals/object-is-extensible');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar NATIVE_WEAK_MAP = require('../internals/native-weak-map');\n\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n return function WeakMap() {\n return init(this, arguments.length ? arguments[0] : undefined);\n };\n};\n\n// `WeakMap` constructor\n// https://tc39.es/ecma262/#sec-weakmap-constructor\nvar $WeakMap = collection('WeakMap', wrapper, collectionWeak);\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n InternalMetadataModule.enable();\n var WeakMapPrototype = $WeakMap.prototype;\n var nativeDelete = uncurryThis(WeakMapPrototype['delete']);\n var nativeHas = uncurryThis(WeakMapPrototype.has);\n var nativeGet = uncurryThis(WeakMapPrototype.get);\n var nativeSet = uncurryThis(WeakMapPrototype.set);\n redefineAll(WeakMapPrototype, {\n 'delete': function (key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeDelete(this, key) || state.frozen['delete'](key);\n } return nativeDelete(this, key);\n },\n has: function has(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) || state.frozen.has(key);\n } return nativeHas(this, key);\n },\n get: function get(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key);\n } return nativeGet(this, key);\n },\n set: function set(key, value) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value);\n } else nativeSet(this, key, value);\n return this;\n }\n });\n}\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.weak-map.constructor');\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar $toString = require('../internals/to-string');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arraySort = require('../internals/array-sort');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Avoid NodeJS experimental warning\nvar safeGetBuiltIn = function (name) {\n if (!DESCRIPTORS) return global[name];\n var descriptor = getOwnPropertyDescriptor(global, name);\n return descriptor && descriptor.value;\n};\n\nvar nativeFetch = safeGetBuiltIn('fetch');\nvar NativeRequest = safeGetBuiltIn('Request');\nvar Headers = safeGetBuiltIn('Headers');\nvar RequestPrototype = NativeRequest && NativeRequest.prototype;\nvar HeadersPrototype = Headers && Headers.prototype;\nvar RegExp = global.RegExp;\nvar TypeError = global.TypeError;\nvar decodeURIComponent = global.decodeURIComponent;\nvar encodeURIComponent = global.encodeURIComponent;\nvar charAt = uncurryThis(''.charAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar splice = uncurryThis([].splice);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n try {\n return decodeURIComponent(sequence);\n } catch (error) {\n return sequence;\n }\n};\n\nvar deserialize = function (it) {\n var result = replace(it, plus, ' ');\n var bytes = 4;\n try {\n return decodeURIComponent(result);\n } catch (error) {\n while (bytes) {\n result = replace(result, percentSequence(bytes--), percentDecode);\n }\n return result;\n }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replacements = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n};\n\nvar replacer = function (match) {\n return replacements[match];\n};\n\nvar serialize = function (it) {\n return replace(encodeURIComponent(it), find, replacer);\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n setInternalState(this, {\n type: URL_SEARCH_PARAMS_ITERATOR,\n iterator: getIterator(getInternalParamsState(params).entries),\n kind: kind\n });\n}, 'Iterator', function next() {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var step = state.iterator.next();\n var entry = step.value;\n if (!step.done) {\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n } return step;\n}, true);\n\nvar URLSearchParamsState = function (init) {\n this.entries = [];\n this.url = null;\n\n if (init !== undefined) {\n if (isObject(init)) this.parseObject(init);\n else this.parseQuery(typeof init == 'string' ? charAt(init, 0) === '?' ? stringSlice(init, 1) : init : $toString(init));\n }\n};\n\nURLSearchParamsState.prototype = {\n type: URL_SEARCH_PARAMS,\n bindURL: function (url) {\n this.url = url;\n this.update();\n },\n parseObject: function (object) {\n var iteratorMethod = getIteratorMethod(object);\n var iterator, next, step, entryIterator, entryNext, first, second;\n\n if (iteratorMethod) {\n iterator = getIterator(object, iteratorMethod);\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n entryIterator = getIterator(anObject(step.value));\n entryNext = entryIterator.next;\n if (\n (first = call(entryNext, entryIterator)).done ||\n (second = call(entryNext, entryIterator)).done ||\n !call(entryNext, entryIterator).done\n ) throw TypeError('Expected sequence with length 2');\n push(this.entries, { key: $toString(first.value), value: $toString(second.value) });\n }\n } else for (var key in object) if (hasOwn(object, key)) {\n push(this.entries, { key: key, value: $toString(object[key]) });\n }\n },\n parseQuery: function (query) {\n if (query) {\n var attributes = split(query, '&');\n var index = 0;\n var attribute, entry;\n while (index < attributes.length) {\n attribute = attributes[index++];\n if (attribute.length) {\n entry = split(attribute, '=');\n push(this.entries, {\n key: deserialize(shift(entry)),\n value: deserialize(join(entry, '='))\n });\n }\n }\n }\n },\n serialize: function () {\n var entries = this.entries;\n var result = [];\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n push(result, serialize(entry.key) + '=' + serialize(entry.value));\n } return join(result, '&');\n },\n update: function () {\n this.entries.length = 0;\n this.parseQuery(this.url.query);\n },\n updateURL: function () {\n if (this.url) this.url.update();\n }\n};\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n anInstance(this, URLSearchParamsPrototype);\n var init = arguments.length > 0 ? arguments[0] : undefined;\n setInternalState(this, new URLSearchParamsState(init));\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n // `URLSearchParams.prototype.append` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n append: function append(name, value) {\n validateArgumentsLength(arguments.length, 2);\n var state = getInternalParamsState(this);\n push(state.entries, { key: $toString(name), value: $toString(value) });\n state.updateURL();\n },\n // `URLSearchParams.prototype.delete` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n 'delete': function (name) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var key = $toString(name);\n var index = 0;\n while (index < entries.length) {\n if (entries[index].key === key) splice(entries, index, 1);\n else index++;\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.get` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n get: function get(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) return entries[index].value;\n }\n return null;\n },\n // `URLSearchParams.prototype.getAll` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n getAll: function getAll(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var result = [];\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) push(result, entries[index].value);\n }\n return result;\n },\n // `URLSearchParams.prototype.has` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n has: function has(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var index = 0;\n while (index < entries.length) {\n if (entries[index++].key === key) return true;\n }\n return false;\n },\n // `URLSearchParams.prototype.set` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n set: function set(name, value) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var found = false;\n var key = $toString(name);\n var val = $toString(value);\n var index = 0;\n var entry;\n for (; index < entries.length; index++) {\n entry = entries[index];\n if (entry.key === key) {\n if (found) splice(entries, index--, 1);\n else {\n found = true;\n entry.value = val;\n }\n }\n }\n if (!found) push(entries, { key: key, value: val });\n state.updateURL();\n },\n // `URLSearchParams.prototype.sort` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n sort: function sort() {\n var state = getInternalParamsState(this);\n arraySort(state.entries, function (a, b) {\n return a.key > b.key ? 1 : -1;\n });\n state.updateURL();\n },\n // `URLSearchParams.prototype.forEach` method\n forEach: function forEach(callback /* , thisArg */) {\n var entries = getInternalParamsState(this).entries;\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined);\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n boundFunction(entry.value, entry.key, this);\n }\n },\n // `URLSearchParams.prototype.keys` method\n keys: function keys() {\n return new URLSearchParamsIterator(this, 'keys');\n },\n // `URLSearchParams.prototype.values` method\n values: function values() {\n return new URLSearchParamsIterator(this, 'values');\n },\n // `URLSearchParams.prototype.entries` method\n entries: function entries() {\n return new URLSearchParamsIterator(this, 'entries');\n }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: 'entries' });\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n return getInternalParamsState(this).serialize();\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`\nif (!USE_NATIVE_URL && isCallable(Headers)) {\n var headersHas = uncurryThis(HeadersPrototype.has);\n var headersSet = uncurryThis(HeadersPrototype.set);\n\n var wrapRequestOptions = function (init) {\n if (isObject(init)) {\n var body = init.body;\n var headers;\n if (classof(body) === URL_SEARCH_PARAMS) {\n headers = init.headers ? new Headers(init.headers) : new Headers();\n if (!headersHas(headers, 'content-type')) {\n headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n return create(init, {\n body: createPropertyDescriptor(0, $toString(body)),\n headers: createPropertyDescriptor(0, headers)\n });\n }\n } return init;\n };\n\n if (isCallable(nativeFetch)) {\n $({ global: true, enumerable: true, noTargetGet: true, forced: true }, {\n fetch: function fetch(input /* , init */) {\n return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\n }\n });\n }\n\n if (isCallable(NativeRequest)) {\n var RequestConstructor = function Request(input /* , init */) {\n anInstance(this, RequestPrototype);\n return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\n };\n\n RequestPrototype.constructor = RequestConstructor;\n RequestConstructor.prototype = RequestPrototype;\n\n $({ global: true, forced: true, noTargetGet: true }, {\n Request: RequestConstructor\n });\n }\n}\n\nmodule.exports = {\n URLSearchParams: URLSearchParamsConstructor,\n getState: getInternalParamsState\n};\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/web.url-search-params.constructor');\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperties = require('../internals/object-define-properties').f;\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has-own-property');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar arraySlice = require('../internals/array-slice-simple');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar $toString = require('../internals/to-string');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar URLSearchParamsModule = require('../modules/web.url-search-params.constructor');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\n\nvar NativeURL = global.URL;\nvar TypeError = global.TypeError;\nvar parseInt = global.parseInt;\nvar floor = Math.floor;\nvar pow = Math.pow;\nvar charAt = uncurryThis(''.charAt);\nvar exec = uncurryThis(/./.exec);\nvar join = uncurryThis([].join);\nvar numberToString = uncurryThis(1.0.toString);\nvar pop = uncurryThis([].pop);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\nvar toLowerCase = uncurryThis(''.toLowerCase);\nvar unshift = uncurryThis([].unshift);\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[a-z]/i;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.a-z]/i;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\da-f]+$/i;\n/* eslint-disable regexp/no-control-character -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u0020]+|[\\u0000-\\u0020]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\n\\r]/g;\n/* eslint-enable regexp/no-control-character -- safe */\nvar EOF;\n\n// https://url.spec.whatwg.org/#ipv4-number-parser\nvar parseIPv4 = function (input) {\n var parts = split(input, '.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.length--;\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && charAt(part, 0) == '0') {\n radix = exec(HEX_START, part) ? 16 : 8;\n part = stringSlice(part, radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;\n number = parseInt(part, radix);\n }\n push(numbers, number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = pop(numbers);\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// https://url.spec.whatwg.org/#concept-ipv6-parser\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var chr = function () {\n return charAt(input, pointer);\n };\n\n if (chr() == ':') {\n if (charAt(input, 1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (chr()) {\n if (pieceIndex == 8) return;\n if (chr() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && exec(HEX, chr())) {\n value = value * 16 + parseInt(chr(), 16);\n pointer++;\n length++;\n }\n if (chr() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (chr()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (chr() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!exec(DIGIT, chr())) return;\n while (exec(DIGIT, chr())) {\n number = parseInt(chr(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (chr() == ':') {\n pointer++;\n if (!chr()) return;\n } else if (chr()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\n// https://url.spec.whatwg.org/#host-serializing\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n unshift(result, host % 256);\n host = floor(host / 256);\n } return join(result, '.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += numberToString(host[index], 16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (chr, set) {\n var code = codeAt(chr, 0);\n return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);\n};\n\n// https://url.spec.whatwg.org/#special-scheme\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\n// https://url.spec.whatwg.org/#windows-drive-letter\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && exec(ALPHA, charAt(string, 0))\n && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));\n};\n\n// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (\n string.length == 2 ||\n ((third = charAt(string, 2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\n// https://url.spec.whatwg.org/#single-dot-path-segment\nvar isSingleDot = function (segment) {\n return segment === '.' || toLowerCase(segment) === '%2e';\n};\n\n// https://url.spec.whatwg.org/#double-dot-path-segment\nvar isDoubleDot = function (segment) {\n segment = toLowerCase(segment);\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\nvar URLState = function (url, isBase, base) {\n var urlString = $toString(url);\n var baseState, failure, searchParams;\n if (isBase) {\n failure = this.parse(urlString);\n if (failure) throw TypeError(failure);\n this.searchParams = null;\n } else {\n if (base !== undefined) baseState = new URLState(base, true);\n failure = this.parse(urlString, null, baseState);\n if (failure) throw TypeError(failure);\n searchParams = getInternalSearchParamsState(new URLSearchParams());\n searchParams.bindURL(this);\n this.searchParams = searchParams;\n }\n};\n\nURLState.prototype = {\n type: 'URL',\n // https://url.spec.whatwg.org/#url-parsing\n // eslint-disable-next-line max-statements -- TODO\n parse: function (input, stateOverride, base) {\n var url = this;\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, chr, bufferCodePoints, failure;\n\n input = $toString(input);\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = replace(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = replace(input, TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n chr = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (chr && exec(ALPHA, chr)) {\n buffer += toLowerCase(chr);\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {\n buffer += toLowerCase(chr);\n } else if (chr == ':') {\n if (stateOverride && (\n (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||\n (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (url.isSpecial() && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (url.isSpecial()) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n push(url.path, '');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && chr == '#') {\n url.scheme = base.scheme;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (chr == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (chr == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (chr == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '/' || (chr == '\\\\' && url.isSpecial())) {\n state = RELATIVE_SLASH;\n } else if (chr == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.path.length--;\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (url.isSpecial() && (chr == '/' || chr == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (chr == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (chr != '/' && chr != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (chr == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += chr;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (chr == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (url.isSpecial() && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (chr == '[') seenBracket = true;\n else if (chr == ']') seenBracket = false;\n buffer += chr;\n } break;\n\n case PORT:\n if (exec(DIGIT, chr)) {\n buffer += chr;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial()) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (chr == '/' || chr == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (chr == EOF) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '?') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.shortenPath();\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (chr == '/' || chr == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (chr == EOF || chr == '/' || chr == '\\\\' || chr == '?' || chr == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = url.parseHost(buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += chr;\n break;\n\n case PATH_START:\n if (url.isSpecial()) {\n state = PATH;\n if (chr != '/' && chr != '\\\\') continue;\n } else if (!stateOverride && chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n state = PATH;\n if (chr != '/') continue;\n } break;\n\n case PATH:\n if (\n chr == EOF || chr == '/' ||\n (chr == '\\\\' && url.isSpecial()) ||\n (!stateOverride && (chr == '?' || chr == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n url.shortenPath();\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else if (isSingleDot(buffer)) {\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter\n }\n push(url.path, buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n shift(url.path);\n }\n }\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(chr, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n if (chr == \"'\" && url.isSpecial()) url.query += '%27';\n else if (chr == '#') url.query += '%23';\n else url.query += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n },\n // https://url.spec.whatwg.org/#host-parsing\n parseHost: function (input) {\n var result, codePoints, index;\n if (charAt(input, 0) == '[') {\n if (charAt(input, input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(stringSlice(input, 1, -1));\n if (!result) return INVALID_HOST;\n this.host = result;\n // opaque host\n } else if (!this.isSpecial()) {\n if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n this.host = result;\n } else {\n input = toASCII(input);\n if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n this.host = result;\n }\n },\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\n cannotHaveUsernamePasswordPort: function () {\n return !this.host || this.cannotBeABaseURL || this.scheme == 'file';\n },\n // https://url.spec.whatwg.org/#include-credentials\n includesCredentials: function () {\n return this.username != '' || this.password != '';\n },\n // https://url.spec.whatwg.org/#is-special\n isSpecial: function () {\n return hasOwn(specialSchemes, this.scheme);\n },\n // https://url.spec.whatwg.org/#shorten-a-urls-path\n shortenPath: function () {\n var path = this.path;\n var pathSize = path.length;\n if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.length--;\n }\n },\n // https://url.spec.whatwg.org/#concept-url-serializer\n serialize: function () {\n var url = this;\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (url.includesCredentials()) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n },\n // https://url.spec.whatwg.org/#dom-url-href\n setHref: function (href) {\n var failure = this.parse(href);\n if (failure) throw TypeError(failure);\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-origin\n getOrigin: function () {\n var scheme = this.scheme;\n var port = this.port;\n if (scheme == 'blob') try {\n return new URLConstructor(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !this.isSpecial()) return 'null';\n return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');\n },\n // https://url.spec.whatwg.org/#dom-url-protocol\n getProtocol: function () {\n return this.scheme + ':';\n },\n setProtocol: function (protocol) {\n this.parse($toString(protocol) + ':', SCHEME_START);\n },\n // https://url.spec.whatwg.org/#dom-url-username\n getUsername: function () {\n return this.username;\n },\n setUsername: function (username) {\n var codePoints = arrayFrom($toString(username));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-password\n getPassword: function () {\n return this.password;\n },\n setPassword: function (password) {\n var codePoints = arrayFrom($toString(password));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-host\n getHost: function () {\n var host = this.host;\n var port = this.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n },\n setHost: function (host) {\n if (this.cannotBeABaseURL) return;\n this.parse(host, HOST);\n },\n // https://url.spec.whatwg.org/#dom-url-hostname\n getHostname: function () {\n var host = this.host;\n return host === null ? '' : serializeHost(host);\n },\n setHostname: function (hostname) {\n if (this.cannotBeABaseURL) return;\n this.parse(hostname, HOSTNAME);\n },\n // https://url.spec.whatwg.org/#dom-url-port\n getPort: function () {\n var port = this.port;\n return port === null ? '' : $toString(port);\n },\n setPort: function (port) {\n if (this.cannotHaveUsernamePasswordPort()) return;\n port = $toString(port);\n if (port == '') this.port = null;\n else this.parse(port, PORT);\n },\n // https://url.spec.whatwg.org/#dom-url-pathname\n getPathname: function () {\n var path = this.path;\n return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n },\n setPathname: function (pathname) {\n if (this.cannotBeABaseURL) return;\n this.path = [];\n this.parse(pathname, PATH_START);\n },\n // https://url.spec.whatwg.org/#dom-url-search\n getSearch: function () {\n var query = this.query;\n return query ? '?' + query : '';\n },\n setSearch: function (search) {\n search = $toString(search);\n if (search == '') {\n this.query = null;\n } else {\n if ('?' == charAt(search, 0)) search = stringSlice(search, 1);\n this.query = '';\n this.parse(search, QUERY);\n }\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-searchparams\n getSearchParams: function () {\n return this.searchParams.facade;\n },\n // https://url.spec.whatwg.org/#dom-url-hash\n getHash: function () {\n var fragment = this.fragment;\n return fragment ? '#' + fragment : '';\n },\n setHash: function (hash) {\n hash = $toString(hash);\n if (hash == '') {\n this.fragment = null;\n return;\n }\n if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);\n this.fragment = '';\n this.parse(hash, FRAGMENT);\n },\n update: function () {\n this.query = this.searchParams.serialize() || null;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLPrototype);\n var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined;\n var state = setInternalState(that, new URLState(url, false, base));\n if (!DESCRIPTORS) {\n that.href = state.serialize();\n that.origin = state.getOrigin();\n that.protocol = state.getProtocol();\n that.username = state.getUsername();\n that.password = state.getPassword();\n that.host = state.getHost();\n that.hostname = state.getHostname();\n that.port = state.getPort();\n that.pathname = state.getPathname();\n that.search = state.getSearch();\n that.searchParams = state.getSearchParams();\n that.hash = state.getHash();\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar accessorDescriptor = function (getter, setter) {\n return {\n get: function () {\n return getInternalURLState(this)[getter]();\n },\n set: setter && function (value) {\n return getInternalURLState(this)[setter](value);\n },\n configurable: true,\n enumerable: true\n };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor('serialize', 'setHref'),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor('getOrigin'),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor('getProtocol', 'setProtocol'),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor('getUsername', 'setUsername'),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor('getPassword', 'setPassword'),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor('getHost', 'setHost'),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor('getHostname', 'setHostname'),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor('getPort', 'setPort'),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor('getPathname', 'setPathname'),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor('getSearch', 'setSearch'),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor('getSearchParams'),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor('getHash', 'setHash')\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/web.url.constructor');\n","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\n\nexport default function isDate(value) {\n requiredArgs(1, arguments);\n return value instanceof Date || typeof value === 'object' && Object.prototype.toString.call(value) === '[object Date]';\n}","import requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\n\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument); // Clone the date\n\n if (argument instanceof Date || typeof argument === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule\"); // eslint-disable-next-line no-console\n\n console.warn(new Error().stack);\n }\n\n return new Date(NaN);\n }\n}","import isDate from \"../isDate/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n * if the first argument is not an instance of Date.\n * Instead, argument is converted beforehand using `toDate`.\n *\n * Examples:\n *\n * | `isValid` argument | Before v2.0.0 | v2.0.0 onward |\n * |---------------------------|---------------|---------------|\n * | `new Date()` | `true` | `true` |\n * | `new Date('2016-01-01')` | `true` | `true` |\n * | `new Date('')` | `false` | `false` |\n * | `new Date(1488370835081)` | `true` | `true` |\n * | `new Date(NaN)` | `false` | `false` |\n * | `'2016-01-01'` | `TypeError` | `false` |\n * | `''` | `TypeError` | `false` |\n * | `1488370835081` | `TypeError` | `true` |\n * | `NaN` | `TypeError` | `false` |\n *\n * We introduce this change to make *date-fns* consistent with ECMAScript behavior\n * that try to coerce arguments to the expected type\n * (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\n\nexport default function isValid(dirtyDate) {\n requiredArgs(1, arguments);\n\n if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {\n return false;\n }\n\n var date = toDate(dirtyDate);\n return !isNaN(Number(date));\n}","var formatDistanceLocale = {\n lessThanXSeconds: {\n one: 'less than a second',\n other: 'less than {{count}} seconds'\n },\n xSeconds: {\n one: '1 second',\n other: '{{count}} seconds'\n },\n halfAMinute: 'half a minute',\n lessThanXMinutes: {\n one: 'less than a minute',\n other: 'less than {{count}} minutes'\n },\n xMinutes: {\n one: '1 minute',\n other: '{{count}} minutes'\n },\n aboutXHours: {\n one: 'about 1 hour',\n other: 'about {{count}} hours'\n },\n xHours: {\n one: '1 hour',\n other: '{{count}} hours'\n },\n xDays: {\n one: '1 day',\n other: '{{count}} days'\n },\n aboutXWeeks: {\n one: 'about 1 week',\n other: 'about {{count}} weeks'\n },\n xWeeks: {\n one: '1 week',\n other: '{{count}} weeks'\n },\n aboutXMonths: {\n one: 'about 1 month',\n other: 'about {{count}} months'\n },\n xMonths: {\n one: '1 month',\n other: '{{count}} months'\n },\n aboutXYears: {\n one: 'about 1 year',\n other: 'about {{count}} years'\n },\n xYears: {\n one: '1 year',\n other: '{{count}} years'\n },\n overXYears: {\n one: 'over 1 year',\n other: 'over {{count}} years'\n },\n almostXYears: {\n one: 'almost 1 year',\n other: 'almost {{count}} years'\n }\n};\n\nvar formatDistance = function (token, count, options) {\n var result;\n var tokenValue = formatDistanceLocale[token];\n\n if (typeof tokenValue === 'string') {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace('{{count}}', count.toString());\n }\n\n if (options !== null && options !== void 0 && options.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return 'in ' + result;\n } else {\n return result + ' ago';\n }\n }\n\n return result;\n};\n\nexport default formatDistance;","export default function buildFormatLongFn(args) {\n return function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n // TODO: Remove String()\n var width = options.width ? String(options.width) : args.defaultWidth;\n var format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}","import buildFormatLongFn from \"../../../_lib/buildFormatLongFn/index.js\";\nvar dateFormats = {\n full: 'EEEE, MMMM do, y',\n long: 'MMMM do, y',\n medium: 'MMM d, y',\n short: 'MM/dd/yyyy'\n};\nvar timeFormats = {\n full: 'h:mm:ss a zzzz',\n long: 'h:mm:ss a z',\n medium: 'h:mm:ss a',\n short: 'h:mm a'\n};\nvar dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: '{{date}}, {{time}}',\n short: '{{date}}, {{time}}'\n};\nvar formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: 'full'\n }),\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: 'full'\n }),\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: 'full'\n })\n};\nexport default formatLong;","var formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: 'P'\n};\n\nvar formatRelative = function (token, _date, _baseDate, _options) {\n return formatRelativeLocale[token];\n};\n\nexport default formatRelative;","export default function buildLocalizeFn(args) {\n return function (dirtyIndex, dirtyOptions) {\n var options = dirtyOptions || {};\n var context = options.context ? String(options.context) : 'standalone';\n var valuesArray;\n\n if (context === 'formatting' && args.formattingValues) {\n var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n var width = options.width ? String(options.width) : defaultWidth;\n valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n var _defaultWidth = args.defaultWidth;\n\n var _width = options.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[_width] || args.values[_defaultWidth];\n }\n\n var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex; // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n\n return valuesArray[index];\n };\n}","import buildLocalizeFn from \"../../../_lib/buildLocalizeFn/index.js\";\nvar eraValues = {\n narrow: ['B', 'A'],\n abbreviated: ['BC', 'AD'],\n wide: ['Before Christ', 'Anno Domini']\n};\nvar quarterValues = {\n narrow: ['1', '2', '3', '4'],\n abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}; // Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\n\nvar monthValues = {\n narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n};\nvar dayValues = {\n narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n};\nvar dayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n }\n};\nvar formattingDayPeriodValues = {\n narrow: {\n am: 'a',\n pm: 'p',\n midnight: 'mi',\n noon: 'n',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n abbreviated: {\n am: 'AM',\n pm: 'PM',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n },\n wide: {\n am: 'a.m.',\n pm: 'p.m.',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'in the morning',\n afternoon: 'in the afternoon',\n evening: 'in the evening',\n night: 'at night'\n }\n};\n\nvar ordinalNumber = function (dirtyNumber, _options) {\n var number = Number(dirtyNumber); // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n var rem100 = number % 100;\n\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + 'st';\n\n case 2:\n return number + 'nd';\n\n case 3:\n return number + 'rd';\n }\n }\n\n return number + 'th';\n};\n\nvar localize = {\n ordinalNumber: ordinalNumber,\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: 'wide'\n }),\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: 'wide',\n argumentCallback: function (quarter) {\n return quarter - 1;\n }\n }),\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: 'wide'\n }),\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: 'wide'\n }),\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: 'wide',\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: 'wide'\n })\n};\nexport default localize;","export default function buildMatchFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var width = options.width;\n var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];\n var matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n\n var matchedString = matchResult[0];\n var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];\n var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n }) : findKey(parsePatterns, function (pattern) {\n return pattern.test(matchedString);\n });\n var value;\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}\n\nfunction findKey(object, predicate) {\n for (var key in object) {\n if (object.hasOwnProperty(key) && predicate(object[key])) {\n return key;\n }\n }\n\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (var key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n\n return undefined;\n}","export default function buildMatchPatternFn(args) {\n return function (string) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n var matchedString = matchResult[0];\n var parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];\n value = options.valueCallback ? options.valueCallback(value) : value;\n var rest = string.slice(matchedString.length);\n return {\n value: value,\n rest: rest\n };\n };\n}","import buildMatchFn from \"../../../_lib/buildMatchFn/index.js\";\nimport buildMatchPatternFn from \"../../../_lib/buildMatchPatternFn/index.js\";\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nvar parseOrdinalNumberPattern = /\\d+/i;\nvar matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i\n};\nvar parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i]\n};\nvar matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i\n};\nvar parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i]\n};\nvar matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n};\nvar parseMonthPatterns = {\n narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n};\nvar matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n};\nvar parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n};\nvar matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n};\nvar parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i\n }\n};\nvar match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value, 10);\n }\n }),\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseEraPatterns,\n defaultParseWidth: 'any'\n }),\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: 'any',\n valueCallback: function (index) {\n return index + 1;\n }\n }),\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: 'any'\n }),\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: 'wide',\n parsePatterns: parseDayPatterns,\n defaultParseWidth: 'any'\n }),\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: 'any',\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: 'any'\n })\n};\nexport default match;","import formatDistance from \"./_lib/formatDistance/index.js\";\nimport formatLong from \"./_lib/formatLong/index.js\";\nimport formatRelative from \"./_lib/formatRelative/index.js\";\nimport localize from \"./_lib/localize/index.js\";\nimport match from \"./_lib/match/index.js\";\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n code: 'en-US',\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0\n /* Sunday */\n ,\n firstWeekContainsDate: 1\n }\n};\nexport default locale;","export default function toInteger(dirtyNumber) {\n if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n return NaN;\n }\n\n var number = Number(dirtyNumber);\n\n if (isNaN(number)) {\n return number;\n }\n\n return number < 0 ? Math.ceil(number) : Math.floor(number);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\n\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var timestamp = toDate(dirtyDate).getTime();\n var amount = toInteger(dirtyAmount);\n return new Date(timestamp + amount);\n}","import toInteger from \"../_lib/toInteger/index.js\";\nimport addMilliseconds from \"../addMilliseconds/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\n\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n requiredArgs(2, arguments);\n var amount = toInteger(dirtyAmount);\n return addMilliseconds(dirtyDate, -amount);\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCDayOfYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var timestamp = date.getTime();\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n var startOfYearTimestamp = date.getTime();\n var difference = timestamp - startOfYearTimestamp;\n return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var weekStartsOn = 1;\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var fourthOfJanuaryOfNextYear = new Date(0);\n fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);\n var fourthOfJanuaryOfThisYear = new Date(0);\n fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import getUTCISOWeekYear from \"../getUTCISOWeekYear/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n requiredArgs(1, arguments);\n var year = getUTCISOWeekYear(dirtyDate);\n var fourthOfJanuary = new Date(0);\n fourthOfJanuary.setUTCFullYear(year, 0, 4);\n fourthOfJanuary.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCISOWeek(fourthOfJanuary);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCISOWeek from \"../startOfUTCISOWeek/index.js\";\nimport startOfUTCISOWeekYear from \"../startOfUTCISOWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCISOWeek(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeek(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeWeekStartsOn = locale && locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n var date = toDate(dirtyDate);\n var day = date.getUTCDay();\n var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n date.setUTCDate(date.getUTCDate() - diff);\n date.setUTCHours(0, 0, 0, 0);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var year = date.getUTCFullYear();\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var firstWeekOfNextYear = new Date(0);\n firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);\n var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions);\n var firstWeekOfThisYear = new Date(0);\n firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);\n var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions);\n\n if (date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}","import getUTCWeekYear from \"../getUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport toInteger from \"../toInteger/index.js\"; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function startOfUTCWeekYear(dirtyDate, dirtyOptions) {\n requiredArgs(1, arguments);\n var options = dirtyOptions || {};\n var locale = options.locale;\n var localeFirstWeekContainsDate = locale && locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate);\n var year = getUTCWeekYear(dirtyDate, dirtyOptions);\n var firstWeek = new Date(0);\n firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setUTCHours(0, 0, 0, 0);\n var date = startOfUTCWeek(firstWeek, dirtyOptions);\n return date;\n}","import toDate from \"../../toDate/index.js\";\nimport startOfUTCWeek from \"../startOfUTCWeek/index.js\";\nimport startOfUTCWeekYear from \"../startOfUTCWeekYear/index.js\";\nimport requiredArgs from \"../requiredArgs/index.js\";\nvar MILLISECONDS_IN_WEEK = 604800000; // This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\n\nexport default function getUTCWeek(dirtyDate, options) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime(); // Round the number of days to the nearest integer\n // because the number of milliseconds in a week is not constant\n // (e.g. it's different in the week of the daylight saving time clock shift)\n\n return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;\n}","export default function addLeadingZeros(number, targetLength) {\n var sign = number < 0 ? '-' : '';\n var output = Math.abs(number).toString();\n\n while (output.length < targetLength) {\n output = '0' + output;\n }\n\n return sign + output;\n}","import addLeadingZeros from \"../../addLeadingZeros/index.js\";\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nvar formatters = {\n // Year\n y: function (date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);\n },\n // Month\n M: function (date, token) {\n var month = date.getUTCMonth();\n return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n // Day of the month\n d: function (date, token) {\n return addLeadingZeros(date.getUTCDate(), token.length);\n },\n // AM or PM\n a: function (date, token) {\n var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return dayPeriodEnumValue.toUpperCase();\n\n case 'aaa':\n return dayPeriodEnumValue;\n\n case 'aaaaa':\n return dayPeriodEnumValue[0];\n\n case 'aaaa':\n default:\n return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';\n }\n },\n // Hour [1-12]\n h: function (date, token) {\n return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);\n },\n // Hour [0-23]\n H: function (date, token) {\n return addLeadingZeros(date.getUTCHours(), token.length);\n },\n // Minute\n m: function (date, token) {\n return addLeadingZeros(date.getUTCMinutes(), token.length);\n },\n // Second\n s: function (date, token) {\n return addLeadingZeros(date.getUTCSeconds(), token.length);\n },\n // Fraction of second\n S: function (date, token) {\n var numberOfDigits = token.length;\n var milliseconds = date.getUTCMilliseconds();\n var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));\n return addLeadingZeros(fractionalSeconds, token.length);\n }\n};\nexport default formatters;","import getUTCDayOfYear from \"../../../_lib/getUTCDayOfYear/index.js\";\nimport getUTCISOWeek from \"../../../_lib/getUTCISOWeek/index.js\";\nimport getUTCISOWeekYear from \"../../../_lib/getUTCISOWeekYear/index.js\";\nimport getUTCWeek from \"../../../_lib/getUTCWeek/index.js\";\nimport getUTCWeekYear from \"../../../_lib/getUTCWeekYear/index.js\";\nimport addLeadingZeros from \"../../addLeadingZeros/index.js\";\nimport lightFormatters from \"../lightFormatters/index.js\";\nvar dayPeriodEnum = {\n am: 'am',\n pm: 'pm',\n midnight: 'midnight',\n noon: 'noon',\n morning: 'morning',\n afternoon: 'afternoon',\n evening: 'evening',\n night: 'night'\n};\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n // Era\n G: function (date, token, localize) {\n var era = date.getUTCFullYear() > 0 ? 1 : 0;\n\n switch (token) {\n // AD, BC\n case 'G':\n case 'GG':\n case 'GGG':\n return localize.era(era, {\n width: 'abbreviated'\n });\n // A, B\n\n case 'GGGGG':\n return localize.era(era, {\n width: 'narrow'\n });\n // Anno Domini, Before Christ\n\n case 'GGGG':\n default:\n return localize.era(era, {\n width: 'wide'\n });\n }\n },\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === 'yo') {\n var signedYear = date.getUTCFullYear(); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, {\n unit: 'year'\n });\n }\n\n return lightFormatters.y(date, token);\n },\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n var signedWeekYear = getUTCWeekYear(date, options); // Returns 1 for 1 BC (which is year 0 in JavaScript)\n\n var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear; // Two digit year\n\n if (token === 'YY') {\n var twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n } // Ordinal number\n\n\n if (token === 'Yo') {\n return localize.ordinalNumber(weekYear, {\n unit: 'year'\n });\n } // Padding\n\n\n return addLeadingZeros(weekYear, token.length);\n },\n // ISO week-numbering year\n R: function (date, token) {\n var isoWeekYear = getUTCISOWeekYear(date); // Padding\n\n return addLeadingZeros(isoWeekYear, token.length);\n },\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n var year = date.getUTCFullYear();\n return addLeadingZeros(year, token.length);\n },\n // Quarter\n Q: function (date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'Q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'QQ':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'Qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'QQQ':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'QQQQQ':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'formatting'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'QQQQ':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone quarter\n q: function (date, token, localize) {\n var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);\n\n switch (token) {\n // 1, 2, 3, 4\n case 'q':\n return String(quarter);\n // 01, 02, 03, 04\n\n case 'qq':\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n\n case 'qo':\n return localize.ordinalNumber(quarter, {\n unit: 'quarter'\n });\n // Q1, Q2, Q3, Q4\n\n case 'qqq':\n return localize.quarter(quarter, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n\n case 'qqqqq':\n return localize.quarter(quarter, {\n width: 'narrow',\n context: 'standalone'\n });\n // 1st quarter, 2nd quarter, ...\n\n case 'qqqq':\n default:\n return localize.quarter(quarter, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Month\n M: function (date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n case 'M':\n case 'MM':\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n\n case 'Mo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'MMM':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // J, F, ..., D\n\n case 'MMMMM':\n return localize.month(month, {\n width: 'narrow',\n context: 'formatting'\n });\n // January, February, ..., December\n\n case 'MMMM':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone month\n L: function (date, token, localize) {\n var month = date.getUTCMonth();\n\n switch (token) {\n // 1, 2, ..., 12\n case 'L':\n return String(month + 1);\n // 01, 02, ..., 12\n\n case 'LL':\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n\n case 'Lo':\n return localize.ordinalNumber(month + 1, {\n unit: 'month'\n });\n // Jan, Feb, ..., Dec\n\n case 'LLL':\n return localize.month(month, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // J, F, ..., D\n\n case 'LLLLL':\n return localize.month(month, {\n width: 'narrow',\n context: 'standalone'\n });\n // January, February, ..., December\n\n case 'LLLL':\n default:\n return localize.month(month, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // Local week of year\n w: function (date, token, localize, options) {\n var week = getUTCWeek(date, options);\n\n if (token === 'wo') {\n return localize.ordinalNumber(week, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(week, token.length);\n },\n // ISO week of year\n I: function (date, token, localize) {\n var isoWeek = getUTCISOWeek(date);\n\n if (token === 'Io') {\n return localize.ordinalNumber(isoWeek, {\n unit: 'week'\n });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n // Day of the month\n d: function (date, token, localize) {\n if (token === 'do') {\n return localize.ordinalNumber(date.getUTCDate(), {\n unit: 'date'\n });\n }\n\n return lightFormatters.d(date, token);\n },\n // Day of year\n D: function (date, token, localize) {\n var dayOfYear = getUTCDayOfYear(date);\n\n if (token === 'Do') {\n return localize.ordinalNumber(dayOfYear, {\n unit: 'dayOfYear'\n });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n // Day of week\n E: function (date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n\n switch (token) {\n // Tue\n case 'E':\n case 'EE':\n case 'EEE':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'EEEEE':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'EEEEEE':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'EEEE':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Local day of week\n e: function (date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case 'e':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'ee':\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n\n case 'eo':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'eee':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'eeeee':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'eeeeee':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'eeee':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n var dayOfWeek = date.getUTCDay();\n var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n\n switch (token) {\n // Numerical value (same as in `e`)\n case 'c':\n return String(localDayOfWeek);\n // Padded numerical value\n\n case 'cc':\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n\n case 'co':\n return localize.ordinalNumber(localDayOfWeek, {\n unit: 'day'\n });\n\n case 'ccc':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'standalone'\n });\n // T\n\n case 'ccccc':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'standalone'\n });\n // Tu\n\n case 'cccccc':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'standalone'\n });\n // Tuesday\n\n case 'cccc':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'standalone'\n });\n }\n },\n // ISO day of week\n i: function (date, token, localize) {\n var dayOfWeek = date.getUTCDay();\n var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n\n switch (token) {\n // 2\n case 'i':\n return String(isoDayOfWeek);\n // 02\n\n case 'ii':\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n\n case 'io':\n return localize.ordinalNumber(isoDayOfWeek, {\n unit: 'day'\n });\n // Tue\n\n case 'iii':\n return localize.day(dayOfWeek, {\n width: 'abbreviated',\n context: 'formatting'\n });\n // T\n\n case 'iiiii':\n return localize.day(dayOfWeek, {\n width: 'narrow',\n context: 'formatting'\n });\n // Tu\n\n case 'iiiiii':\n return localize.day(dayOfWeek, {\n width: 'short',\n context: 'formatting'\n });\n // Tuesday\n\n case 'iiii':\n default:\n return localize.day(dayOfWeek, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM or PM\n a: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n\n switch (token) {\n case 'a':\n case 'aa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'aaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'aaaaa':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'aaaa':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';\n }\n\n switch (token) {\n case 'b':\n case 'bb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'bbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n }).toLowerCase();\n\n case 'bbbbb':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'bbbb':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n var hours = date.getUTCHours();\n var dayPeriodEnumValue;\n\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case 'B':\n case 'BB':\n case 'BBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'abbreviated',\n context: 'formatting'\n });\n\n case 'BBBBB':\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'narrow',\n context: 'formatting'\n });\n\n case 'BBBB':\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: 'wide',\n context: 'formatting'\n });\n }\n },\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === 'ho') {\n var hours = date.getUTCHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return lightFormatters.h(date, token);\n },\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === 'Ho') {\n return localize.ordinalNumber(date.getUTCHours(), {\n unit: 'hour'\n });\n }\n\n return lightFormatters.H(date, token);\n },\n // Hour [0-11]\n K: function (date, token, localize) {\n var hours = date.getUTCHours() % 12;\n\n if (token === 'Ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Hour [1-24]\n k: function (date, token, localize) {\n var hours = date.getUTCHours();\n if (hours === 0) hours = 24;\n\n if (token === 'ko') {\n return localize.ordinalNumber(hours, {\n unit: 'hour'\n });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n // Minute\n m: function (date, token, localize) {\n if (token === 'mo') {\n return localize.ordinalNumber(date.getUTCMinutes(), {\n unit: 'minute'\n });\n }\n\n return lightFormatters.m(date, token);\n },\n // Second\n s: function (date, token, localize) {\n if (token === 'so') {\n return localize.ordinalNumber(date.getUTCSeconds(), {\n unit: 'second'\n });\n }\n\n return lightFormatters.s(date, token);\n },\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return 'Z';\n }\n\n switch (token) {\n // Hours and optional minutes\n case 'X':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n\n case 'XXXX':\n case 'XX':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n\n case 'XXXXX':\n case 'XXX': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case 'x':\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n\n case 'xxxx':\n case 'xx':\n // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n\n case 'xxxxx':\n case 'xxx': // Hours and minutes with `:` delimiter\n\n default:\n return formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (GMT)\n O: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'O':\n case 'OO':\n case 'OOO':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'OOOO':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Timezone (specific non-location)\n z: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timezoneOffset = originalDate.getTimezoneOffset();\n\n switch (token) {\n // Short\n case 'z':\n case 'zz':\n case 'zzz':\n return 'GMT' + formatTimezoneShort(timezoneOffset, ':');\n // Long\n\n case 'zzzz':\n default:\n return 'GMT' + formatTimezone(timezoneOffset, ':');\n }\n },\n // Seconds timestamp\n t: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = Math.floor(originalDate.getTime() / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n // Milliseconds timestamp\n T: function (date, token, _localize, options) {\n var originalDate = options._originalDate || date;\n var timestamp = originalDate.getTime();\n return addLeadingZeros(timestamp, token.length);\n }\n};\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n\n if (minutes === 0) {\n return sign + String(hours);\n }\n\n var delimiter = dirtyDelimiter || '';\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n if (offset % 60 === 0) {\n var sign = offset > 0 ? '-' : '+';\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n\n return formatTimezone(offset, dirtyDelimiter);\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n var delimiter = dirtyDelimiter || '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);\n var minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n\nexport default formatters;","function dateLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'P':\n return formatLong.date({\n width: 'short'\n });\n\n case 'PP':\n return formatLong.date({\n width: 'medium'\n });\n\n case 'PPP':\n return formatLong.date({\n width: 'long'\n });\n\n case 'PPPP':\n default:\n return formatLong.date({\n width: 'full'\n });\n }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n switch (pattern) {\n case 'p':\n return formatLong.time({\n width: 'short'\n });\n\n case 'pp':\n return formatLong.time({\n width: 'medium'\n });\n\n case 'ppp':\n return formatLong.time({\n width: 'long'\n });\n\n case 'pppp':\n default:\n return formatLong.time({\n width: 'full'\n });\n }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n var matchResult = pattern.match(/(P+)(p+)?/) || [];\n var datePattern = matchResult[1];\n var timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n var dateTimeFormat;\n\n switch (datePattern) {\n case 'P':\n dateTimeFormat = formatLong.dateTime({\n width: 'short'\n });\n break;\n\n case 'PP':\n dateTimeFormat = formatLong.dateTime({\n width: 'medium'\n });\n break;\n\n case 'PPP':\n dateTimeFormat = formatLong.dateTime({\n width: 'long'\n });\n break;\n\n case 'PPPP':\n default:\n dateTimeFormat = formatLong.dateTime({\n width: 'full'\n });\n break;\n }\n\n return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));\n}\n\nvar longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter\n};\nexport default longFormatters;","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}","var protectedDayOfYearTokens = ['D', 'DD'];\nvar protectedWeekYearTokens = ['YY', 'YYYY'];\nexport function isProtectedDayOfYearToken(token) {\n return protectedDayOfYearTokens.indexOf(token) !== -1;\n}\nexport function isProtectedWeekYearToken(token) {\n return protectedWeekYearTokens.indexOf(token) !== -1;\n}\nexport function throwProtectedError(token, format, input) {\n if (token === 'YYYY') {\n throw new RangeError(\"Use `yyyy` instead of `YYYY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'YY') {\n throw new RangeError(\"Use `yy` instead of `YY` (in `\".concat(format, \"`) for formatting years to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'D') {\n throw new RangeError(\"Use `d` instead of `D` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n } else if (token === 'DD') {\n throw new RangeError(\"Use `dd` instead of `DD` (in `\".concat(format, \"`) for formatting days of the month to the input `\").concat(input, \"`; see: https://git.io/fxCyr\"));\n }\n}","import isValid from \"../isValid/index.js\";\nimport defaultLocale from \"../locale/en-US/index.js\";\nimport subMilliseconds from \"../subMilliseconds/index.js\";\nimport toDate from \"../toDate/index.js\";\nimport formatters from \"../_lib/format/formatters/index.js\";\nimport longFormatters from \"../_lib/format/longFormatters/index.js\";\nimport getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport { isProtectedDayOfYearToken, isProtectedWeekYearToken, throwProtectedError } from \"../_lib/protectedTokens/index.js\";\nimport toInteger from \"../_lib/toInteger/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\n\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g; // This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\n\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\nvar escapedStringRegExp = /^'([^]*?)'?$/;\nvar doubleQuoteRegExp = /''/g;\nvar unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n * and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://git.io/fxCyr\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n * ```javascript\n * // Before v2.0.0\n * format(new Date(2016, 0, 1))\n *\n * // v2.0.0 onward\n * format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n * ```\n *\n * - New format string API for `format` function\n * which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n * See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;\n * see: https://git.io/fxCyr\n * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;\n * see: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `date` must not be Invalid Date\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://git.io/fxCyr\n * @throws {RangeError} format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\n\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n requiredArgs(2, arguments);\n var formatStr = String(dirtyFormatStr);\n var options = dirtyOptions || {};\n var locale = options.locale || defaultLocale;\n var localeFirstWeekContainsDate = locale.options && locale.options.firstWeekContainsDate;\n var defaultFirstWeekContainsDate = localeFirstWeekContainsDate == null ? 1 : toInteger(localeFirstWeekContainsDate);\n var firstWeekContainsDate = options.firstWeekContainsDate == null ? defaultFirstWeekContainsDate : toInteger(options.firstWeekContainsDate); // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');\n }\n\n var localeWeekStartsOn = locale.options && locale.options.weekStartsOn;\n var defaultWeekStartsOn = localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn);\n var weekStartsOn = options.weekStartsOn == null ? defaultWeekStartsOn : toInteger(options.weekStartsOn); // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n\n if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');\n }\n\n if (!locale.localize) {\n throw new RangeError('locale must contain localize property');\n }\n\n if (!locale.formatLong) {\n throw new RangeError('locale must contain formatLong property');\n }\n\n var originalDate = toDate(dirtyDate);\n\n if (!isValid(originalDate)) {\n throw new RangeError('Invalid time value');\n } // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n\n\n var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);\n var utcDate = subMilliseconds(originalDate, timezoneOffset);\n var formatterOptions = {\n firstWeekContainsDate: firstWeekContainsDate,\n weekStartsOn: weekStartsOn,\n locale: locale,\n _originalDate: originalDate\n };\n var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {\n var firstCharacter = substring[0];\n\n if (firstCharacter === 'p' || firstCharacter === 'P') {\n var longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong, formatterOptions);\n }\n\n return substring;\n }).join('').match(formattingTokensRegExp).map(function (substring) {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return \"'\";\n }\n\n var firstCharacter = substring[0];\n\n if (firstCharacter === \"'\") {\n return cleanEscapedString(substring);\n }\n\n var formatter = formatters[firstCharacter];\n\n if (formatter) {\n if (!options.useAdditionalWeekYearTokens && isProtectedWeekYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n if (!options.useAdditionalDayOfYearTokens && isProtectedDayOfYearToken(substring)) {\n throwProtectedError(substring, dirtyFormatStr, dirtyDate);\n }\n\n return formatter(utcDate, substring, locale.localize, formatterOptions);\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');\n }\n\n return substring;\n }).join('');\n return result;\n}\n\nfunction cleanEscapedString(input) {\n return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\");\n}","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\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\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\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\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(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 &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(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 (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","var LAYOUT_HORIZONTAL=\"horizontal\",LAYOUT_VERTICAL=\"vertical\",__vue_module__={name:\"multipane\",props:{layout:{type:String,default:LAYOUT_VERTICAL}},data:function(){return{isResizing:!1}},computed:{classnames:function(){return[\"multipane\",\"layout-\"+this.layout.slice(0,1),this.isResizing?\"is-resizing\":\"\"]},cursor:function(){return this.isResizing?this.layout==LAYOUT_VERTICAL?\"col-resize\":\"row-resize\":\"\"},userSelect:function(){return this.isResizing?\"none\":\"\"}},methods:{onMouseDown:function(e){var t=e.target,i=e.pageX,n=e.pageY;if(t.className&&t.className.match(\"multipane-resizer\")){var s=this,o=s.$el,a=s.layout,u=t.previousElementSibling,r=u.offsetWidth,l=u.offsetHeight,d=!!(u.style.width+\"\").match(\"%\"),c=window.addEventListener,p=window.removeEventListener,m=function(e,t){if(void 0===t&&(t=0),a==LAYOUT_VERTICAL){var i=o.clientWidth,n=e+t;return u.style.width=d?n/i*100+\"%\":n+\"px\"}if(a==LAYOUT_HORIZONTAL){var s=o.clientHeight,r=e+t;return u.style.height=d?r/s*100+\"%\":r+\"px\"}};s.isResizing=!0;var _=m();s.$emit(\"paneResizeStart\",u,t,_);var h=function(e){var o=e.pageX,d=e.pageY;_=a==LAYOUT_VERTICAL?m(r,o-i):m(l,d-n),s.$emit(\"paneResize\",u,t,_)},f=function(){_=m(a==LAYOUT_VERTICAL?u.clientWidth:u.clientHeight),s.isResizing=!1,p(\"mousemove\",h),p(\"mouseup\",f),s.$emit(\"paneResizeStop\",u,t,_)};c(\"mousemove\",h),c(\"mouseup\",f)}}}};!function(){if(\"undefined\"!=typeof document){var e=document.head||document.getElementsByTagName(\"head\")[0],t=document.createElement(\"style\"),i=\".multipane { display: flex; } .multipane.layout-h { flex-direction: column; } .multipane.layout-v { flex-direction: row; } .multipane > div { position: relative; z-index: 1; } .multipane-resizer { display: block; position: relative; z-index: 2; } .layout-h > .multipane-resizer { width: 100%; height: 10px; margin-top: -10px; top: 5px; cursor: row-resize; } .layout-v > .multipane-resizer { width: 10px; height: 100%; margin-left: -10px; left: 5px; cursor: col-resize; } \";t.type=\"text/css\",t.styleSheet?t.styleSheet.cssText=i:t.appendChild(document.createTextNode(i)),e.appendChild(t)}}();var __$__vue_module__=Object.assign(__vue_module__,{render:function(){var e=this,t=e.$createElement;return(e._self._c||t)(\"div\",{class:e.classnames,style:{cursor:e.cursor,userSelect:e.userSelect},on:{mousedown:e.onMouseDown}},[e._t(\"default\")],2)},staticRenderFns:[]});__$__vue_module__.prototype=__vue_module__.prototype,function(){if(\"undefined\"!=typeof document){var e=document.head||document.getElementsByTagName(\"head\")[0],t=document.createElement(\"style\");t.type=\"text/css\",t.styleSheet?t.styleSheet.cssText=\"\":t.appendChild(document.createTextNode(\"\")),e.appendChild(t)}}();var MultipaneResizer={render:function(){var e=this,t=e.$createElement;return(e._self._c||t)(\"div\",{staticClass:\"multipane-resizer\"},[e._t(\"default\")],2)},staticRenderFns:[]};\"undefined\"!=typeof window&&window.Vue&&(window.Vue.component(\"multipane\",__$__vue_module__),window.Vue.component(\"multipane-resizer\",MultipaneResizer));export{__$__vue_module__ as Multipane,MultipaneResizer};\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\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\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\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","export default function _classExtractFieldDescriptor(receiver, privateMap, action) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n }\n\n return privateMap.get(receiver);\n}","export default function _classApplyDescriptorGet(receiver, descriptor) {\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n\n return descriptor.value;\n}","import classApplyDescriptorGet from \"./classApplyDescriptorGet.js\";\nimport classExtractFieldDescriptor from \"./classExtractFieldDescriptor.js\";\nexport default function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"get\");\n return classApplyDescriptorGet(receiver, descriptor);\n}","export default function _checkPrivateRedeclaration(obj, privateCollection) {\n if (privateCollection.has(obj)) {\n throw new TypeError(\"Cannot initialize the same private elements twice on an object\");\n }\n}","import checkPrivateRedeclaration from \"./checkPrivateRedeclaration.js\";\nexport default function _classPrivateFieldInitSpec(obj, privateMap, value) {\n checkPrivateRedeclaration(obj, privateMap);\n privateMap.set(obj, value);\n}","export default function _classApplyDescriptorSet(receiver, descriptor, value) {\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError(\"attempted to set read only private field\");\n }\n\n descriptor.value = value;\n }\n}","import classApplyDescriptorSet from \"./classApplyDescriptorSet.js\";\nimport classExtractFieldDescriptor from \"./classExtractFieldDescriptor.js\";\nexport default function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"set\");\n classApplyDescriptorSet(receiver, descriptor, value);\n return value;\n}","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\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\n var F = function F() {};\n\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\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\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}","export default function _readOnlyError(name) {\n throw new TypeError(\"\\\"\" + name + \"\\\" is read-only\");\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}"],"names":["ace","define","e","t","n","p","Date","toLocaleString","length","r","i","s","EventEmitter","o","u","Range","a","RangeList","f","HashHandler","l","Tokenizer","c","h","CURRENT_WORD","session","getTextRange","getWordRange","SELECTION","replace","CURRENT_LINE","getLine","getCursorPosition","row","PREV_LINE","LINE_INDEX","LINE_NUMBER","SOFT_TABS","getUseSoftTabs","TAB_SIZE","getTabSize","CLIPBOARD","getText","FILENAME","exec","this","FILEPATH","FILENAME_BASE","DIRECTORY","WORKSPACE_NAME","FULLNAME","BLOCK_COMMENT_START","$mode","blockComment","start","BLOCK_COMMENT_END","end","LINE_COMMENT","lineCommentStart","CURRENT_YEAR","bind","year","CURRENT_YEAR_SHORT","CURRENT_MONTH","month","CURRENT_MONTH_NAME","CURRENT_MONTH_NAME_SHORT","CURRENT_DATE","day","CURRENT_DAY_NAME","weekday","CURRENT_DAY_NAME_SHORT","CURRENT_HOUR","hour","hour12","CURRENT_MINUTE","minute","CURRENT_SECOND","second","SELECTED_TEXT","d","snippetMap","snippetNameMap","implement","getTokenizer","$tokenizer","createTokenizer","substr","test","tabstopId","parseInt","text","regex","onMatch","fmtString","guard","slice","flag","next","indexOf","shift","unshift","token","merge","snippetVar","split","map","value","choices","formatString","expectElse","ifEnd","elseEnd","changeCase","local","formatStringVar","formatFunction","tokenizeTmSnippet","getLineTokens","tokens","getVariableValue","variables","__","hasOwnProperty","tmStrFormat","fmt","RegExp","call","arguments","resolveVariables","toUpperCase","toLowerCase","join","tmFormatFunction","push","insertSnippetForSelection","lastIndexOf","getTabString","match","column","forEach","index","parents","some","Object","keys","m","splice","apply","Math","max","concat","g","y","b","w","getSelectionRange","E","S","v","x","inVirtualSelectionMode","selection","addTabstops","insertSnippet","forEachSelection","keepOrder","tabstopManager","tabNext","$getScope","$id","pop","inlinePhp","getState","substring","getActiveScopes","includeScopes","expandWithTab","expandSnippetForSelection","findMatchingSnippet","dryRun","doc","removeInLine","replaceBefore","replaceAfter","M__","matchBefore","T__","matchAfter","content","startRe","endRe","triggerRe","endTriggerRe","register","scope","name","unregister","prefix","tabTrigger","body","Array","isArray","trigger","escapeRegExp","endTrigger","endGuard","_signal","parseSnippetFile","JSON","parse","getSnippetByName","prototype","$onChange","onChange","$onChangeSelection","delayedCall","onChangeSelection","schedule","$onChangeSession","onChangeSession","$onAfterExec","onAfterExec","attach","ranges","tabstops","$openTabstops","selectedTabstop","editor","on","commands","keyBinding","addKeyboardHandler","keyboardHandler","detach","removeTabstopMarkers","removeListener","removeKeyboardHandler","action","rangeList","$bias","pointIndex","removeRange","$inChange","getLength","getValue","updateLinkedFields","hasLinkedRanges","firstNonLinked","linked","original","snippetManager","command","readOnly","lead","anchor","isEmpty","contains","min","selectTabstop","addTabstopMarkers","cursor","fromOrientedRange","multiSelect","toSingleRange","addRange","clone","execCommand","matches","useLink","getOption","fromPoints","tabstop","addList","markerId","addMarker","removeMarker","bindKeys","Tab","renderer","scrollCursorIntoView","Esc","importCssString","Editor","expandSnippet","VirtualRenderer","$maxLines","setHighlightActiveLine","setShowPrintMargin","setShowGutter","setHighlightGutterLine","$mouseHandler","$focusTimeout","$highlightTagPending","createElement","appendChild","style","display","setStyle","setOption","focus","$isFocused","$cursorLayer","restartTimer","element","opacity","$keepTextAreaAtCursor","highlight","$searchHighlight","clazz","getDocumentPosition","moveToPosition","stop","Infinity","id","setSelectOnHover","scrollTop","setRow","$pos","getRow","$textLayer","childNodes","config","firstRow","selectedNode","removeCssClass","addCssClass","_emit","getHoveredRow","addListener","container","data","bgTokenizer","$tokenizeRow","type","className","caption","filterText","matchMask","meta","message","$updateOnChange","$computeWidth","screenWidth","isOpen","isTopdown","autoSelect","setData","setValue","stringRepeat","getData","clearSelection","moveCursorTo","hide","show","window","innerHeight","innerWidth","top","$borderSize","$maxPixelHeight","bottom","left","offsetWidth","goTo","getTextLeftOffset","$padding","$imageSize","AcePopup","$singleLineEditor","parForEach","retrievePrecedingIdentifier","reverse","retrieveFollowingIdentifier","getCompletionPrefix","completers","identifierRegexps","autoInsert","exactMatch","gatherCompletionsId","blurListener","changeListener","mousedownListener","mousewheelListener","changeTimer","updateCompletions","tooltipTimer","updateDocTooltip","$init","popup","document","documentElement","insertMatch","getPopup","openPopup","completions","filtered","setTheme","getTheme","setFontSize","getFontSize","layerConfig","lineHeight","getPixelPosition","base","getBoundingClientRect","offset","scrollLeft","gutterWidth","cancel","off","hideDocTooltip","activated","activeElement","textInput","getElement","relatedTarget","tooltipNode","parentNode","startOperation","completer","getAllRanges","remove","snippet","endOperation","Up","Down","Return","deleteSuffix","PageUp","gotoPageUp","PageDown","gotoPageDown","gatherCompletions","getSession","createAnchor","$insertRight","getCompletions","finished","showPopup","setFilter","cancelContextMenu","getDocTooltip","docText","docHTML","showDocTooltip","margin","pointerEvents","tabIndex","onblur","onclick","onTooltipClick","innerHTML","textContent","right","offsetTop","offsetHeight","isFocused","removeChild","target","nodeName","href","rel","destroy","for","get","$shared","$sharedInstance","once","startCommand","bindKey","all","filterCompletions","sort","$score","localeCompare","filter","score","Autocomplete","FilteredList","create","abs","getTokenAt","escapeHTML","setCompleters","addCompleter","textCompleter","keyWordCompleter","snippetCompleter","$modes","files","snippetFileId","modes","loadModule","snippets","snippetText","defineOptions","enableBasicAutocompletion","set","addCommand","removeCommand","enableLiveAutocompletion","enableSnippets","require","module","exports","buildDom","placeholder","spellcheck","title","firstChild","setSession","setEditor","searchBox","scroller","searchRange","$syncOptions","$initElements","querySelector","replaceBox","searchOption","replaceOption","regExpOption","caseSensitiveOption","wholeWordOption","searchInput","replaceInput","searchCounter","setTimeout","activeInput","stopPropagation","srcElement","getAttribute","$searchBarKb","addCommandKeyListener","keyCodeToString","findKeyCommand","stopEvent","find","$closeSearchBarKb","isReplace","checked","getReadOnly","findNext","findPrev","esc","replaceAll","findAll","addCommands","win","mac","setSearchRange","searchRangeMarker","setCssClass","$search","$options","re","updateBackMarkers","skipCurrent","backwards","wrap","regExp","caseSensitive","wholeWord","preventScroll","range","updateCounter","positionToIndex","lastIndex","replaceAndFindNext","active","select","SearchBox","Search","TextHighlightRules","constantOtherSymbol","qString","qqString","tString","constantNumericHex","constantNumericBinary","constantNumericDecimal","constantNumericRational","constantNumericComplex","constantNumericFloat","instanceVariable","$keywords","createKeywordMapper","keyword","$rules","defaultToken","stateName","splitRegex","rules","heredoc","indentedHeredoc","comment","qStateWithInterpolation","qStateWithoutInterpolation","sStateWithoutInterpolation","sStateWithInterpolation","rState","include","regex_character_class","normalizeRules","inherits","RubyHighlightRules","checkOutdent","autoOutdent","findMatchingBracket","$getIndent","MatchingBraceOutdent","FoldMode","TokenIterator","indentKeywords","def","unless","until","begin","elsif","rescue","ensure","when","foldingStartMarker","foldingStopMarker","getFoldWidget","getFoldWidgetRange","rubyBlock","openingBracketBlock","closingBracketBlock","getCurrentToken","getCurrentTokenRange","step","stepBackward","stepForward","getCurrentTokenRow","$tokenIndex","$rowTokens","Mode","CstyleBehaviour","HighlightRules","$outdent","$behaviour","foldingRules","getNextLineIndent","getMatching","undefined","isDark","cssClass","cssText","ACE_NAMESPACE","global","requirejs","deps","payload","modules","payloads","console","error","trace","_require","parentId","callback","lookup","toString","params","dep","packagedModule","normalizeModule","moduleName","chunks","charAt","previous","mod","uri","packaged","req","returnValue","exportAce","ns","root","Element","defineProperty","enumerable","writable","configurable","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","navigator","os","platform","ua","userAgent","appName","isWin","isIE","parseFloat","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isEdge","isAIR","isAndroid","isChromeOS","isIOS","MSStream","isMobile","strictCSP","useragent","XHTML_NS","arr","parent","refs","txt","createTextNode","els","ch","el","options","childIndex","val","setAttribute","getDocumentHead","head","getElementsByTagName","tag","createElementNS","removeChildren","ownerDocument","createFragment","createDocumentFragment","hasCssClass","classes","toggleCssClass","add","node","hasCssString","sheets","querySelectorAll","cssCache","insertPendingStyles","cache","item","getRootNode","insertBefore","useStrictCSP","importCssStylsheet","scrollbarWidth","inner","width","minWidth","height","outer","position","overflow","noScrollbar","withScrollbar","clientWidth","computedStyle","getComputedStyle","styles","property","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","div","transform","animationName","translate","tx","ty","round","ctor","superCtor","super_","constructor","mixin","obj","key","proto","oop","Keys","ret","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","enter","escape","del","mods","pow","keyCode","keyString","String","fromCharCode","activeListenerOptions","pressedKeys","ts","detectListenerOptionsSupport","createComment","addEventListener","passive","getListenerOptions","EventListener","elem","destroyer","$toDestroy","removeEventListener","preventDefault","getButton","ctrlKey","altKey","shiftKey","button","capture","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","factor","wheelDeltaX","wheelX","wheelY","wheelDeltaY","wheelDelta","deltaMode","DOM_DELTA_PIXEL","deltaX","deltaY","DOM_DELTA_LINE","DOM_DELTA_PAGE","axis","HORIZONTAL_AXIS","detail","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","timer","clicks","eventNames","onMousedown","isNewClick","clientX","clientY","clearTimeout","_clicks","getModifierHash","metaKey","normalizeCommandKeys","hashId","getModifierState","altGr","location","keyLocation","timeStamp","dt","defaultPrevented","resetPressedKeys","getModifierString","isOldGecko","lastKeyDownKeyCode","lastDefaultPrevented","result","postMessage","postMessageId","nextTick","messageName","listener","$idleBlocked","onIdle","cb","timeout","handler","$idleBlockId","blockIdle","delay","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","comparePoints","p1","p2","startRow","startColumn","endRow","endColumn","isEqual","compare","compareRange","cmp","comparePoint","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","lastRow","extend","collapseRows","toScreenRange","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","last","stringReverse","string","count","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copy","copyArray","array","deepCopy","arrayToMap","createMap","props","arrayRemove","str","getMatchOffsets","deferredCall","fcn","deferred","isPending","defaultTimeout","_self","$cancelT","lineMode","pasteCancelled","now","event","dom","lang","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","valueResetRegex","TextInput","host","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","onBlur","hasFocus","onFocus","resetSelection","$focusScroll","isTransformed","ancestors","parentElement","nodeType","removeAttribute","blur","curOp","commandName","isUserAction","docChanged","selectionChanged","onCompositionEnd","newValue","selectionStart","selectionEnd","setSelectionRange","afterContextMenu","line","getRange","prevLine","nextLine","isAllSelected","onSelect","selectAll","inputHandler","setInputHandler","getInputHandler","sendText","fromInput","onPaste","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","shouldReset","onTextInput","onInput","onCompositionUpdate","inputType","handleClipboardData","forceIEMime","clipboardData","mime","doCopy","isCut","getCopyText","onCut","onCopy","onCommandKey","onCompositionStart","$readOnly","useTextareaForIME","cancelComposition","markerRange","msGetInputContext","context","getInputContext","compositionStartOffset","closeTimeout","syncComposition","onKeyup","onContextMenuClose","$isMousePressed","$moveTextAreaToCursor","setCommandMode","setReadOnly","setCopyWithEmptySelection","onContextMenu","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","clientHeight","move","addIosSelectionHandler","typingResetTimeout","typing","detectArrowKeys","isMousePressed","modifier","up","home","option","down","$setUserAgentForTests","_isMobile","_isIOS","DRAG_OFFSET","SCROLL_COOLDOWN_T","DefaultHandlers","mouseHandler","$clickSelection","setDefaultHandler","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","selectByLines","extendSelectionBy","selectByWords","calcDistance","ax","ay","bx","by","sqrt","calcRangeOrientation","ev","inSelection","pos","mousedownEvent","selectionRange","selectionEmpty","time","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","getShiftKey","selectToPosition","setCapture","orientedRange","setSelectionAnchor","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","distance","getBracketRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","direction","canScroll","isScrollableBy","speed","isSlower","scrollBy","Tooltip","$element","$parentNode","setText","setHtml","html","setPosition","setClassName","getHeight","getWidth","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","tooltip","GutterTooltip","showTooltip","annotation","$annotations","hideTooltip","maxRow","screenRow","pixelToScreenCoordinates","documentToScreenRow","$tooltipFollowsMouse","moveTooltip","gutterElement","gutterRegion","getRegion","selectTo","$gutter","windowWidth","windowHeight","MouseEvent","$inSelection","propagationStopped","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","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","onDragInterval","addDragMarker","toOrientedRange","getSelectionStyle","setBlinking","clearInterval","setInterval","onMouseMove","clearDragMarker","$resetCursorStyle","onDragStart","cancelDrag","draggable","self","dataTransfer","effectAllowed","setDragImage","clearData","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","insert","types","copyAllowed","moveAllowed","copyModifierState","dragWait","interval","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","state","dragDrop","$dragEnabled","clickCount","eventTarget","unselectable","addTouchListeners","touchStartT","lastT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","vX","vY","createContextMenu","updateMenu","selected","hasUndo","getUndoManager","replaceChild","class","handleClick","readText","then","writeText","ontouchstart","ontouchend","showContextMenu","pagePos","textToScreenCoordinates","leftOffset","pageX","pageY","hideContextMenu","handleLongTap","selectWord","switchToSelectionMode","setRange","animate","oldScrollTop","getScrollTop","textarea","touches","touchObj","cursorPos","anchorPos","offsetLeft","weightedDistance","diff1","diff2","url","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","path","src","onload","_","isAbort","qualifyURL","_dispatchEvent","eventName","_eventRegistry","_defaultHandlers","listeners","defaultHandler","newCallback","Promise","resolve","handlers","_disabled_","old","disabled","removeDefaultHandler","capturing","removeAllListeners","optionsProvider","setOptions","optList","getOptions","optionNames","hidden","opt","warn","forwardTo","handlesSet","reportError","msg","Error","AppConfig","$defaultOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","moduleUrl","component","parts","sep","setModuleUrl","subst","$loading","onLoad","moduleType","afterLoad","reportErrorIfPathIsNotConfigured","init","scriptOptions","scriptUrl","currentScript","_currentScript","currentDocument","scripts","script","attributes","j","attr","deHyphenate","m1","version","DefaultGutterHandler","MouseHandler","focusEditor","windowBlurred","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","$dragDelay","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","$defaultHandler","setKeyboardHandler","handleKeyboard","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","AL","WS","CS","ES","ET","NSM","LRE","RLE","PDF","LRO","RLO","BN","UnicodeTBL00","UnicodeTBL20","_computeLevels","chars","levels","len","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","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","delta","lines","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","isLastRow","endOfLine","$useWrapMode","splits","$wrapData","indent","size","isFullWidth","getScreenTabSize","$main","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getSelectionAnchor","$bidiHandler","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","getDocument","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","getAnchor","getSelectionLead","isBackwards","$setSelection","Number","MAX_VALUE","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","excludeLastChar","rowEnd","rowStart","foldLine","getFoldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","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","screenPos","lineWidgets","widget","rowsAbove","rowCount","docPos","keepDesiredColumn","moveCursorToScreen","desiredColumn","getRangeOfMovements","func","toJSON","rangeCount","r1","fromJSON","MAX_TOKEN_COUNT","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","splitterRurles","rule","caseInsensitive","adjustedregex","matchcount","groupCount","tokenArray","$arrayTokens","$applyToken","digit","removeCapturingGroups","createSplitterRegexp","$setMaxTokenCount","values","stack","inChClass","lastCapture","parenOpen","parenClose","square","startState","currentState","matchAttempts","skipped","consumeLineEnd","addRules","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","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","rightChar","matching","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","next_indent","quotes","$quotes","quote","leftChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","charBefore","iterator","$matchTokenType","iterator2","bracket","wordChars","code","unicode","$defaultBehaviour","$highlightRules","$highlightRuleConfig","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","insertAtTabStop","regexpStart","uncomment","shouldInsertSpace","commentWithSpace","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","fun","minEmptyLength","floor","toggleBlockComment","colDiff","initialRange","startRange","endRange","tab","input","createWorker","createModeDelegates","delegations","functionName","$delegator","method","language","transformAction","param","completionKeywords","ruleItr","aLength","$createKeywordList","applyDelta","docLines","doNotValidate","Anchor","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","$getTransformedPoint","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$clipPositionToDocument","noClip","Document","textOrLines","$lines","insertMergedLines","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","$safeApplyDelta","docLength","MAX","from","to","chunk","indexToPosition","newlineLength","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","SearchHighlight","setRegexp","MAX_RANGES","update","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","containsRow","walk","lastEnd","isNewRow","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","excludeEdges","startIndex","removed","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","consumePoint","consumeRange","restorePoint","restoreRange","subFold","collapseChildren","addSubFold","afterStart","firstConsumed","consumedFolds","k","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","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","setMode","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","reset","getSelection","undoManager","addSession","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","undo","redo","hasRedo","addSelection","startNewGroup","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","$overwrite","setOverwrite","overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","marker","addDynamicMarker","markers","getMarkers","highlightLines","setAnnotations","annotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","terminate","getMode","$scrollTop","setScrollTop","isNaN","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","getLineWidgetMaxWidth","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","$wrapLimitRange","setUseWrapMode","useWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","CHAR","CHAR_EXT","PUNCTUATION","SPACE","TAB","TAB_SPACE","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","getWrapIndent","indentation","addSplit","minSplit","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","$wrap","firstLineNumber","useSoftTabs","foldStyle","addWordBoundary","needle","wordBoundary","$matchIterator","sr","sc","er","ec","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","$assembleMultilineRegExp","forEachInLine","commandKeyBinding","$singleCommand","MultiHashHandler","isDefault","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","other","otherPos","removeCommands","keyList","$keyChain","CommandManager","byName","$checkCommandState","isAvailable","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","description","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","gotoLine","prompt","$type","multiSelectAction","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","selectPageUp","scrollPageUp","jumpToMatching","cutLine","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","autoIndent","firstLineEndCol","selectedText","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","getContainerElement","getTextAreaContainer","$historyTracker","$initOperationListeners","_$emitInputEvent","$opResetTimer","$lastSel","prevOp","commandEvent","previousCommand","scrollSelectionIntoView","animateScrolling","sel","$mergeableCommands","$mergeUndoDeltas","prev","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","$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","updateFull","oldEditor","resize","onResize","theme","$highlightBrackets","$highlightPending","$bracketHighlight","markerIds","markerType","$highlightTags","$tagHighlight","currentTag","prevToken","stepCount","tmpToken","sbm","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","$updateHighlightActiveLine","updateLines","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","isFullLine","getBehavioursEnabled","lineState","shouldOutdent","$enableAutoIndent","lineIndent","selectedRange","currIndent","prevLineState","composition","applyComposition","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","shouldHighlight","getHighlightActiveLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","number","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","$toggleWordPairs","currWordStart","wordParts","curLength","itLength","that","reg","wordPairs","negate","firstCondition","secondCondition","res","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","center","alignCursor","getCursorPositionScreen","expand","matchType","bracketType","found","brackets","lineNumber","navigateTo","replaced","$tryReplace","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onBeforeRender","onAfterRender","$pixelPos","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","copyWithEmptySelection","behavioursEnabled","wrapBehavioursEnabled","enableAutoIndent","autoScrollEditorIntoView","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeNumberRenderer","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","$composition","placeholderNode","$placeholder","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","lastLineNumber","$renderer","UndoManager","$maxRev","rearrangeUndoStack","deltaSet","ignore","swapped","swapGroups","allowMerge","$lastDelta","$keepRedoStack","$redoStack","lastDeltas","$undoStack","$rev","rev","markIgnored","getRevision","getDeltas","getChangedRanges","getChangedLines","$redoStackBaseRev","undoSelectionRange","$syncRev","rebaseRedoStack","redoSelectionRange","nextDelta","mark","canUndo","canRedo","bookmark","isAtBookmark","isClean","markClean","$prettyPrint","stringifyDelta","cloneDelta","stringifyRange","d1","d2","i1","i2","ds1","ds2","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","rest","moveDeltasByOne","redoStack","xformed","deltaSets","Lines","canvasHeight","cells","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","lineTop","computeLineHeight","$cacheCell","cell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","$updateAnnotations","onCreateCell","textNode","foldWidget","rowInfo","annoText","gutterOffset","oldLastRow","$updateCursorRow","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","padding","$computePadding","ceil","$highlightGutterLine","$cursorRow","updateLineHighlight","$cursorCell","scrollLines","$renderLines","breakpoints","decorations","foldHeight","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","getBorderClass","tl","tr","br","bl","setPadding","setMarkers","elt","css","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","curr","lineRange","range1","drawBidiSingleLineMarker","radiusClass","extraLength","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","unixMode","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","showSpaces","showTabs","showEOL","$tabStrings","tabStr","span","$indentGuideRe","spaceClass","spaceContent","tabClass","tabContent","lineElements","lineElementsIdx","heightChanged","lineElement","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$textToken","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","com","renderIndentGuide","cols","$createLineElement","$renderWrappedLine","splitChars","$renderOverflowMessage","$renderSimpleLine","overflowEl","$getFoldLineTokens","lastLineEl","invisibleEl","renderTokens","addTokens","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$isAnimating","$stopCssAnimation","blinking","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","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","pending","changes","$recursionLimit","_flush","change","clear","CHAR_COUNT","USE_OBSERVER","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","isRoot","visibility","whiteSpace","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","observe","setPolling","disconnect","$getZoom","getZoom","zoom","$initTransformMeasureNodes","transformCoordinates","clientPos","elPos","mul","solve","l1","l2","det","sub","m2","ut","GutterLayer","MarkerLayer","TextLayer","CursorLayer","editorCss","HIDE_TEXTAREA","onGutterResize","$markerBack","textLayer","canvas","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","$renderChanges","defaultView","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","scrollWidth","$updateCachedSize","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","$printMarginEl","containerEl","posTop","posLeft","setScrollMargin","sm","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","freeze","unfreeze","st","$updateLines","$autosize","desiredHeight","hideScrollbars","$gutterWidth","screenLines","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","steps","x_min","dx","initialScroll","oldSteps","$timer","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","$useTextareaForIME","addToken","removeExtraToken","newToken","$themeId","$theme","setMouseCursor","attachToShadowRoot","$workerBlob","workerUrl","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","blobBuilder","getBlob","Worker","blob","URL","webkitURL","blobURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","err","deltaQueue","$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","$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","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","$registerLineWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","binarySearch","comparator","findAnnotations","matched","oldWidget","gutterAnno","arrow","onmousedown","Renderer","edit","_id","getElementById","env","tagName","oldNode","createEditSession","ActionCable","INTERNAL","WebSocket","logger","createConsumer","ref","getConfig","default_mount_path","Consumer","createWebSocketURL","protocol","startDebugging","debugging","stopDebugging","messages","fn","me","ConnectionMonitor","clamp","secondsSince","connection","visibilityDidChange","reconnectAttempts","pollInterval","staleThreshold","isRunning","startedAt","stoppedAt","startPolling","getPollInterval","stopPolling","recordPing","pingedAt","recordConnect","disconnectedAt","recordDisconnect","poll","pollTimeout","_this","reconnectIfStale","connectionIsStale","disconnectedRecently","reopen","visibilityState","getTime","message_types","protocols","supportedProtocols","Connection","consumer","subscriptions","monitor","disconnected","reopenDelay","webSocket","stringify","isActive","uninstallEventHandlers","installEventHandlers","close","arg","allowReconnect","ref1","error1","getProtocol","isState","isProtocolSupported","events","identifier","welcome","reload","ping","confirmation","notify","rejection","reject","notifyAll","willAttemptReconnect","Subscriptions","channelName","channel","subscription","Subscription","ensureActiveConnection","sendCommand","forget","results","perform","unsubscribe","object","properties","connect","utils","settle","cookies","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","defaults","Cancel","onCanceled","requestData","requestHeaders","headers","responseType","done","cancelToken","signal","isFormData","request","auth","username","password","unescape","encodeURIComponent","Authorization","btoa","fullPath","baseURL","onloadend","responseHeaders","getAllResponseHeaders","responseData","response","status","statusText","paramsSerializer","responseURL","onabort","onerror","ontimeout","timeoutErrorMessage","transitional","clarifyTimeoutError","isStandardBrowserEnv","xsrfValue","withCredentials","xsrfCookieName","read","xsrfHeaderName","setRequestHeader","isUndefined","onDownloadProgress","onUploadProgress","upload","abort","subscribe","aborted","Axios","mergeConfig","createInstance","defaultConfig","instance","instanceConfig","axios","CancelToken","isCancel","VERSION","promises","spread","isAxiosError","__CANCEL__","executor","TypeError","resolvePromise","promise","_listeners","onfulfilled","_resolve","reason","throwIfRequested","source","InterceptorManager","dispatchRequest","validator","validators","interceptors","assertOptions","silentJSONParsing","boolean","forcedJSONParsing","requestInterceptorChain","synchronousRequestInterceptors","interceptor","runWhen","synchronous","fulfilled","rejected","responseInterceptorChain","onFulfilled","onRejected","getUri","use","eject","isAbsoluteURL","combineURLs","requestedURL","enhanceError","transformData","throwIfCancellationRequested","transformRequest","common","adapter","transformResponse","fileName","columnNumber","config1","config2","getMergedValue","isPlainObject","mergeDeepProperties","prop","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","configValue","validateStatus","fns","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","getDefaultAdapter","process","stringifySafely","rawValue","parser","encoder","isString","isArrayBuffer","isBuffer","isStream","isFile","isBlob","isArrayBufferView","buffer","isURLSearchParams","isObject","strictJSONParsing","maxContentLength","maxBodyLength","thisArg","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","thing","deprecatedWarnings","schema","allowUnknown","formatMessage","desc","FormData","ArrayBuffer","isView","getPrototypeOf","isFunction","pipe","URLSearchParams","product","assignValue","stripBOM","redefineAll","anInstance","iterate","defineIterator","setSpecies","DESCRIPTORS","fastKey","InternalStateModule","setInternalState","internalStateGetterFor","getterFor","getConstructor","wrapper","CONSTRUCTOR_NAME","IS_MAP","ADDER","Constructor","iterable","Prototype","AS_ENTRIES","getInternalState","entry","getEntry","callbackfn","boundFunction","has","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","uncurryThis","getWeakData","anObject","ArrayIterationModule","hasOwn","findIndex","uncaughtFrozenStore","store","frozen","UncaughtFrozenStore","entries","findUncaughtFrozen","it","$","isForced","redefine","InternalMetadataModule","isCallable","fails","checkCorrectnessOfIteration","setToStringTag","inheritIfRequired","IS_WEAK","NativeConstructor","NativePrototype","exported","fixMethod","KEY","uncurriedNativeMethod","REPLACE","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","forced","isInteger","wellKnownSymbol","IS_PURE","ITERATOR","searchParams","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexNonASCII","regexSeparators","OVERFLOW_ERROR","baseMinusTMin","RangeError","ucs2decode","output","extra","digitToBasic","adapt","numPoints","firstTime","currentValue","inputLength","bias","basicLength","handledCPCount","handledCPCountPlusOne","qMinusT","baseMinusT","label","encoded","labels","$findIndex","addToUnscopables","FIND_INDEX","SKIPS_HOLES","isIntegralNumber","stat","createNonEnumerableProperty","getOwnPropertyNames","isPrototypeOf","isRegExp","getRegExpFlags","stickyHelpers","proxyAccessor","enforceInternalState","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","MATCH","NativeRegExp","RegExpPrototype","SyntaxError","stringIndexOf","stringSlice","IS_NCG","re1","re2","CORRECT_NEW","MISSED_STICKY","UNSUPPORTED_Y","BASE_FORCED","handleDotAll","handleNCG","named","names","ncg","groupid","groupname","RegExpWrapper","pattern","flags","rawFlags","dotAll","sticky","handled","thisIsRegExp","patternIsRegExp","flagsAreUndefined","groups","rawPattern","raw","classof","collection","collectionStrong","requireObjectCoercible","getMethod","getSubstitution","searchValue","fromIndex","replaceValue","IS_REG_EXP","replacer","searchString","functionalReplace","searchLength","advanceBy","O","endOfLastMatch","InternalWeakMap","collectionWeak","isExtensible","NATIVE_WEAK_MAP","IS_IE11","ActiveXObject","$WeakMap","WeakMapPrototype","nativeDelete","nativeHas","nativeGet","nativeSet","USE_NATIVE_URL","createIteratorConstructor","$toString","createPropertyDescriptor","getIterator","getIteratorMethod","validateArgumentsLength","arraySort","URL_SEARCH_PARAMS","URL_SEARCH_PARAMS_ITERATOR","getInternalParamsState","getOwnPropertyDescriptor","safeGetBuiltIn","descriptor","nativeFetch","NativeRequest","Headers","RequestPrototype","HeadersPrototype","plus","sequences","percentSequence","bytes","percentDecode","sequence","deserialize","replacements","serialize","URLSearchParamsIterator","URLSearchParamsState","parseObject","parseQuery","bindURL","entryIterator","entryNext","iteratorMethod","query","attribute","updateURL","URLSearchParamsConstructor","URLSearchParamsPrototype","getAll","headersHas","headersSet","wrapRequestOptions","noTargetGet","fetch","RequestConstructor","Request","defineProperties","assign","arrayFrom","arraySlice","codeAt","toASCII","URLSearchParamsModule","getInternalURLState","getInternalSearchParamsState","NativeURL","numberToString","INVALID_AUTHORITY","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseIPv4","partsLength","numbers","part","radix","ipv4","parseIPv6","numbersSeen","ipv4Piece","swaps","address","pieceIndex","compress","pointer","findLongestZeroSequence","ipv6","maxIndex","maxLength","currStart","currLength","serializeHost","ignore0","C0ControlPercentEncodeSet","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","percentEncode","specialSchemes","ftp","file","http","https","ws","wss","isWindowsDriveLetter","normalized","startsWithWindowsDriveLetter","third","isSingleDot","segment","isDoubleDot","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","URLState","isBase","baseState","failure","urlString","stateOverride","codePoints","bufferCodePoints","seenAt","seenBracket","seenPasswordToken","scheme","cannotBeABaseURL","isSpecial","includesCredentials","codePoint","encodedCodePoints","parseHost","shortenPath","cannotHaveUsernamePasswordPort","pathSize","setHref","getOrigin","URLConstructor","origin","setProtocol","getUsername","setUsername","getPassword","setPassword","getHost","setHost","getHostname","setHostname","getPort","setPort","getPathname","setPathname","getSearch","setSearch","getSearchParams","facade","getHash","setHash","URLPrototype","accessorDescriptor","getter","setter","nativeCreateObjectURL","nativeRevokeObjectURL","revokeObjectURL","sham","requiredArgs","required","toDate","argument","argStr","NaN","isValid","dirtyDate","date","formatDistanceLocale","lessThanXSeconds","one","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXWeeks","xWeeks","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","formatDistance","tokenValue","addSuffix","comparison","buildFormatLongFn","defaultWidth","format","formats","dateFormats","full","long","medium","short","timeFormats","dateTimeFormats","formatLong","dateTime","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","formatRelative","_date","_baseDate","_options","buildLocalizeFn","dirtyIndex","dirtyOptions","valuesArray","formattingValues","defaultFormattingWidth","_defaultWidth","_width","argumentCallback","eraValues","narrow","abbreviated","wide","quarterValues","monthValues","dayValues","dayPeriodValues","am","pm","midnight","noon","morning","afternoon","evening","night","formattingDayPeriodValues","ordinalNumber","dirtyNumber","rem100","localize","era","quarter","dayPeriod","buildMatchFn","matchPattern","matchPatterns","defaultMatchWidth","matchResult","matchedString","parsePatterns","defaultParseWidth","findKey","valueCallback","predicate","buildMatchPatternFn","parseResult","parsePattern","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","any","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","locale","weekStartsOn","firstWeekContainsDate","toInteger","addMilliseconds","dirtyAmount","timestamp","subMilliseconds","MILLISECONDS_IN_DAY","getUTCDayOfYear","setUTCMonth","setUTCHours","startOfYearTimestamp","difference","startOfUTCISOWeek","getUTCDay","setUTCDate","getUTCDate","getUTCISOWeekYear","getUTCFullYear","fourthOfJanuaryOfNextYear","setUTCFullYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","startOfUTCISOWeekYear","fourthOfJanuary","MILLISECONDS_IN_WEEK","getUTCISOWeek","startOfUTCWeek","localeWeekStartsOn","defaultWeekStartsOn","getUTCWeekYear","localeFirstWeekContainsDate","defaultFirstWeekContainsDate","firstWeekOfNextYear","firstWeekOfThisYear","startOfUTCWeekYear","firstWeek","getUTCWeek","addLeadingZeros","targetLength","sign","formatters","signedYear","M","getUTCMonth","dayPeriodEnumValue","getUTCHours","H","getUTCMinutes","getUTCSeconds","numberOfDigits","milliseconds","getUTCMilliseconds","fractionalSeconds","dayPeriodEnum","G","unit","lightFormatters","Y","signedWeekYear","weekYear","twoDigitYear","isoWeekYear","Q","week","I","isoWeek","D","dayOfYear","dayOfWeek","localDayOfWeek","isoDayOfWeek","hours","K","X","_localize","originalDate","_originalDate","timezoneOffset","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","z","T","dirtyDelimiter","absOffset","minutes","dateLongFormatter","timeLongFormatter","dateTimeLongFormatter","dateTimeFormat","datePattern","timePattern","longFormatters","P","getTimezoneOffsetInMilliseconds","utcDate","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","protectedDayOfYearTokens","protectedWeekYearTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","throwProtectedError","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","dirtyFormatStr","formatStr","formatterOptions","firstCharacter","longFormatter","cleanEscapedString","formatter","useAdditionalWeekYearTokens","useAdditionalDayOfYearTokens","runtime","Op","$Symbol","Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","makeInvokeMethod","tryCatch","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","record","__await","unwrapped","previousPromise","enqueue","callInvokeWithMethodAndArg","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","displayName","isGeneratorFunction","genFun","setPrototypeOf","__proto__","awrap","async","skipTempReset","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","Function","LAYOUT_HORIZONTAL","LAYOUT_VERTICAL","__vue_module__","layout","default","isResizing","computed","classnames","userSelect","methods","$el","previousElementSibling","$emit","styleSheet","__$__vue_module__","render","$createElement","_c","mousedown","_t","staticRenderFns","MultipaneResizer","staticClass","Vue","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","_classExtractFieldDescriptor","receiver","privateMap","_classApplyDescriptorGet","_classPrivateFieldGet","classExtractFieldDescriptor","classApplyDescriptorGet","_checkPrivateRedeclaration","privateCollection","_classPrivateFieldInitSpec","checkPrivateRedeclaration","_classApplyDescriptorSet","_classPrivateFieldSet","classApplyDescriptorSet","_createForOfIteratorHelper","allowArrayLike","unsupportedIterableToArray","F","_e","normalCompletion","didErr","_e2","_readOnlyError","_arrayWithoutHoles","arrayLikeToArray","_iterableToArray","_nonIterableSpread","_toConsumableArray","arrayWithoutHoles","iterableToArray","nonIterableSpread"],"sourceRoot":""}