HEX
Server: Apache
System: Linux server1.ariadata.co 4.18.0-553.120.1.el8_10.x86_64 #1 SMP Mon Apr 20 18:04:27 EDT 2026 x86_64
User: nepi (1051)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system,show_source,popen,proc_open
Upload Files
File: /home/nepi/public_html/public/admin/js/chunk-3020ac28.a7656fdf.js.map
{"version":3,"sources":["webpack:///./node_modules/codemirror/addon/search/search.js","webpack:///./node_modules/codemirror/mode/sass/sass.js","webpack:///./node_modules/codemirror/addon/search/match-highlighter.js","webpack:///./node_modules/codemirror/addon/dialog/dialog.js","webpack:///./node_modules/codemirror/addon/selection/active-line.js","webpack:///./node_modules/codemirror/addon/hint/javascript-hint.js","webpack:///./node_modules/codemirror/mode/php/php.js","webpack:///./node_modules/codemirror/mode/clike/clike.js","webpack:///./node_modules/codemirror/mode/pug/pug.js","webpack:///./node_modules/codemirror/mode/vue/vue.js","webpack:///./node_modules/codemirror/addon/search/matchesonscrollbar.js","webpack:///./node_modules/codemirror/addon/comment/comment.js","webpack:///./node_modules/codemirror/addon/mode/simple.js","webpack:///./node_modules/codemirror/mode/stylus/stylus.js","webpack:///./node_modules/codemirror/mode/css/css.js","webpack:///./src/interfaces/code/input.vue?9663","webpack:///./node_modules/codemirror/addon/selection/mark-selection.js","webpack:///./node_modules/codemirror/keymap/sublime.js","webpack:///./node_modules/codemirror/addon/hint/show-hint.js","webpack:///./node_modules/codemirror/addon/mode/overlay.js","webpack:///./node_modules/codemirror/mode/coffeescript/coffeescript.js","webpack:///./node_modules/codemirror/addon/search/searchcursor.js","webpack:///./node_modules/codemirror/mode/xml/xml.js","webpack:///./node_modules/codemirror/mode/htmlmixed/htmlmixed.js","webpack:///./src/interfaces/code/input.vue?42e2","webpack:///src/interfaces/code/input.vue","webpack:///./src/interfaces/code/input.vue?0ad0","webpack:///./src/interfaces/code/input.vue","webpack:///./node_modules/codemirror/mode/handlebars/handlebars.js","webpack:///./node_modules/codemirror/addon/mode/multiplex.js"],"names":["mod","CodeMirror","searchOverlay","query","caseInsensitive","RegExp","replace","global","source","ignoreCase","token","stream","lastIndex","pos","match","exec","string","index","length","skipToEnd","SearchState","this","posFrom","posTo","lastQuery","overlay","getSearchState","cm","state","search","queryCaseInsensitive","toLowerCase","getSearchCursor","caseFold","multiline","persistentDialog","text","deflt","onEnter","onKeyDown","openDialog","value","selectValueOnOpen","closeOnEnter","onClose","clearSearch","dialog","shortText","f","prompt","confirmDialog","fs","openConfirm","confirm","parseString","ch","parseQuery","isRE","indexOf","e","test","startSearch","queryText","removeOverlay","addOverlay","showMatchesOnScrollbar","annotate","clear","doSearch","rev","persistent","immediate","findNext","q","getSelection","hiding","searchNext","event","e_stop","getCursor","style","opacity","shiftKey","_","to","line","document","querySelector","display","wrapper","getBoundingClientRect","bottom","cursorCoords","top","getQueryDialog","keyName","extra","getOption","cmd","keyMap","execCommand","operation","callback","cursor","find","Pos","lastLine","firstLine","setSelection","from","scrollIntoView","phrase","getReplaceQueryDialog","getReplacementQueryDialog","getDoReplaceConfirm","replaceAll","getRange","i","all","dialogText","advance","start","doReplace","commands","findPersistent","findPersistentNext","findPersistentPrev","findPrev","defineMode","config","cssMode","mimeModes","propertyKeywords","colorKeywords","valueKeywords","fontProperties","tokenRegexp","words","join","word","keywords","keywordsRegexp","operators","opRegexp","pseudoElementsRegexp","isEndLine","peek","urlTokens","next","tokenizer","tokenBase","eatSpace","buildStringTokenizer","comment","indentation","multiLine","sol","skipTo","quote","greedy","stringTokenizer","nextChar","peekChar","previousChar","charAt","endingString","cursorHalf","buildInterpolationTokenizer","currentTokenizer","indent","indentCount","lastScopeOffset","scopes","offset","currentOffset","indentUnit","unshift","dedent","shift","eatWhile","current","hasOwnProperty","prevProp","prop","tokenLexer","startOfToken","withCurrentIndent","newScopes","scope","push","startState","type","definedVars","definedMixins","lastToken","content","defineMIME","defaults","minChars","delay","wordsOnly","annotateScrollbar","showToken","trim","State","options","name","timeout","matchesonscroll","active","cursorActivity","matchHighlighter","hasFocus","scheduleHighlight","onFocus","clearTimeout","setTimeout","highlightMatches","hasBoundary","makeOverlay","searchFor","className","somethingSelected","isWord","selection","re","cur","getLine","end","slice","str","chr","boundariesAround","defineOption","val","old","Init","off","on","dialogDiv","template","wrap","getWrapperElement","appendChild","createElement","innerHTML","addClass","closeNotification","newVal","currentNotificationClose","defineExtension","closed","me","close","inp","rmClass","parentNode","removeChild","focus","button","getElementsByTagName","select","onInput","onKeyUp","keyCode","blur","closeOnBlur","callbacks","buttons","blurring","b","e_preventDefault","doneTimer","duration","WRAP_CLASS","BACK_CLASS","GUTT_CLASS","clearActiveLines","activeLines","removeLineClass","sameArray","a","updateActiveLines","ranges","range","option","nonEmpty","anchor","head","empty","getLineHandleVisualStart","addLineClass","selectionChange","sel","prev","listSelections","forEach","arr","arrayContains","item","Array","prototype","scriptHint","editor","getToken","innerMode","getMode","mode","helperType","tprop","context","list","getCompletions","javascriptHint","javascriptKeywords","getTokenAt","getCoffeeScriptToken","coffeescriptHint","coffeescriptKeywords","registerHelper","stringProps","split","arrayProps","funcProps","forAllProps","obj","Object","getOwnPropertyNames","getPrototypeOf","o","found","globalScope","window","maybeAdd","lastIndexOf","gatherCompletions","Function","base","pop","additionalContext","useGlobalScope","jQuery","v","localVars","c","vars","globalVars","matchSequence","escapes","phpString","patterns","tokenize","closing","phpString_","escaped","eol","tokStack","phpKeywords","phpAtoms","phpBuiltin","phpConfig","blockKeywords","defKeywords","atoms","builtin","multiLineStrings","hooks","before","quoted","eat","delim","_stream","parserConfig","htmlMode","phpMode","dispatch","isPHP","curMode","pending","php","curState","html","m","openPHP","backUp","startOpen","copyState","htmlNew","phpNew","textAfter","blockCommentStart","blockCommentEnd","lineComment","Context","indented","column","info","align","pushContext","col","popContext","t","typeBefore","prevToken","typeAtEndOfLine","isTopScope","contains","propertyIsEnumerable","curPunc","isDefKeyword","statementIndentUnit","dontAlignCalls","types","indentStatements","indentSwitch","namespaceSeparator","isPunctuationChar","numberStart","number","isOperatorChar","isIdentifierChar","isReservedIdentifier","result","tokenString","tokenComment","maybeEnd","maybeEOL","typeFirstDefinitions","basecolumn","startOfLine","ctx","undefined","styleDefs","Pass","firstChar","dontIndentStatements","hook","switchBlock","allmanIndentation","electricInput","blockCommentContinue","fold","cKeywords","cppKeywords","objCKeywords","objCBuiltins","basicCTypes","basicObjCTypes","cTypes","identifier","objCTypes","cBlockKeywords","cDefKeywords","cppHook","pointerHook","cIsReservedIdentifier","cpp14Literal","cpp11StringHook","cpp11RawStringDelim","tokenRawString","cppLooksLikeConstructor","lastTwo","tokenAtString","def","mimes","add","tokenTripleString","tokenNestedComment","depth","tokenKotlinString","tripleString","modeProps","cx","closeBrackets","pairs","triples","intendSwitch","tokenCeylonString","first","toUpperCase","KEYWORD","DOCTYPE","ID","CLASS","ATTRS_NEST","jsMode","javaScriptLine","javaScriptLineExcludesColon","javaScriptArguments","javaScriptArgumentsDepth","isInterpolating","interpolationNesting","jsState","restOfLine","isIncludeFiltered","isEach","lastTag","scriptType","isAttrs","attrsNest","inAttributeName","attributeIsType","attrValue","indentOf","Infinity","indentToken","innerState","innerModeForLine","javaScript","tok","yieldStatement","doctype","interpolation","interpolationContinued","caseStatement","when","defaultStatement","extendsStatement","append","prepend","block","include","includeFiltered","includeFilteredContinued","filter","mixin","call","mixinCallAfter","callArguments","conditional","each","eachContinued","whileStatement","tag","captures","innerModes","substring","setInnerMode","code","id","attrs","attrsContinued","toString","ex","attributesBlock","colon","dot","fail","force","hideFirstChars","copy","nextToken","res","tagLanguages","script","mustacheOverlay","overlayMode","backdrop","tags","SearchAnnotation","annotateOptions","listenForChanges","annotation","gap","matches","update","findMatches","self","changeHandler","_cm","change","onChange","MAX_MATCHES","offsetLine","changeStart","sizeChange","Math","max","splice","maxMatches","startLine","endLine","changeEnd","min","newFrom","newTo","updateAfterChange","noOptions","nonWS","firstNonWS","probablyInsideString","getTokenTypeAt","useInnerComments","getModeAt","toggleComment","minLine","uncomment","commentString","pad","padding","blankLines","commentBlankLines","baseString","whitespace","cut","replaceRange","fullLines","blockComment","startString","endString","lastLineHasText","lead","blockCommentLead","didSomething","lineString","lines","endPos","open","insideStart","insideEnd","lastStart","firstEnd","almostLastStart","openEnd","foundEnd","ensureState","states","Error","toRegex","caret","flags","String","asToken","apply","Rule","data","regex","tokenFunction","pend","local","endToken","localState","endScan","rule","stack","enterLocalMode","j","cmp","props","spec","pers","p","persistentStates","lState","forceEnd","indentFunction","meta","dontIndentStates","rules","scan","dedentIfLineStart","defineSimpleMode","simpleMode","states_","hasIndentation","orig","s","override","indentUnitString","tagKeywords","keySet","tagKeywords_","tagVariablesRegexp","propertyKeywords_","nonStandardPropertyKeywords","nonStandardPropertyKeywords_","valueKeywords_","colorKeywords_","documentTypes","documentTypes_","documentTypesRegexp","wordRegexp","mediaFeatures","mediaFeatures_","mediaTypes","mediaTypes_","fontProperties_","operatorsRegexp","wordOperatorKeywordsRegexp","wordOperatorKeywords_","blockKeywords_","vendorPrefixesRegexp","commonAtoms","commonAtoms_","firstWordMatch","firstWord","tokenCComment","tokenParenthesized","wordIsTag","currentIndent","contextIndent","pass","popAndPass","n","wordIsProperty","wordIsBlock","wordIsVendorPrefix","wordAsValue","wordLC","typeIsBlock","endOfLine","typeIsInterpolation","typeIsPseudo","escapeRegExp","firstWordOfLine","parens","vendorPrefixes","pseudo","atBlock","atBlock_parens","keyframes","extend","variableName","lineFirstWord","lineIndent","prevLineFirstWord","prevLineIndent","electricChars","commonDef_","hintWords","concat","sort","array","keys","inline","resolveMode","tokenHooks","mediaValueKeywords","counterDescriptors","allowNested","supportsAtComponent","ret","tp","stateArg","mediaValueKeywords_","counterDescriptors_","allWords","onCursorActivity","markedSelection","markedSelectionStyle","reset","CHUNK_SIZE","cmpPos","coverRange","addAt","cls","atEnd","mark","markText","coverStart","coverEnd","cmds","findPosSubword","doc","dir","clipPos","startPos","cat","isWordChar","moveSubword","extendSelectionsBy","insertLine","above","isReadOnly","len","newSelection","last","at","indentLine","setSelections","wordAt","addCursorToSelection","newRanges","newAnchor","findPosV","goalColumn","newHead","left","newRange","isSelectedRange","goSubwordLeft","goSubwordRight","scrollLineUp","getScrollInfo","visibleBottomLine","lineAtHeight","clientHeight","scrollTo","defaultTextHeight","scrollLineDown","visibleTopLine","splitSelectionByLine","lineRanges","singleSelectionTop","scroll","selectLine","extended","insertLineAfter","insertLineBefore","selectNextOccurrence","fullWord","sublimeFindFullWord","addSelection","skipAndSelectNextOccurrence","prevAnchor","prevHead","addCursorToPrevLine","addCursorToNextLine","mirror","selectBetweenBrackets","opening","scanForBracket","puncType","sortLines","caseSensitive","selected","toSort","au","bu","modifyWordOrSelection","indices","replacements","replaceSelections","getTarget","findAndGoTo","forward","target","findPrevious","selectScope","goToBracket","swapLineUp","linesToMove","newSels","swapLineDown","toggleCommentIndented","joinLines","joined","actual","duplicateLine","rangeCount","sortLinesInsensitive","nextBookmark","marks","sublimeBookmarks","prevBookmark","toggleBookmark","findMarksAt","findMarks","sublimeBookmark","k","clearWhenEmpty","clearBookmarks","selectBookmarks","smartBackspace","cursors","toStartOfLine","countColumn","deletePos","findPosH","prevIndent","findColumn","delLineRight","upcaseAtCursor","downcaseAtCursor","setSublimeMark","sublimeMark","setBookmark","selectToSublimeMark","deleteToSublimeMark","tmp","sublimeKilled","swapWithSublimeMark","setCursor","sublimeYank","replaceSelection","showInCenter","findUnder","findUnderPrevious","findAllUnder","primaryIndex","macSublime","normalizeKeyMap","pcSublime","mac","default","macDefault","sublime","HINT_ELEMENT_CLASS","ACTIVE_HINT_ELEMENT_CLASS","Completion","widget","debounce","tick","startLen","activityFunc","showHint","getHints","async","newOpts","hint","parseOptions","selections","supportsSelection","completionActive","completion","signal","requestAnimationFrame","fn","cancelAnimationFrame","hintOptions","out","defaultOptions","resolve","getText","buildKeyMap","handle","baseMap","Up","moveFocus","Down","PageUp","menuSize","PageDown","Home","setFocus","End","Enter","pick","Tab","Esc","navigator","platform","custom","customKeys","ourMap","addBinding","key","bound","extraKeys","getHintElement","hintsElement","el","nodeName","Widget","picked","ownerDocument","getInputField","parentWindow","defaultView","hints","theme","selectedHint","completions","elt","render","createTextNode","displayText","hintId","container","body","alignWithWord","below","offsetLeft","offsetTop","isContainerPositioned","getComputedStyle","position","offsetParent","offsetParentPosition","bodyPosition","scrollLeft","scrollTop","winW","innerWidth","offsetWidth","documentElement","winH","innerHeight","offsetHeight","box","overlapY","scrolls","scrollHeight","startScroll","height","curTop","closingOnBlur","overlapX","right","width","node","firstChild","nextSibling","paddingRight","nativeBarWidth","addKeyMap","avoidWrap","changeActive","screenAmount","closeOnUnfocus","onBlur","onScroll","curScroll","newTop","point","pageYOffset","srcElement","completeOnSingleClick","scrollToActive","childNodes","applicableHelpers","helpers","fetchHints","then","resolveAutoHints","getHelpers","resolved","app","run","getHelper","fromList","anyword","closeCharacters","disable","myTick","finishUpdate","completeSingle","removeKeyMap","floor","term","substr","autocomplete","auto","combine","basePos","baseCur","overlayPos","overlayCur","streamSeen","combineTokens","blankLine","baseToken","overlayToken","conf","parserConf","ERRORCLASS","delimiters","identifiers","atProp","wordOperators","indentKeywords","commonKeywords","stringPrefixes","regexPrefixes","commonConstants","constants","scopeOffset","lineOffset","longComment","floatLiteral","intLiteral","tokenFactory","delimiter","singleline","outclass","singleLineStringErrors","alignOffset","_indent","matched","delimiter_index","external","fillAlign","closer","closes","doFold","noFold","regexpFlags","regexp","ensureFlags","maybeMultiline","searchRegexpForward","searchRegexpForwardMultiline","chunk","curLine","inside","startCh","lastMatchIn","endMargin","newMatch","searchRegexpBackward","searchRegexpBackwardMultiline","chunkSize","adjustPos","folded","foldFunc","mid","searchStringForward","cutFrom","searchStringBackward","topString","SearchCursor","atOccurrence","reverse","normalize","newText","origin","splitLines","defineDocExtension","htmlConfig","autoSelfClosers","implicitlyClosed","contextGrabbers","doNotIndent","allowUnquoted","allowMissing","xmlConfig","allowMissingTagName","editorConf","config_","setStyle","inText","chain","parser","ok","inBlock","inTag","baseState","tagName","tagStart","inAttribute","stringStartCol","closure","isInAttribute","terminator","noIndent","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","attrState","matchClosing","closeState","closeStateErr","attrEqState","attrValueState","attrContinuedState","isInText","baseIndent","fullLine","multilineTagIndentPastTag","multilineTagIndentFactor","alignCDATA","tagAfter","grabbers","configuration","skipAttribute","xmlCurrentTag","xmlCurrentContext","defaultTags","maybeBackup","pat","attrRegexpCache","getAttrRegexp","attr","getAttrValue","getTagRegexp","anchored","addTags","dest","findMatchingMode","tagInfo","tagText","configTags","configScript","scriptTypes","htmlState","modeSpec","endTagA","endTag","localMode","_vm","_h","$createElement","_c","_self","staticClass","ref","altOptions","cmOptions","stringValue","directives","rawName","$t","expression","fillTemplate","_e","_v","_s","$tc","lineCount","count","lang","language","staticRenderFns","component","handlebars_raw","handlebars","dash_comment","multiplexingMode","parseDelimiters","outer","others","arguments","pattern","returnEnd","innerActive","inner","curInner","oldContent","delimStyle","innerToken","innerStyle","cutOff","other","outerIndent","possibleOuterIndent","outerToken"],"mappings":"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","file":"js/chunk-3020ac28.a7656fdf.js","sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Define search commands. Depends on dialog.js or another\n// implementation of the openDialog method.\n\n// Replace works a little oddly -- it will do the replace on the next\n// Ctrl-G (or whatever is bound to findNext) press. You prevent a\n// replace by making sure the match is no longer selected when hitting\n// Ctrl-G.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./searchcursor\"), require(\"../dialog/dialog\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"./searchcursor\", \"../dialog/dialog\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  function searchOverlay(query, caseInsensitive) {\n    if (typeof query == \"string\")\n      query = new RegExp(query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\"), caseInsensitive ? \"gi\" : \"g\");\n    else if (!query.global)\n      query = new RegExp(query.source, query.ignoreCase ? \"gi\" : \"g\");\n\n    return {token: function(stream) {\n      query.lastIndex = stream.pos;\n      var match = query.exec(stream.string);\n      if (match && match.index == stream.pos) {\n        stream.pos += match[0].length || 1;\n        return \"searching\";\n      } else if (match) {\n        stream.pos = match.index;\n      } else {\n        stream.skipToEnd();\n      }\n    }};\n  }\n\n  function SearchState() {\n    this.posFrom = this.posTo = this.lastQuery = this.query = null;\n    this.overlay = null;\n  }\n\n  function getSearchState(cm) {\n    return cm.state.search || (cm.state.search = new SearchState());\n  }\n\n  function queryCaseInsensitive(query) {\n    return typeof query == \"string\" && query == query.toLowerCase();\n  }\n\n  function getSearchCursor(cm, query, pos) {\n    // Heuristic: if the query string is all lowercase, do a case insensitive search.\n    return cm.getSearchCursor(query, pos, {caseFold: queryCaseInsensitive(query), multiline: true});\n  }\n\n  function persistentDialog(cm, text, deflt, onEnter, onKeyDown) {\n    cm.openDialog(text, onEnter, {\n      value: deflt,\n      selectValueOnOpen: true,\n      closeOnEnter: false,\n      onClose: function() { clearSearch(cm); },\n      onKeyDown: onKeyDown\n    });\n  }\n\n  function dialog(cm, text, shortText, deflt, f) {\n    if (cm.openDialog) cm.openDialog(text, f, {value: deflt, selectValueOnOpen: true});\n    else f(prompt(shortText, deflt));\n  }\n\n  function confirmDialog(cm, text, shortText, fs) {\n    if (cm.openConfirm) cm.openConfirm(text, fs);\n    else if (confirm(shortText)) fs[0]();\n  }\n\n  function parseString(string) {\n    return string.replace(/\\\\([nrt\\\\])/g, function(match, ch) {\n      if (ch == \"n\") return \"\\n\"\n      if (ch == \"r\") return \"\\r\"\n      if (ch == \"t\") return \"\\t\"\n      if (ch == \"\\\\\") return \"\\\\\"\n      return match\n    })\n  }\n\n  function parseQuery(query) {\n    var isRE = query.match(/^\\/(.*)\\/([a-z]*)$/);\n    if (isRE) {\n      try { query = new RegExp(isRE[1], isRE[2].indexOf(\"i\") == -1 ? \"\" : \"i\"); }\n      catch(e) {} // Not a regular expression after all, do a string search\n    } else {\n      query = parseString(query)\n    }\n    if (typeof query == \"string\" ? query == \"\" : query.test(\"\"))\n      query = /x^/;\n    return query;\n  }\n\n  function startSearch(cm, state, query) {\n    state.queryText = query;\n    state.query = parseQuery(query);\n    cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query));\n    state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query));\n    cm.addOverlay(state.overlay);\n    if (cm.showMatchesOnScrollbar) {\n      if (state.annotate) { state.annotate.clear(); state.annotate = null; }\n      state.annotate = cm.showMatchesOnScrollbar(state.query, queryCaseInsensitive(state.query));\n    }\n  }\n\n  function doSearch(cm, rev, persistent, immediate) {\n    var state = getSearchState(cm);\n    if (state.query) return findNext(cm, rev);\n    var q = cm.getSelection() || state.lastQuery;\n    if (q instanceof RegExp && q.source == \"x^\") q = null\n    if (persistent && cm.openDialog) {\n      var hiding = null\n      var searchNext = function(query, event) {\n        CodeMirror.e_stop(event);\n        if (!query) return;\n        if (query != state.queryText) {\n          startSearch(cm, state, query);\n          state.posFrom = state.posTo = cm.getCursor();\n        }\n        if (hiding) hiding.style.opacity = 1\n        findNext(cm, event.shiftKey, function(_, to) {\n          var dialog\n          if (to.line < 3 && document.querySelector &&\n              (dialog = cm.display.wrapper.querySelector(\".CodeMirror-dialog\")) &&\n              dialog.getBoundingClientRect().bottom - 4 > cm.cursorCoords(to, \"window\").top)\n            (hiding = dialog).style.opacity = .4\n        })\n      };\n      persistentDialog(cm, getQueryDialog(cm), q, searchNext, function(event, query) {\n        var keyName = CodeMirror.keyName(event)\n        var extra = cm.getOption('extraKeys'), cmd = (extra && extra[keyName]) || CodeMirror.keyMap[cm.getOption(\"keyMap\")][keyName]\n        if (cmd == \"findNext\" || cmd == \"findPrev\" ||\n          cmd == \"findPersistentNext\" || cmd == \"findPersistentPrev\") {\n          CodeMirror.e_stop(event);\n          startSearch(cm, getSearchState(cm), query);\n          cm.execCommand(cmd);\n        } else if (cmd == \"find\" || cmd == \"findPersistent\") {\n          CodeMirror.e_stop(event);\n          searchNext(query, event);\n        }\n      });\n      if (immediate && q) {\n        startSearch(cm, state, q);\n        findNext(cm, rev);\n      }\n    } else {\n      dialog(cm, getQueryDialog(cm), \"Search for:\", q, function(query) {\n        if (query && !state.query) cm.operation(function() {\n          startSearch(cm, state, query);\n          state.posFrom = state.posTo = cm.getCursor();\n          findNext(cm, rev);\n        });\n      });\n    }\n  }\n\n  function findNext(cm, rev, callback) {cm.operation(function() {\n    var state = getSearchState(cm);\n    var cursor = getSearchCursor(cm, state.query, rev ? state.posFrom : state.posTo);\n    if (!cursor.find(rev)) {\n      cursor = getSearchCursor(cm, state.query, rev ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0));\n      if (!cursor.find(rev)) return;\n    }\n    cm.setSelection(cursor.from(), cursor.to());\n    cm.scrollIntoView({from: cursor.from(), to: cursor.to()}, 20);\n    state.posFrom = cursor.from(); state.posTo = cursor.to();\n    if (callback) callback(cursor.from(), cursor.to())\n  });}\n\n  function clearSearch(cm) {cm.operation(function() {\n    var state = getSearchState(cm);\n    state.lastQuery = state.query;\n    if (!state.query) return;\n    state.query = state.queryText = null;\n    cm.removeOverlay(state.overlay);\n    if (state.annotate) { state.annotate.clear(); state.annotate = null; }\n  });}\n\n\n  function getQueryDialog(cm)  {\n    return '<span class=\"CodeMirror-search-label\">' + cm.phrase(\"Search:\") + '</span> <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">' + cm.phrase(\"(Use /re/ syntax for regexp search)\") + '</span>';\n  }\n  function getReplaceQueryDialog(cm) {\n    return ' <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">' + cm.phrase(\"(Use /re/ syntax for regexp search)\") + '</span>';\n  }\n  function getReplacementQueryDialog(cm) {\n    return '<span class=\"CodeMirror-search-label\">' + cm.phrase(\"With:\") + '</span> <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/>';\n  }\n  function getDoReplaceConfirm(cm) {\n    return '<span class=\"CodeMirror-search-label\">' + cm.phrase(\"Replace?\") + '</span> <button>' + cm.phrase(\"Yes\") + '</button> <button>' + cm.phrase(\"No\") + '</button> <button>' + cm.phrase(\"All\") + '</button> <button>' + cm.phrase(\"Stop\") + '</button> ';\n  }\n\n  function replaceAll(cm, query, text) {\n    cm.operation(function() {\n      for (var cursor = getSearchCursor(cm, query); cursor.findNext();) {\n        if (typeof query != \"string\") {\n          var match = cm.getRange(cursor.from(), cursor.to()).match(query);\n          cursor.replace(text.replace(/\\$(\\d)/g, function(_, i) {return match[i];}));\n        } else cursor.replace(text);\n      }\n    });\n  }\n\n  function replace(cm, all) {\n    if (cm.getOption(\"readOnly\")) return;\n    var query = cm.getSelection() || getSearchState(cm).lastQuery;\n    var dialogText = '<span class=\"CodeMirror-search-label\">' + (all ? cm.phrase(\"Replace all:\") : cm.phrase(\"Replace:\")) + '</span>';\n    dialog(cm, dialogText + getReplaceQueryDialog(cm), dialogText, query, function(query) {\n      if (!query) return;\n      query = parseQuery(query);\n      dialog(cm, getReplacementQueryDialog(cm), cm.phrase(\"Replace with:\"), \"\", function(text) {\n        text = parseString(text)\n        if (all) {\n          replaceAll(cm, query, text)\n        } else {\n          clearSearch(cm);\n          var cursor = getSearchCursor(cm, query, cm.getCursor(\"from\"));\n          var advance = function() {\n            var start = cursor.from(), match;\n            if (!(match = cursor.findNext())) {\n              cursor = getSearchCursor(cm, query);\n              if (!(match = cursor.findNext()) ||\n                  (start && cursor.from().line == start.line && cursor.from().ch == start.ch)) return;\n            }\n            cm.setSelection(cursor.from(), cursor.to());\n            cm.scrollIntoView({from: cursor.from(), to: cursor.to()});\n            confirmDialog(cm, getDoReplaceConfirm(cm), cm.phrase(\"Replace?\"),\n                          [function() {doReplace(match);}, advance,\n                           function() {replaceAll(cm, query, text)}]);\n          };\n          var doReplace = function(match) {\n            cursor.replace(typeof query == \"string\" ? text :\n                           text.replace(/\\$(\\d)/g, function(_, i) {return match[i];}));\n            advance();\n          };\n          advance();\n        }\n      });\n    });\n  }\n\n  CodeMirror.commands.find = function(cm) {clearSearch(cm); doSearch(cm);};\n  CodeMirror.commands.findPersistent = function(cm) {clearSearch(cm); doSearch(cm, false, true);};\n  CodeMirror.commands.findPersistentNext = function(cm) {doSearch(cm, false, true, true);};\n  CodeMirror.commands.findPersistentPrev = function(cm) {doSearch(cm, true, true, true);};\n  CodeMirror.commands.findNext = doSearch;\n  CodeMirror.commands.findPrev = function(cm) {doSearch(cm, true);};\n  CodeMirror.commands.clearSearch = clearSearch;\n  CodeMirror.commands.replace = replace;\n  CodeMirror.commands.replaceAll = function(cm) {replace(cm, true);};\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../css/css\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../css/css\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"sass\", function(config) {\n  var cssMode = CodeMirror.mimeModes[\"text/css\"];\n  var propertyKeywords = cssMode.propertyKeywords || {},\n      colorKeywords = cssMode.colorKeywords || {},\n      valueKeywords = cssMode.valueKeywords || {},\n      fontProperties = cssMode.fontProperties || {};\n\n  function tokenRegexp(words) {\n    return new RegExp(\"^\" + words.join(\"|\"));\n  }\n\n  var keywords = [\"true\", \"false\", \"null\", \"auto\"];\n  var keywordsRegexp = new RegExp(\"^\" + keywords.join(\"|\"));\n\n  var operators = [\"\\\\(\", \"\\\\)\", \"=\", \">\", \"<\", \"==\", \">=\", \"<=\", \"\\\\+\", \"-\",\n                   \"\\\\!=\", \"/\", \"\\\\*\", \"%\", \"and\", \"or\", \"not\", \";\",\"\\\\{\",\"\\\\}\",\":\"];\n  var opRegexp = tokenRegexp(operators);\n\n  var pseudoElementsRegexp = /^::?[a-zA-Z_][\\w\\-]*/;\n\n  var word;\n\n  function isEndLine(stream) {\n    return !stream.peek() || stream.match(/\\s+$/, false);\n  }\n\n  function urlTokens(stream, state) {\n    var ch = stream.peek();\n\n    if (ch === \")\") {\n      stream.next();\n      state.tokenizer = tokenBase;\n      return \"operator\";\n    } else if (ch === \"(\") {\n      stream.next();\n      stream.eatSpace();\n\n      return \"operator\";\n    } else if (ch === \"'\" || ch === '\"') {\n      state.tokenizer = buildStringTokenizer(stream.next());\n      return \"string\";\n    } else {\n      state.tokenizer = buildStringTokenizer(\")\", false);\n      return \"string\";\n    }\n  }\n  function comment(indentation, multiLine) {\n    return function(stream, state) {\n      if (stream.sol() && stream.indentation() <= indentation) {\n        state.tokenizer = tokenBase;\n        return tokenBase(stream, state);\n      }\n\n      if (multiLine && stream.skipTo(\"*/\")) {\n        stream.next();\n        stream.next();\n        state.tokenizer = tokenBase;\n      } else {\n        stream.skipToEnd();\n      }\n\n      return \"comment\";\n    };\n  }\n\n  function buildStringTokenizer(quote, greedy) {\n    if (greedy == null) { greedy = true; }\n\n    function stringTokenizer(stream, state) {\n      var nextChar = stream.next();\n      var peekChar = stream.peek();\n      var previousChar = stream.string.charAt(stream.pos-2);\n\n      var endingString = ((nextChar !== \"\\\\\" && peekChar === quote) || (nextChar === quote && previousChar !== \"\\\\\"));\n\n      if (endingString) {\n        if (nextChar !== quote && greedy) { stream.next(); }\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        state.tokenizer = tokenBase;\n        return \"string\";\n      } else if (nextChar === \"#\" && peekChar === \"{\") {\n        state.tokenizer = buildInterpolationTokenizer(stringTokenizer);\n        stream.next();\n        return \"operator\";\n      } else {\n        return \"string\";\n      }\n    }\n\n    return stringTokenizer;\n  }\n\n  function buildInterpolationTokenizer(currentTokenizer) {\n    return function(stream, state) {\n      if (stream.peek() === \"}\") {\n        stream.next();\n        state.tokenizer = currentTokenizer;\n        return \"operator\";\n      } else {\n        return tokenBase(stream, state);\n      }\n    };\n  }\n\n  function indent(state) {\n    if (state.indentCount == 0) {\n      state.indentCount++;\n      var lastScopeOffset = state.scopes[0].offset;\n      var currentOffset = lastScopeOffset + config.indentUnit;\n      state.scopes.unshift({ offset:currentOffset });\n    }\n  }\n\n  function dedent(state) {\n    if (state.scopes.length == 1) return;\n\n    state.scopes.shift();\n  }\n\n  function tokenBase(stream, state) {\n    var ch = stream.peek();\n\n    // Comment\n    if (stream.match(\"/*\")) {\n      state.tokenizer = comment(stream.indentation(), true);\n      return state.tokenizer(stream, state);\n    }\n    if (stream.match(\"//\")) {\n      state.tokenizer = comment(stream.indentation(), false);\n      return state.tokenizer(stream, state);\n    }\n\n    // Interpolation\n    if (stream.match(\"#{\")) {\n      state.tokenizer = buildInterpolationTokenizer(tokenBase);\n      return \"operator\";\n    }\n\n    // Strings\n    if (ch === '\"' || ch === \"'\") {\n      stream.next();\n      state.tokenizer = buildStringTokenizer(ch);\n      return \"string\";\n    }\n\n    if(!state.cursorHalf){// state.cursorHalf === 0\n    // first half i.e. before : for key-value pairs\n    // including selectors\n\n      if (ch === \"-\") {\n        if (stream.match(/^-\\w+-/)) {\n          return \"meta\";\n        }\n      }\n\n      if (ch === \".\") {\n        stream.next();\n        if (stream.match(/^[\\w-]+/)) {\n          indent(state);\n          return \"qualifier\";\n        } else if (stream.peek() === \"#\") {\n          indent(state);\n          return \"tag\";\n        }\n      }\n\n      if (ch === \"#\") {\n        stream.next();\n        // ID selectors\n        if (stream.match(/^[\\w-]+/)) {\n          indent(state);\n          return \"builtin\";\n        }\n        if (stream.peek() === \"#\") {\n          indent(state);\n          return \"tag\";\n        }\n      }\n\n      // Variables\n      if (ch === \"$\") {\n        stream.next();\n        stream.eatWhile(/[\\w-]/);\n        return \"variable-2\";\n      }\n\n      // Numbers\n      if (stream.match(/^-?[0-9\\.]+/))\n        return \"number\";\n\n      // Units\n      if (stream.match(/^(px|em|in)\\b/))\n        return \"unit\";\n\n      if (stream.match(keywordsRegexp))\n        return \"keyword\";\n\n      if (stream.match(/^url/) && stream.peek() === \"(\") {\n        state.tokenizer = urlTokens;\n        return \"atom\";\n      }\n\n      if (ch === \"=\") {\n        // Match shortcut mixin definition\n        if (stream.match(/^=[\\w-]+/)) {\n          indent(state);\n          return \"meta\";\n        }\n      }\n\n      if (ch === \"+\") {\n        // Match shortcut mixin definition\n        if (stream.match(/^\\+[\\w-]+/)){\n          return \"variable-3\";\n        }\n      }\n\n      if(ch === \"@\"){\n        if(stream.match(/@extend/)){\n          if(!stream.match(/\\s*[\\w]/))\n            dedent(state);\n        }\n      }\n\n\n      // Indent Directives\n      if (stream.match(/^@(else if|if|media|else|for|each|while|mixin|function)/)) {\n        indent(state);\n        return \"def\";\n      }\n\n      // Other Directives\n      if (ch === \"@\") {\n        stream.next();\n        stream.eatWhile(/[\\w-]/);\n        return \"def\";\n      }\n\n      if (stream.eatWhile(/[\\w-]/)){\n        if(stream.match(/ *: *[\\w-\\+\\$#!\\(\"']/,false)){\n          word = stream.current().toLowerCase();\n          var prop = state.prevProp + \"-\" + word;\n          if (propertyKeywords.hasOwnProperty(prop)) {\n            return \"property\";\n          } else if (propertyKeywords.hasOwnProperty(word)) {\n            state.prevProp = word;\n            return \"property\";\n          } else if (fontProperties.hasOwnProperty(word)) {\n            return \"property\";\n          }\n          return \"tag\";\n        }\n        else if(stream.match(/ *:/,false)){\n          indent(state);\n          state.cursorHalf = 1;\n          state.prevProp = stream.current().toLowerCase();\n          return \"property\";\n        }\n        else if(stream.match(/ *,/,false)){\n          return \"tag\";\n        }\n        else{\n          indent(state);\n          return \"tag\";\n        }\n      }\n\n      if(ch === \":\"){\n        if (stream.match(pseudoElementsRegexp)){ // could be a pseudo-element\n          return \"variable-3\";\n        }\n        stream.next();\n        state.cursorHalf=1;\n        return \"operator\";\n      }\n\n    } // cursorHalf===0 ends here\n    else{\n\n      if (ch === \"#\") {\n        stream.next();\n        // Hex numbers\n        if (stream.match(/[0-9a-fA-F]{6}|[0-9a-fA-F]{3}/)){\n          if (isEndLine(stream)) {\n            state.cursorHalf = 0;\n          }\n          return \"number\";\n        }\n      }\n\n      // Numbers\n      if (stream.match(/^-?[0-9\\.]+/)){\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        return \"number\";\n      }\n\n      // Units\n      if (stream.match(/^(px|em|in)\\b/)){\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        return \"unit\";\n      }\n\n      if (stream.match(keywordsRegexp)){\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        return \"keyword\";\n      }\n\n      if (stream.match(/^url/) && stream.peek() === \"(\") {\n        state.tokenizer = urlTokens;\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        return \"atom\";\n      }\n\n      // Variables\n      if (ch === \"$\") {\n        stream.next();\n        stream.eatWhile(/[\\w-]/);\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        return \"variable-2\";\n      }\n\n      // bang character for !important, !default, etc.\n      if (ch === \"!\") {\n        stream.next();\n        state.cursorHalf = 0;\n        return stream.match(/^[\\w]+/) ? \"keyword\": \"operator\";\n      }\n\n      if (stream.match(opRegexp)){\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        return \"operator\";\n      }\n\n      // attributes\n      if (stream.eatWhile(/[\\w-]/)) {\n        if (isEndLine(stream)) {\n          state.cursorHalf = 0;\n        }\n        word = stream.current().toLowerCase();\n        if (valueKeywords.hasOwnProperty(word)) {\n          return \"atom\";\n        } else if (colorKeywords.hasOwnProperty(word)) {\n          return \"keyword\";\n        } else if (propertyKeywords.hasOwnProperty(word)) {\n          state.prevProp = stream.current().toLowerCase();\n          return \"property\";\n        } else {\n          return \"tag\";\n        }\n      }\n\n      //stream.eatSpace();\n      if (isEndLine(stream)) {\n        state.cursorHalf = 0;\n        return null;\n      }\n\n    } // else ends here\n\n    if (stream.match(opRegexp))\n      return \"operator\";\n\n    // If we haven't returned by now, we move 1 character\n    // and return an error\n    stream.next();\n    return null;\n  }\n\n  function tokenLexer(stream, state) {\n    if (stream.sol()) state.indentCount = 0;\n    var style = state.tokenizer(stream, state);\n    var current = stream.current();\n\n    if (current === \"@return\" || current === \"}\"){\n      dedent(state);\n    }\n\n    if (style !== null) {\n      var startOfToken = stream.pos - current.length;\n\n      var withCurrentIndent = startOfToken + (config.indentUnit * state.indentCount);\n\n      var newScopes = [];\n\n      for (var i = 0; i < state.scopes.length; i++) {\n        var scope = state.scopes[i];\n\n        if (scope.offset <= withCurrentIndent)\n          newScopes.push(scope);\n      }\n\n      state.scopes = newScopes;\n    }\n\n\n    return style;\n  }\n\n  return {\n    startState: function() {\n      return {\n        tokenizer: tokenBase,\n        scopes: [{offset: 0, type: \"sass\"}],\n        indentCount: 0,\n        cursorHalf: 0,  // cursor half tells us if cursor lies after (1)\n                        // or before (0) colon (well... more or less)\n        definedVars: [],\n        definedMixins: []\n      };\n    },\n    token: function(stream, state) {\n      var style = tokenLexer(stream, state);\n\n      state.lastToken = { style: style, content: stream.current() };\n\n      return style;\n    },\n\n    indent: function(state) {\n      return state.scopes[0].offset;\n    }\n  };\n}, \"css\");\n\nCodeMirror.defineMIME(\"text/x-sass\", \"sass\");\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Highlighting text that matches the selection\n//\n// Defines an option highlightSelectionMatches, which, when enabled,\n// will style strings that match the selection throughout the\n// document.\n//\n// The option can be set to true to simply enable it, or to a\n// {minChars, style, wordsOnly, showToken, delay} object to explicitly\n// configure it. minChars is the minimum amount of characters that should be\n// selected for the behavior to occur, and style is the token style to\n// apply to the matches. This will be prefixed by \"cm-\" to create an\n// actual CSS class name. If wordsOnly is enabled, the matches will be\n// highlighted only if the selected text is a word. showToken, when enabled,\n// will cause the current token to be highlighted when nothing is selected.\n// delay is used to specify how much time to wait, in milliseconds, before\n// highlighting the matches. If annotateScrollbar is enabled, the occurences\n// will be highlighted on the scrollbar via the matchesonscrollbar addon.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./matchesonscrollbar\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"./matchesonscrollbar\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var defaults = {\n    style: \"matchhighlight\",\n    minChars: 2,\n    delay: 100,\n    wordsOnly: false,\n    annotateScrollbar: false,\n    showToken: false,\n    trim: true\n  }\n\n  function State(options) {\n    this.options = {}\n    for (var name in defaults)\n      this.options[name] = (options && options.hasOwnProperty(name) ? options : defaults)[name]\n    this.overlay = this.timeout = null;\n    this.matchesonscroll = null;\n    this.active = false;\n  }\n\n  CodeMirror.defineOption(\"highlightSelectionMatches\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      removeOverlay(cm);\n      clearTimeout(cm.state.matchHighlighter.timeout);\n      cm.state.matchHighlighter = null;\n      cm.off(\"cursorActivity\", cursorActivity);\n      cm.off(\"focus\", onFocus)\n    }\n    if (val) {\n      var state = cm.state.matchHighlighter = new State(val);\n      if (cm.hasFocus()) {\n        state.active = true\n        highlightMatches(cm)\n      } else {\n        cm.on(\"focus\", onFocus)\n      }\n      cm.on(\"cursorActivity\", cursorActivity);\n    }\n  });\n\n  function cursorActivity(cm) {\n    var state = cm.state.matchHighlighter;\n    if (state.active || cm.hasFocus()) scheduleHighlight(cm, state)\n  }\n\n  function onFocus(cm) {\n    var state = cm.state.matchHighlighter\n    if (!state.active) {\n      state.active = true\n      scheduleHighlight(cm, state)\n    }\n  }\n\n  function scheduleHighlight(cm, state) {\n    clearTimeout(state.timeout);\n    state.timeout = setTimeout(function() {highlightMatches(cm);}, state.options.delay);\n  }\n\n  function addOverlay(cm, query, hasBoundary, style) {\n    var state = cm.state.matchHighlighter;\n    cm.addOverlay(state.overlay = makeOverlay(query, hasBoundary, style));\n    if (state.options.annotateScrollbar && cm.showMatchesOnScrollbar) {\n      var searchFor = hasBoundary ? new RegExp(\"\\\\b\" + query.replace(/[\\\\\\[.+*?(){|^$]/g, \"\\\\$&\") + \"\\\\b\") : query;\n      state.matchesonscroll = cm.showMatchesOnScrollbar(searchFor, false,\n        {className: \"CodeMirror-selection-highlight-scrollbar\"});\n    }\n  }\n\n  function removeOverlay(cm) {\n    var state = cm.state.matchHighlighter;\n    if (state.overlay) {\n      cm.removeOverlay(state.overlay);\n      state.overlay = null;\n      if (state.matchesonscroll) {\n        state.matchesonscroll.clear();\n        state.matchesonscroll = null;\n      }\n    }\n  }\n\n  function highlightMatches(cm) {\n    cm.operation(function() {\n      var state = cm.state.matchHighlighter;\n      removeOverlay(cm);\n      if (!cm.somethingSelected() && state.options.showToken) {\n        var re = state.options.showToken === true ? /[\\w$]/ : state.options.showToken;\n        var cur = cm.getCursor(), line = cm.getLine(cur.line), start = cur.ch, end = start;\n        while (start && re.test(line.charAt(start - 1))) --start;\n        while (end < line.length && re.test(line.charAt(end))) ++end;\n        if (start < end)\n          addOverlay(cm, line.slice(start, end), re, state.options.style);\n        return;\n      }\n      var from = cm.getCursor(\"from\"), to = cm.getCursor(\"to\");\n      if (from.line != to.line) return;\n      if (state.options.wordsOnly && !isWord(cm, from, to)) return;\n      var selection = cm.getRange(from, to)\n      if (state.options.trim) selection = selection.replace(/^\\s+|\\s+$/g, \"\")\n      if (selection.length >= state.options.minChars)\n        addOverlay(cm, selection, false, state.options.style);\n    });\n  }\n\n  function isWord(cm, from, to) {\n    var str = cm.getRange(from, to);\n    if (str.match(/^\\w+$/) !== null) {\n        if (from.ch > 0) {\n            var pos = {line: from.line, ch: from.ch - 1};\n            var chr = cm.getRange(pos, from);\n            if (chr.match(/\\W/) === null) return false;\n        }\n        if (to.ch < cm.getLine(from.line).length) {\n            var pos = {line: to.line, ch: to.ch + 1};\n            var chr = cm.getRange(to, pos);\n            if (chr.match(/\\W/) === null) return false;\n        }\n        return true;\n    } else return false;\n  }\n\n  function boundariesAround(stream, re) {\n    return (!stream.start || !re.test(stream.string.charAt(stream.start - 1))) &&\n      (stream.pos == stream.string.length || !re.test(stream.string.charAt(stream.pos)));\n  }\n\n  function makeOverlay(query, hasBoundary, style) {\n    return {token: function(stream) {\n      if (stream.match(query) &&\n          (!hasBoundary || boundariesAround(stream, hasBoundary)))\n        return style;\n      stream.next();\n      stream.skipTo(query.charAt(0)) || stream.skipToEnd();\n    }};\n  }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Open simple dialogs on top of an editor. Relies on dialog.css.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  function dialogDiv(cm, template, bottom) {\n    var wrap = cm.getWrapperElement();\n    var dialog;\n    dialog = wrap.appendChild(document.createElement(\"div\"));\n    if (bottom)\n      dialog.className = \"CodeMirror-dialog CodeMirror-dialog-bottom\";\n    else\n      dialog.className = \"CodeMirror-dialog CodeMirror-dialog-top\";\n\n    if (typeof template == \"string\") {\n      dialog.innerHTML = template;\n    } else { // Assuming it's a detached DOM element.\n      dialog.appendChild(template);\n    }\n    CodeMirror.addClass(wrap, 'dialog-opened');\n    return dialog;\n  }\n\n  function closeNotification(cm, newVal) {\n    if (cm.state.currentNotificationClose)\n      cm.state.currentNotificationClose();\n    cm.state.currentNotificationClose = newVal;\n  }\n\n  CodeMirror.defineExtension(\"openDialog\", function(template, callback, options) {\n    if (!options) options = {};\n\n    closeNotification(this, null);\n\n    var dialog = dialogDiv(this, template, options.bottom);\n    var closed = false, me = this;\n    function close(newVal) {\n      if (typeof newVal == 'string') {\n        inp.value = newVal;\n      } else {\n        if (closed) return;\n        closed = true;\n        CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');\n        dialog.parentNode.removeChild(dialog);\n        me.focus();\n\n        if (options.onClose) options.onClose(dialog);\n      }\n    }\n\n    var inp = dialog.getElementsByTagName(\"input\")[0], button;\n    if (inp) {\n      inp.focus();\n\n      if (options.value) {\n        inp.value = options.value;\n        if (options.selectValueOnOpen !== false) {\n          inp.select();\n        }\n      }\n\n      if (options.onInput)\n        CodeMirror.on(inp, \"input\", function(e) { options.onInput(e, inp.value, close);});\n      if (options.onKeyUp)\n        CodeMirror.on(inp, \"keyup\", function(e) {options.onKeyUp(e, inp.value, close);});\n\n      CodeMirror.on(inp, \"keydown\", function(e) {\n        if (options && options.onKeyDown && options.onKeyDown(e, inp.value, close)) { return; }\n        if (e.keyCode == 27 || (options.closeOnEnter !== false && e.keyCode == 13)) {\n          inp.blur();\n          CodeMirror.e_stop(e);\n          close();\n        }\n        if (e.keyCode == 13) callback(inp.value, e);\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(inp, \"blur\", close);\n    } else if (button = dialog.getElementsByTagName(\"button\")[0]) {\n      CodeMirror.on(button, \"click\", function() {\n        close();\n        me.focus();\n      });\n\n      if (options.closeOnBlur !== false) CodeMirror.on(button, \"blur\", close);\n\n      button.focus();\n    }\n    return close;\n  });\n\n  CodeMirror.defineExtension(\"openConfirm\", function(template, callbacks, options) {\n    closeNotification(this, null);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var buttons = dialog.getElementsByTagName(\"button\");\n    var closed = false, me = this, blurring = 1;\n    function close() {\n      if (closed) return;\n      closed = true;\n      CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');\n      dialog.parentNode.removeChild(dialog);\n      me.focus();\n    }\n    buttons[0].focus();\n    for (var i = 0; i < buttons.length; ++i) {\n      var b = buttons[i];\n      (function(callback) {\n        CodeMirror.on(b, \"click\", function(e) {\n          CodeMirror.e_preventDefault(e);\n          close();\n          if (callback) callback(me);\n        });\n      })(callbacks[i]);\n      CodeMirror.on(b, \"blur\", function() {\n        --blurring;\n        setTimeout(function() { if (blurring <= 0) close(); }, 200);\n      });\n      CodeMirror.on(b, \"focus\", function() { ++blurring; });\n    }\n  });\n\n  /*\n   * openNotification\n   * Opens a notification, that can be closed with an optional timer\n   * (default 5000ms timer) and always closes on click.\n   *\n   * If a notification is opened while another is opened, it will close the\n   * currently opened one and open the new one immediately.\n   */\n  CodeMirror.defineExtension(\"openNotification\", function(template, options) {\n    closeNotification(this, close);\n    var dialog = dialogDiv(this, template, options && options.bottom);\n    var closed = false, doneTimer;\n    var duration = options && typeof options.duration !== \"undefined\" ? options.duration : 5000;\n\n    function close() {\n      if (closed) return;\n      closed = true;\n      clearTimeout(doneTimer);\n      CodeMirror.rmClass(dialog.parentNode, 'dialog-opened');\n      dialog.parentNode.removeChild(dialog);\n    }\n\n    CodeMirror.on(dialog, 'click', function(e) {\n      CodeMirror.e_preventDefault(e);\n      close();\n    });\n\n    if (duration)\n      doneTimer = setTimeout(close, duration);\n\n    return close;\n  });\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n  var WRAP_CLASS = \"CodeMirror-activeline\";\n  var BACK_CLASS = \"CodeMirror-activeline-background\";\n  var GUTT_CLASS = \"CodeMirror-activeline-gutter\";\n\n  CodeMirror.defineOption(\"styleActiveLine\", false, function(cm, val, old) {\n    var prev = old == CodeMirror.Init ? false : old;\n    if (val == prev) return\n    if (prev) {\n      cm.off(\"beforeSelectionChange\", selectionChange);\n      clearActiveLines(cm);\n      delete cm.state.activeLines;\n    }\n    if (val) {\n      cm.state.activeLines = [];\n      updateActiveLines(cm, cm.listSelections());\n      cm.on(\"beforeSelectionChange\", selectionChange);\n    }\n  });\n\n  function clearActiveLines(cm) {\n    for (var i = 0; i < cm.state.activeLines.length; i++) {\n      cm.removeLineClass(cm.state.activeLines[i], \"wrap\", WRAP_CLASS);\n      cm.removeLineClass(cm.state.activeLines[i], \"background\", BACK_CLASS);\n      cm.removeLineClass(cm.state.activeLines[i], \"gutter\", GUTT_CLASS);\n    }\n  }\n\n  function sameArray(a, b) {\n    if (a.length != b.length) return false;\n    for (var i = 0; i < a.length; i++)\n      if (a[i] != b[i]) return false;\n    return true;\n  }\n\n  function updateActiveLines(cm, ranges) {\n    var active = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i];\n      var option = cm.getOption(\"styleActiveLine\");\n      if (typeof option == \"object\" && option.nonEmpty ? range.anchor.line != range.head.line : !range.empty())\n        continue\n      var line = cm.getLineHandleVisualStart(range.head.line);\n      if (active[active.length - 1] != line) active.push(line);\n    }\n    if (sameArray(cm.state.activeLines, active)) return;\n    cm.operation(function() {\n      clearActiveLines(cm);\n      for (var i = 0; i < active.length; i++) {\n        cm.addLineClass(active[i], \"wrap\", WRAP_CLASS);\n        cm.addLineClass(active[i], \"background\", BACK_CLASS);\n        cm.addLineClass(active[i], \"gutter\", GUTT_CLASS);\n      }\n      cm.state.activeLines = active;\n    });\n  }\n\n  function selectionChange(cm, sel) {\n    updateActiveLines(cm, sel.ranges);\n  }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  var Pos = CodeMirror.Pos;\n\n  function forEach(arr, f) {\n    for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]);\n  }\n\n  function arrayContains(arr, item) {\n    if (!Array.prototype.indexOf) {\n      var i = arr.length;\n      while (i--) {\n        if (arr[i] === item) {\n          return true;\n        }\n      }\n      return false;\n    }\n    return arr.indexOf(item) != -1;\n  }\n\n  function scriptHint(editor, keywords, getToken, options) {\n    // Find the token at the cursor\n    var cur = editor.getCursor(), token = getToken(editor, cur);\n    if (/\\b(?:string|comment)\\b/.test(token.type)) return;\n    var innerMode = CodeMirror.innerMode(editor.getMode(), token.state);\n    if (innerMode.mode.helperType === \"json\") return;\n    token.state = innerMode.state;\n\n    // If it's not a 'word-style' token, ignore the token.\n    if (!/^[\\w$_]*$/.test(token.string)) {\n      token = {start: cur.ch, end: cur.ch, string: \"\", state: token.state,\n               type: token.string == \".\" ? \"property\" : null};\n    } else if (token.end > cur.ch) {\n      token.end = cur.ch;\n      token.string = token.string.slice(0, cur.ch - token.start);\n    }\n\n    var tprop = token;\n    // If it is a property, find out what it is a property of.\n    while (tprop.type == \"property\") {\n      tprop = getToken(editor, Pos(cur.line, tprop.start));\n      if (tprop.string != \".\") return;\n      tprop = getToken(editor, Pos(cur.line, tprop.start));\n      if (!context) var context = [];\n      context.push(tprop);\n    }\n    return {list: getCompletions(token, context, keywords, options),\n            from: Pos(cur.line, token.start),\n            to: Pos(cur.line, token.end)};\n  }\n\n  function javascriptHint(editor, options) {\n    return scriptHint(editor, javascriptKeywords,\n                      function (e, cur) {return e.getTokenAt(cur);},\n                      options);\n  };\n  CodeMirror.registerHelper(\"hint\", \"javascript\", javascriptHint);\n\n  function getCoffeeScriptToken(editor, cur) {\n  // This getToken, it is for coffeescript, imitates the behavior of\n  // getTokenAt method in javascript.js, that is, returning \"property\"\n  // type and treat \".\" as indepenent token.\n    var token = editor.getTokenAt(cur);\n    if (cur.ch == token.start + 1 && token.string.charAt(0) == '.') {\n      token.end = token.start;\n      token.string = '.';\n      token.type = \"property\";\n    }\n    else if (/^\\.[\\w$_]*$/.test(token.string)) {\n      token.type = \"property\";\n      token.start++;\n      token.string = token.string.replace(/\\./, '');\n    }\n    return token;\n  }\n\n  function coffeescriptHint(editor, options) {\n    return scriptHint(editor, coffeescriptKeywords, getCoffeeScriptToken, options);\n  }\n  CodeMirror.registerHelper(\"hint\", \"coffeescript\", coffeescriptHint);\n\n  var stringProps = (\"charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight \" +\n                     \"toUpperCase toLowerCase split concat match replace search\").split(\" \");\n  var arrayProps = (\"length concat join splice push pop shift unshift slice reverse sort indexOf \" +\n                    \"lastIndexOf every some filter forEach map reduce reduceRight \").split(\" \");\n  var funcProps = \"prototype apply call bind\".split(\" \");\n  var javascriptKeywords = (\"break case catch class const continue debugger default delete do else export extends false finally for function \" +\n                  \"if in import instanceof new null return super switch this throw true try typeof var void while with yield\").split(\" \");\n  var coffeescriptKeywords = (\"and break catch class continue delete do else extends false finally for \" +\n                  \"if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes\").split(\" \");\n\n  function forAllProps(obj, callback) {\n    if (!Object.getOwnPropertyNames || !Object.getPrototypeOf) {\n      for (var name in obj) callback(name)\n    } else {\n      for (var o = obj; o; o = Object.getPrototypeOf(o))\n        Object.getOwnPropertyNames(o).forEach(callback)\n    }\n  }\n\n  function getCompletions(token, context, keywords, options) {\n    var found = [], start = token.string, global = options && options.globalScope || window;\n    function maybeAdd(str) {\n      if (str.lastIndexOf(start, 0) == 0 && !arrayContains(found, str)) found.push(str);\n    }\n    function gatherCompletions(obj) {\n      if (typeof obj == \"string\") forEach(stringProps, maybeAdd);\n      else if (obj instanceof Array) forEach(arrayProps, maybeAdd);\n      else if (obj instanceof Function) forEach(funcProps, maybeAdd);\n      forAllProps(obj, maybeAdd)\n    }\n\n    if (context && context.length) {\n      // If this is a property, see if it belongs to some object we can\n      // find in the current environment.\n      var obj = context.pop(), base;\n      if (obj.type && obj.type.indexOf(\"variable\") === 0) {\n        if (options && options.additionalContext)\n          base = options.additionalContext[obj.string];\n        if (!options || options.useGlobalScope !== false)\n          base = base || global[obj.string];\n      } else if (obj.type == \"string\") {\n        base = \"\";\n      } else if (obj.type == \"atom\") {\n        base = 1;\n      } else if (obj.type == \"function\") {\n        if (global.jQuery != null && (obj.string == '$' || obj.string == 'jQuery') &&\n            (typeof global.jQuery == 'function'))\n          base = global.jQuery();\n        else if (global._ != null && (obj.string == '_') && (typeof global._ == 'function'))\n          base = global._();\n      }\n      while (base != null && context.length)\n        base = base[context.pop().string];\n      if (base != null) gatherCompletions(base);\n    } else {\n      // If not, just look in the global object and any local scope\n      // (reading into JS mode internals to get at the local and global variables)\n      for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name);\n      for (var c = token.state.context; c; c = c.prev)\n        for (var v = c.vars; v; v = v.next) maybeAdd(v.name)\n      for (var v = token.state.globalVars; v; v = v.next) maybeAdd(v.name);\n      if (!options || options.useGlobalScope !== false)\n        gatherCompletions(global);\n      forEach(keywords, maybeAdd);\n    }\n    return found;\n  }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../htmlmixed/htmlmixed\"), require(\"../clike/clike\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../htmlmixed/htmlmixed\", \"../clike/clike\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  function keywords(str) {\n    var obj = {}, words = str.split(\" \");\n    for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n    return obj;\n  }\n\n  // Helper for phpString\n  function matchSequence(list, end, escapes) {\n    if (list.length == 0) return phpString(end);\n    return function (stream, state) {\n      var patterns = list[0];\n      for (var i = 0; i < patterns.length; i++) if (stream.match(patterns[i][0])) {\n        state.tokenize = matchSequence(list.slice(1), end);\n        return patterns[i][1];\n      }\n      state.tokenize = phpString(end, escapes);\n      return \"string\";\n    };\n  }\n  function phpString(closing, escapes) {\n    return function(stream, state) { return phpString_(stream, state, closing, escapes); };\n  }\n  function phpString_(stream, state, closing, escapes) {\n    // \"Complex\" syntax\n    if (escapes !== false && stream.match(\"${\", false) || stream.match(\"{$\", false)) {\n      state.tokenize = null;\n      return \"string\";\n    }\n\n    // Simple syntax\n    if (escapes !== false && stream.match(/^\\$[a-zA-Z_][a-zA-Z0-9_]*/)) {\n      // After the variable name there may appear array or object operator.\n      if (stream.match(\"[\", false)) {\n        // Match array operator\n        state.tokenize = matchSequence([\n          [[\"[\", null]],\n          [[/\\d[\\w\\.]*/, \"number\"],\n           [/\\$[a-zA-Z_][a-zA-Z0-9_]*/, \"variable-2\"],\n           [/[\\w\\$]+/, \"variable\"]],\n          [[\"]\", null]]\n        ], closing, escapes);\n      }\n      if (stream.match(/\\-\\>\\w/, false)) {\n        // Match object operator\n        state.tokenize = matchSequence([\n          [[\"->\", null]],\n          [[/[\\w]+/, \"variable\"]]\n        ], closing, escapes);\n      }\n      return \"variable-2\";\n    }\n\n    var escaped = false;\n    // Normal string\n    while (!stream.eol() &&\n           (escaped || escapes === false ||\n            (!stream.match(\"{$\", false) &&\n             !stream.match(/^(\\$[a-zA-Z_][a-zA-Z0-9_]*|\\$\\{)/, false)))) {\n      if (!escaped && stream.match(closing)) {\n        state.tokenize = null;\n        state.tokStack.pop(); state.tokStack.pop();\n        break;\n      }\n      escaped = stream.next() == \"\\\\\" && !escaped;\n    }\n    return \"string\";\n  }\n\n  var phpKeywords = \"abstract and array as break case catch class clone const continue declare default \" +\n    \"do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final \" +\n    \"for foreach function global goto if implements interface instanceof namespace \" +\n    \"new or private protected public static switch throw trait try use var while xor \" +\n    \"die echo empty exit eval include include_once isset list require require_once return \" +\n    \"print unset __halt_compiler self static parent yield insteadof finally\";\n  var phpAtoms = \"true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__\";\n  var phpBuiltin = \"func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count\";\n  CodeMirror.registerHelper(\"hintWords\", \"php\", [phpKeywords, phpAtoms, phpBuiltin].join(\" \").split(\" \"));\n  CodeMirror.registerHelper(\"wordChars\", \"php\", /[\\w$]/);\n\n  var phpConfig = {\n    name: \"clike\",\n    helperType: \"php\",\n    keywords: keywords(phpKeywords),\n    blockKeywords: keywords(\"catch do else elseif for foreach if switch try while finally\"),\n    defKeywords: keywords(\"class function interface namespace trait\"),\n    atoms: keywords(phpAtoms),\n    builtin: keywords(phpBuiltin),\n    multiLineStrings: true,\n    hooks: {\n      \"$\": function(stream) {\n        stream.eatWhile(/[\\w\\$_]/);\n        return \"variable-2\";\n      },\n      \"<\": function(stream, state) {\n        var before;\n        if (before = stream.match(/<<\\s*/)) {\n          var quoted = stream.eat(/['\"]/);\n          stream.eatWhile(/[\\w\\.]/);\n          var delim = stream.current().slice(before[0].length + (quoted ? 2 : 1));\n          if (quoted) stream.eat(quoted);\n          if (delim) {\n            (state.tokStack || (state.tokStack = [])).push(delim, 0);\n            state.tokenize = phpString(delim, quoted != \"'\");\n            return \"string\";\n          }\n        }\n        return false;\n      },\n      \"#\": function(stream) {\n        while (!stream.eol() && !stream.match(\"?>\", false)) stream.next();\n        return \"comment\";\n      },\n      \"/\": function(stream) {\n        if (stream.eat(\"/\")) {\n          while (!stream.eol() && !stream.match(\"?>\", false)) stream.next();\n          return \"comment\";\n        }\n        return false;\n      },\n      '\"': function(_stream, state) {\n        (state.tokStack || (state.tokStack = [])).push('\"', 0);\n        state.tokenize = phpString('\"');\n        return \"string\";\n      },\n      \"{\": function(_stream, state) {\n        if (state.tokStack && state.tokStack.length)\n          state.tokStack[state.tokStack.length - 1]++;\n        return false;\n      },\n      \"}\": function(_stream, state) {\n        if (state.tokStack && state.tokStack.length > 0 &&\n            !--state.tokStack[state.tokStack.length - 1]) {\n          state.tokenize = phpString(state.tokStack[state.tokStack.length - 2]);\n        }\n        return false;\n      }\n    }\n  };\n\n  CodeMirror.defineMode(\"php\", function(config, parserConfig) {\n    var htmlMode = CodeMirror.getMode(config, (parserConfig && parserConfig.htmlMode) || \"text/html\");\n    var phpMode = CodeMirror.getMode(config, phpConfig);\n\n    function dispatch(stream, state) {\n      var isPHP = state.curMode == phpMode;\n      if (stream.sol() && state.pending && state.pending != '\"' && state.pending != \"'\") state.pending = null;\n      if (!isPHP) {\n        if (stream.match(/^<\\?\\w*/)) {\n          state.curMode = phpMode;\n          if (!state.php) state.php = CodeMirror.startState(phpMode, htmlMode.indent(state.html, \"\", \"\"))\n          state.curState = state.php;\n          return \"meta\";\n        }\n        if (state.pending == '\"' || state.pending == \"'\") {\n          while (!stream.eol() && stream.next() != state.pending) {}\n          var style = \"string\";\n        } else if (state.pending && stream.pos < state.pending.end) {\n          stream.pos = state.pending.end;\n          var style = state.pending.style;\n        } else {\n          var style = htmlMode.token(stream, state.curState);\n        }\n        if (state.pending) state.pending = null;\n        var cur = stream.current(), openPHP = cur.search(/<\\?/), m;\n        if (openPHP != -1) {\n          if (style == \"string\" && (m = cur.match(/[\\'\\\"]$/)) && !/\\?>/.test(cur)) state.pending = m[0];\n          else state.pending = {end: stream.pos, style: style};\n          stream.backUp(cur.length - openPHP);\n        }\n        return style;\n      } else if (isPHP && state.php.tokenize == null && stream.match(\"?>\")) {\n        state.curMode = htmlMode;\n        state.curState = state.html;\n        if (!state.php.context.prev) state.php = null;\n        return \"meta\";\n      } else {\n        return phpMode.token(stream, state.curState);\n      }\n    }\n\n    return {\n      startState: function() {\n        var html = CodeMirror.startState(htmlMode)\n        var php = parserConfig.startOpen ? CodeMirror.startState(phpMode) : null\n        return {html: html,\n                php: php,\n                curMode: parserConfig.startOpen ? phpMode : htmlMode,\n                curState: parserConfig.startOpen ? php : html,\n                pending: null};\n      },\n\n      copyState: function(state) {\n        var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html),\n            php = state.php, phpNew = php && CodeMirror.copyState(phpMode, php), cur;\n        if (state.curMode == htmlMode) cur = htmlNew;\n        else cur = phpNew;\n        return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur,\n                pending: state.pending};\n      },\n\n      token: dispatch,\n\n      indent: function(state, textAfter, line) {\n        if ((state.curMode != phpMode && /^\\s*<\\//.test(textAfter)) ||\n            (state.curMode == phpMode && /^\\?>/.test(textAfter)))\n          return htmlMode.indent(state.html, textAfter, line);\n        return state.curMode.indent(state.curState, textAfter, line);\n      },\n\n      blockCommentStart: \"/*\",\n      blockCommentEnd: \"*/\",\n      lineComment: \"//\",\n\n      innerMode: function(state) { return {state: state.curState, mode: state.curMode}; }\n    };\n  }, \"htmlmixed\", \"clike\");\n\n  CodeMirror.defineMIME(\"application/x-httpd-php\", \"php\");\n  CodeMirror.defineMIME(\"application/x-httpd-php-open\", {name: \"php\", startOpen: true});\n  CodeMirror.defineMIME(\"text/x-php\", phpConfig);\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nfunction Context(indented, column, type, info, align, prev) {\n  this.indented = indented;\n  this.column = column;\n  this.type = type;\n  this.info = info;\n  this.align = align;\n  this.prev = prev;\n}\nfunction pushContext(state, col, type, info) {\n  var indent = state.indented;\n  if (state.context && state.context.type == \"statement\" && type != \"statement\")\n    indent = state.context.indented;\n  return state.context = new Context(indent, col, type, info, null, state.context);\n}\nfunction popContext(state) {\n  var t = state.context.type;\n  if (t == \")\" || t == \"]\" || t == \"}\")\n    state.indented = state.context.indented;\n  return state.context = state.context.prev;\n}\n\nfunction typeBefore(stream, state, pos) {\n  if (state.prevToken == \"variable\" || state.prevToken == \"type\") return true;\n  if (/\\S(?:[^- ]>|[*\\]])\\s*$|\\*$/.test(stream.string.slice(0, pos))) return true;\n  if (state.typeAtEndOfLine && stream.column() == stream.indentation()) return true;\n}\n\nfunction isTopScope(context) {\n  for (;;) {\n    if (!context || context.type == \"top\") return true;\n    if (context.type == \"}\" && context.prev.info != \"namespace\") return false;\n    context = context.prev;\n  }\n}\n\nCodeMirror.defineMode(\"clike\", function(config, parserConfig) {\n  var indentUnit = config.indentUnit,\n      statementIndentUnit = parserConfig.statementIndentUnit || indentUnit,\n      dontAlignCalls = parserConfig.dontAlignCalls,\n      keywords = parserConfig.keywords || {},\n      types = parserConfig.types || {},\n      builtin = parserConfig.builtin || {},\n      blockKeywords = parserConfig.blockKeywords || {},\n      defKeywords = parserConfig.defKeywords || {},\n      atoms = parserConfig.atoms || {},\n      hooks = parserConfig.hooks || {},\n      multiLineStrings = parserConfig.multiLineStrings,\n      indentStatements = parserConfig.indentStatements !== false,\n      indentSwitch = parserConfig.indentSwitch !== false,\n      namespaceSeparator = parserConfig.namespaceSeparator,\n      isPunctuationChar = parserConfig.isPunctuationChar || /[\\[\\]{}\\(\\),;\\:\\.]/,\n      numberStart = parserConfig.numberStart || /[\\d\\.]/,\n      number = parserConfig.number || /^(?:0x[a-f\\d]+|0b[01]+|(?:\\d+\\.?\\d*|\\.\\d+)(?:e[-+]?\\d+)?)(u|ll?|l|f)?/i,\n      isOperatorChar = parserConfig.isOperatorChar || /[+\\-*&%=<>!?|\\/]/,\n      isIdentifierChar = parserConfig.isIdentifierChar || /[\\w\\$_\\xa1-\\uffff]/,\n      // An optional function that takes a {string} token and returns true if it\n      // should be treated as a builtin.\n      isReservedIdentifier = parserConfig.isReservedIdentifier || false;\n\n  var curPunc, isDefKeyword;\n\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n    if (hooks[ch]) {\n      var result = hooks[ch](stream, state);\n      if (result !== false) return result;\n    }\n    if (ch == '\"' || ch == \"'\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    }\n    if (isPunctuationChar.test(ch)) {\n      curPunc = ch;\n      return null;\n    }\n    if (numberStart.test(ch)) {\n      stream.backUp(1)\n      if (stream.match(number)) return \"number\"\n      stream.next()\n    }\n    if (ch == \"/\") {\n      if (stream.eat(\"*\")) {\n        state.tokenize = tokenComment;\n        return tokenComment(stream, state);\n      }\n      if (stream.eat(\"/\")) {\n        stream.skipToEnd();\n        return \"comment\";\n      }\n    }\n    if (isOperatorChar.test(ch)) {\n      while (!stream.match(/^\\/[\\/*]/, false) && stream.eat(isOperatorChar)) {}\n      return \"operator\";\n    }\n    stream.eatWhile(isIdentifierChar);\n    if (namespaceSeparator) while (stream.match(namespaceSeparator))\n      stream.eatWhile(isIdentifierChar);\n\n    var cur = stream.current();\n    if (contains(keywords, cur)) {\n      if (contains(blockKeywords, cur)) curPunc = \"newstatement\";\n      if (contains(defKeywords, cur)) isDefKeyword = true;\n      return \"keyword\";\n    }\n    if (contains(types, cur)) return \"type\";\n    if (contains(builtin, cur)\n        || (isReservedIdentifier && isReservedIdentifier(cur))) {\n      if (contains(blockKeywords, cur)) curPunc = \"newstatement\";\n      return \"builtin\";\n    }\n    if (contains(atoms, cur)) return \"atom\";\n    return \"variable\";\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, next, end = false;\n      while ((next = stream.next()) != null) {\n        if (next == quote && !escaped) {end = true; break;}\n        escaped = !escaped && next == \"\\\\\";\n      }\n      if (end || !(escaped || multiLineStrings))\n        state.tokenize = null;\n      return \"string\";\n    };\n  }\n\n  function tokenComment(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"/\" && maybeEnd) {\n        state.tokenize = null;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return \"comment\";\n  }\n\n  function maybeEOL(stream, state) {\n    if (parserConfig.typeFirstDefinitions && stream.eol() && isTopScope(state.context))\n      state.typeAtEndOfLine = typeBefore(stream, state, stream.pos)\n  }\n\n  // Interface\n\n  return {\n    startState: function(basecolumn) {\n      return {\n        tokenize: null,\n        context: new Context((basecolumn || 0) - indentUnit, 0, \"top\", null, false),\n        indented: 0,\n        startOfLine: true,\n        prevToken: null\n      };\n    },\n\n    token: function(stream, state) {\n      var ctx = state.context;\n      if (stream.sol()) {\n        if (ctx.align == null) ctx.align = false;\n        state.indented = stream.indentation();\n        state.startOfLine = true;\n      }\n      if (stream.eatSpace()) { maybeEOL(stream, state); return null; }\n      curPunc = isDefKeyword = null;\n      var style = (state.tokenize || tokenBase)(stream, state);\n      if (style == \"comment\" || style == \"meta\") return style;\n      if (ctx.align == null) ctx.align = true;\n\n      if (curPunc == \";\" || curPunc == \":\" || (curPunc == \",\" && stream.match(/^\\s*(?:\\/\\/.*)?$/, false)))\n        while (state.context.type == \"statement\") popContext(state);\n      else if (curPunc == \"{\") pushContext(state, stream.column(), \"}\");\n      else if (curPunc == \"[\") pushContext(state, stream.column(), \"]\");\n      else if (curPunc == \"(\") pushContext(state, stream.column(), \")\");\n      else if (curPunc == \"}\") {\n        while (ctx.type == \"statement\") ctx = popContext(state);\n        if (ctx.type == \"}\") ctx = popContext(state);\n        while (ctx.type == \"statement\") ctx = popContext(state);\n      }\n      else if (curPunc == ctx.type) popContext(state);\n      else if (indentStatements &&\n               (((ctx.type == \"}\" || ctx.type == \"top\") && curPunc != \";\") ||\n                (ctx.type == \"statement\" && curPunc == \"newstatement\"))) {\n        pushContext(state, stream.column(), \"statement\", stream.current());\n      }\n\n      if (style == \"variable\" &&\n          ((state.prevToken == \"def\" ||\n            (parserConfig.typeFirstDefinitions && typeBefore(stream, state, stream.start) &&\n             isTopScope(state.context) && stream.match(/^\\s*\\(/, false)))))\n        style = \"def\";\n\n      if (hooks.token) {\n        var result = hooks.token(stream, state, style);\n        if (result !== undefined) style = result;\n      }\n\n      if (style == \"def\" && parserConfig.styleDefs === false) style = \"variable\";\n\n      state.startOfLine = false;\n      state.prevToken = isDefKeyword ? \"def\" : style || curPunc;\n      maybeEOL(stream, state);\n      return style;\n    },\n\n    indent: function(state, textAfter) {\n      if (state.tokenize != tokenBase && state.tokenize != null || state.typeAtEndOfLine) return CodeMirror.Pass;\n      var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);\n      var closing = firstChar == ctx.type;\n      if (ctx.type == \"statement\" && firstChar == \"}\") ctx = ctx.prev;\n      if (parserConfig.dontIndentStatements)\n        while (ctx.type == \"statement\" && parserConfig.dontIndentStatements.test(ctx.info))\n          ctx = ctx.prev\n      if (hooks.indent) {\n        var hook = hooks.indent(state, ctx, textAfter, indentUnit);\n        if (typeof hook == \"number\") return hook\n      }\n      var switchBlock = ctx.prev && ctx.prev.info == \"switch\";\n      if (parserConfig.allmanIndentation && /[{(]/.test(firstChar)) {\n        while (ctx.type != \"top\" && ctx.type != \"}\") ctx = ctx.prev\n        return ctx.indented\n      }\n      if (ctx.type == \"statement\")\n        return ctx.indented + (firstChar == \"{\" ? 0 : statementIndentUnit);\n      if (ctx.align && (!dontAlignCalls || ctx.type != \")\"))\n        return ctx.column + (closing ? 0 : 1);\n      if (ctx.type == \")\" && !closing)\n        return ctx.indented + statementIndentUnit;\n\n      return ctx.indented + (closing ? 0 : indentUnit) +\n        (!closing && switchBlock && !/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 0);\n    },\n\n    electricInput: indentSwitch ? /^\\s*(?:case .*?:|default:|\\{\\}?|\\})$/ : /^\\s*[{}]$/,\n    blockCommentStart: \"/*\",\n    blockCommentEnd: \"*/\",\n    blockCommentContinue: \" * \",\n    lineComment: \"//\",\n    fold: \"brace\"\n  };\n});\n\n  function words(str) {\n    var obj = {}, words = str.split(\" \");\n    for (var i = 0; i < words.length; ++i) obj[words[i]] = true;\n    return obj;\n  }\n  function contains(words, word) {\n    if (typeof words === \"function\") {\n      return words(word);\n    } else {\n      return words.propertyIsEnumerable(word);\n    }\n  }\n  var cKeywords = \"auto if break case register continue return default do sizeof \" +\n    \"static else struct switch extern typedef union for goto while enum const \" +\n    \"volatile inline restrict asm fortran\";\n\n  // Keywords from https://en.cppreference.com/w/cpp/keyword includes C++20.\n  var cppKeywords = \"alignas alignof and and_eq audit axiom bitand bitor catch \" +\n  \"class compl concept constexpr const_cast decltype delete dynamic_cast \" +\n  \"explicit export final friend import module mutable namespace new noexcept \" +\n  \"not not_eq operator or or_eq override private protected public \" +\n  \"reinterpret_cast requires static_assert static_cast template this \" +\n  \"thread_local throw try typeid typename using virtual xor xor_eq\";\n\n  var objCKeywords = \"bycopy byref in inout oneway out self super atomic nonatomic retain copy \" +\n  \"readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd \" +\n  \"@interface @implementation @end @protocol @encode @property @synthesize @dynamic @class \" +\n  \"@public @package @private @protected @required @optional @try @catch @finally @import \" +\n  \"@selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available\";\n\n  var objCBuiltins = \"FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION \" +\n  \" NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER \" +\n  \"NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION \" +\n  \"NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT\"\n\n  // Do not use this. Use the cTypes function below. This is global just to avoid\n  // excessive calls when cTypes is being called multiple times during a parse.\n  var basicCTypes = words(\"int long char short double float unsigned signed \" +\n    \"void bool\");\n\n  // Do not use this. Use the objCTypes function below. This is global just to avoid\n  // excessive calls when objCTypes is being called multiple times during a parse.\n  var basicObjCTypes = words(\"SEL instancetype id Class Protocol BOOL\");\n\n  // Returns true if identifier is a \"C\" type.\n  // C type is defined as those that are reserved by the compiler (basicTypes),\n  // and those that end in _t (Reserved by POSIX for types)\n  // http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html\n  function cTypes(identifier) {\n    return contains(basicCTypes, identifier) || /.+_t$/.test(identifier);\n  }\n\n  // Returns true if identifier is a \"Objective C\" type.\n  function objCTypes(identifier) {\n    return cTypes(identifier) || contains(basicObjCTypes, identifier);\n  }\n\n  var cBlockKeywords = \"case do else for if switch while struct enum union\";\n  var cDefKeywords = \"struct enum union\";\n\n  function cppHook(stream, state) {\n    if (!state.startOfLine) return false\n    for (var ch, next = null; ch = stream.peek();) {\n      if (ch == \"\\\\\" && stream.match(/^.$/)) {\n        next = cppHook\n        break\n      } else if (ch == \"/\" && stream.match(/^\\/[\\/\\*]/, false)) {\n        break\n      }\n      stream.next()\n    }\n    state.tokenize = next\n    return \"meta\"\n  }\n\n  function pointerHook(_stream, state) {\n    if (state.prevToken == \"type\") return \"type\";\n    return false;\n  }\n\n  // For C and C++ (and ObjC): identifiers starting with __\n  // or _ followed by a capital letter are reserved for the compiler.\n  function cIsReservedIdentifier(token) {\n    if (!token || token.length < 2) return false;\n    if (token[0] != '_') return false;\n    return (token[1] == '_') || (token[1] !== token[1].toLowerCase());\n  }\n\n  function cpp14Literal(stream) {\n    stream.eatWhile(/[\\w\\.']/);\n    return \"number\";\n  }\n\n  function cpp11StringHook(stream, state) {\n    stream.backUp(1);\n    // Raw strings.\n    if (stream.match(/(R|u8R|uR|UR|LR)/)) {\n      var match = stream.match(/\"([^\\s\\\\()]{0,16})\\(/);\n      if (!match) {\n        return false;\n      }\n      state.cpp11RawStringDelim = match[1];\n      state.tokenize = tokenRawString;\n      return tokenRawString(stream, state);\n    }\n    // Unicode strings/chars.\n    if (stream.match(/(u8|u|U|L)/)) {\n      if (stream.match(/[\"']/, /* eat */ false)) {\n        return \"string\";\n      }\n      return false;\n    }\n    // Ignore this hook.\n    stream.next();\n    return false;\n  }\n\n  function cppLooksLikeConstructor(word) {\n    var lastTwo = /(\\w+)::~?(\\w+)$/.exec(word);\n    return lastTwo && lastTwo[1] == lastTwo[2];\n  }\n\n  // C#-style strings where \"\" escapes a quote.\n  function tokenAtString(stream, state) {\n    var next;\n    while ((next = stream.next()) != null) {\n      if (next == '\"' && !stream.eat('\"')) {\n        state.tokenize = null;\n        break;\n      }\n    }\n    return \"string\";\n  }\n\n  // C++11 raw string literal is <prefix>\"<delim>( anything )<delim>\", where\n  // <delim> can be a string up to 16 characters long.\n  function tokenRawString(stream, state) {\n    // Escape characters that have special regex meanings.\n    var delim = state.cpp11RawStringDelim.replace(/[^\\w\\s]/g, '\\\\$&');\n    var match = stream.match(new RegExp(\".*?\\\\)\" + delim + '\"'));\n    if (match)\n      state.tokenize = null;\n    else\n      stream.skipToEnd();\n    return \"string\";\n  }\n\n  function def(mimes, mode) {\n    if (typeof mimes == \"string\") mimes = [mimes];\n    var words = [];\n    function add(obj) {\n      if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop))\n        words.push(prop);\n    }\n    add(mode.keywords);\n    add(mode.types);\n    add(mode.builtin);\n    add(mode.atoms);\n    if (words.length) {\n      mode.helperType = mimes[0];\n      CodeMirror.registerHelper(\"hintWords\", mimes[0], words);\n    }\n\n    for (var i = 0; i < mimes.length; ++i)\n      CodeMirror.defineMIME(mimes[i], mode);\n  }\n\n  def([\"text/x-csrc\", \"text/x-c\", \"text/x-chdr\"], {\n    name: \"clike\",\n    keywords: words(cKeywords),\n    types: cTypes,\n    blockKeywords: words(cBlockKeywords),\n    defKeywords: words(cDefKeywords),\n    typeFirstDefinitions: true,\n    atoms: words(\"NULL true false\"),\n    isReservedIdentifier: cIsReservedIdentifier,\n    hooks: {\n      \"#\": cppHook,\n      \"*\": pointerHook,\n    },\n    modeProps: {fold: [\"brace\", \"include\"]}\n  });\n\n  def([\"text/x-c++src\", \"text/x-c++hdr\"], {\n    name: \"clike\",\n    keywords: words(cKeywords + \" \" + cppKeywords),\n    types: cTypes,\n    blockKeywords: words(cBlockKeywords + \" class try catch\"),\n    defKeywords: words(cDefKeywords + \" class namespace\"),\n    typeFirstDefinitions: true,\n    atoms: words(\"true false NULL nullptr\"),\n    dontIndentStatements: /^template$/,\n    isIdentifierChar: /[\\w\\$_~\\xa1-\\uffff]/,\n    isReservedIdentifier: cIsReservedIdentifier,\n    hooks: {\n      \"#\": cppHook,\n      \"*\": pointerHook,\n      \"u\": cpp11StringHook,\n      \"U\": cpp11StringHook,\n      \"L\": cpp11StringHook,\n      \"R\": cpp11StringHook,\n      \"0\": cpp14Literal,\n      \"1\": cpp14Literal,\n      \"2\": cpp14Literal,\n      \"3\": cpp14Literal,\n      \"4\": cpp14Literal,\n      \"5\": cpp14Literal,\n      \"6\": cpp14Literal,\n      \"7\": cpp14Literal,\n      \"8\": cpp14Literal,\n      \"9\": cpp14Literal,\n      token: function(stream, state, style) {\n        if (style == \"variable\" && stream.peek() == \"(\" &&\n            (state.prevToken == \";\" || state.prevToken == null ||\n             state.prevToken == \"}\") &&\n            cppLooksLikeConstructor(stream.current()))\n          return \"def\";\n      }\n    },\n    namespaceSeparator: \"::\",\n    modeProps: {fold: [\"brace\", \"include\"]}\n  });\n\n  def(\"text/x-java\", {\n    name: \"clike\",\n    keywords: words(\"abstract assert break case catch class const continue default \" +\n                    \"do else enum extends final finally for goto if implements import \" +\n                    \"instanceof interface native new package private protected public \" +\n                    \"return static strictfp super switch synchronized this throw throws transient \" +\n                    \"try volatile while @interface\"),\n    types: words(\"byte short int long float double boolean char void Boolean Byte Character Double Float \" +\n                 \"Integer Long Number Object Short String StringBuffer StringBuilder Void\"),\n    blockKeywords: words(\"catch class do else finally for if switch try while\"),\n    defKeywords: words(\"class interface enum @interface\"),\n    typeFirstDefinitions: true,\n    atoms: words(\"true false null\"),\n    number: /^(?:0x[a-f\\d_]+|0b[01_]+|(?:[\\d_]+\\.?\\d*|\\.\\d+)(?:e[-+]?[\\d_]+)?)(u|ll?|l|f)?/i,\n    hooks: {\n      \"@\": function(stream) {\n        // Don't match the @interface keyword.\n        if (stream.match('interface', false)) return false;\n\n        stream.eatWhile(/[\\w\\$_]/);\n        return \"meta\";\n      }\n    },\n    modeProps: {fold: [\"brace\", \"import\"]}\n  });\n\n  def(\"text/x-csharp\", {\n    name: \"clike\",\n    keywords: words(\"abstract as async await base break case catch checked class const continue\" +\n                    \" default delegate do else enum event explicit extern finally fixed for\" +\n                    \" foreach goto if implicit in interface internal is lock namespace new\" +\n                    \" operator out override params private protected public readonly ref return sealed\" +\n                    \" sizeof stackalloc static struct switch this throw try typeof unchecked\" +\n                    \" unsafe using virtual void volatile while add alias ascending descending dynamic from get\" +\n                    \" global group into join let orderby partial remove select set value var yield\"),\n    types: words(\"Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func\" +\n                 \" Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32\" +\n                 \" UInt64 bool byte char decimal double short int long object\"  +\n                 \" sbyte float string ushort uint ulong\"),\n    blockKeywords: words(\"catch class do else finally for foreach if struct switch try while\"),\n    defKeywords: words(\"class interface namespace struct var\"),\n    typeFirstDefinitions: true,\n    atoms: words(\"true false null\"),\n    hooks: {\n      \"@\": function(stream, state) {\n        if (stream.eat('\"')) {\n          state.tokenize = tokenAtString;\n          return tokenAtString(stream, state);\n        }\n        stream.eatWhile(/[\\w\\$_]/);\n        return \"meta\";\n      }\n    }\n  });\n\n  function tokenTripleString(stream, state) {\n    var escaped = false;\n    while (!stream.eol()) {\n      if (!escaped && stream.match('\"\"\"')) {\n        state.tokenize = null;\n        break;\n      }\n      escaped = stream.next() == \"\\\\\" && !escaped;\n    }\n    return \"string\";\n  }\n\n  function tokenNestedComment(depth) {\n    return function (stream, state) {\n      var ch\n      while (ch = stream.next()) {\n        if (ch == \"*\" && stream.eat(\"/\")) {\n          if (depth == 1) {\n            state.tokenize = null\n            break\n          } else {\n            state.tokenize = tokenNestedComment(depth - 1)\n            return state.tokenize(stream, state)\n          }\n        } else if (ch == \"/\" && stream.eat(\"*\")) {\n          state.tokenize = tokenNestedComment(depth + 1)\n          return state.tokenize(stream, state)\n        }\n      }\n      return \"comment\"\n    }\n  }\n\n  def(\"text/x-scala\", {\n    name: \"clike\",\n    keywords: words(\n      /* scala */\n      \"abstract case catch class def do else extends final finally for forSome if \" +\n      \"implicit import lazy match new null object override package private protected return \" +\n      \"sealed super this throw trait try type val var while with yield _ \" +\n\n      /* package scala */\n      \"assert assume require print println printf readLine readBoolean readByte readShort \" +\n      \"readChar readInt readLong readFloat readDouble\"\n    ),\n    types: words(\n      \"AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either \" +\n      \"Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable \" +\n      \"Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering \" +\n      \"Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder \" +\n      \"StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector \" +\n\n      /* package java.lang */\n      \"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable \" +\n      \"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process \" +\n      \"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String \" +\n      \"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void\"\n    ),\n    multiLineStrings: true,\n    blockKeywords: words(\"catch class enum do else finally for forSome if match switch try while\"),\n    defKeywords: words(\"class enum def object package trait type val var\"),\n    atoms: words(\"true false null\"),\n    indentStatements: false,\n    indentSwitch: false,\n    isOperatorChar: /[+\\-*&%=<>!?|\\/#:@]/,\n    hooks: {\n      \"@\": function(stream) {\n        stream.eatWhile(/[\\w\\$_]/);\n        return \"meta\";\n      },\n      '\"': function(stream, state) {\n        if (!stream.match('\"\"')) return false;\n        state.tokenize = tokenTripleString;\n        return state.tokenize(stream, state);\n      },\n      \"'\": function(stream) {\n        stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n        return \"atom\";\n      },\n      \"=\": function(stream, state) {\n        var cx = state.context\n        if (cx.type == \"}\" && cx.align && stream.eat(\">\")) {\n          state.context = new Context(cx.indented, cx.column, cx.type, cx.info, null, cx.prev)\n          return \"operator\"\n        } else {\n          return false\n        }\n      },\n\n      \"/\": function(stream, state) {\n        if (!stream.eat(\"*\")) return false\n        state.tokenize = tokenNestedComment(1)\n        return state.tokenize(stream, state)\n      }\n    },\n    modeProps: {closeBrackets: {pairs: '()[]{}\"\"', triples: '\"'}}\n  });\n\n  function tokenKotlinString(tripleString){\n    return function (stream, state) {\n      var escaped = false, next, end = false;\n      while (!stream.eol()) {\n        if (!tripleString && !escaped && stream.match('\"') ) {end = true; break;}\n        if (tripleString && stream.match('\"\"\"')) {end = true; break;}\n        next = stream.next();\n        if(!escaped && next == \"$\" && stream.match('{'))\n          stream.skipTo(\"}\");\n        escaped = !escaped && next == \"\\\\\" && !tripleString;\n      }\n      if (end || !tripleString)\n        state.tokenize = null;\n      return \"string\";\n    }\n  }\n\n  def(\"text/x-kotlin\", {\n    name: \"clike\",\n    keywords: words(\n      /*keywords*/\n      \"package as typealias class interface this super val operator \" +\n      \"var fun for is in This throw return annotation \" +\n      \"break continue object if else while do try when !in !is as? \" +\n\n      /*soft keywords*/\n      \"file import where by get set abstract enum open inner override private public internal \" +\n      \"protected catch finally out final vararg reified dynamic companion constructor init \" +\n      \"sealed field property receiver param sparam lateinit data inline noinline tailrec \" +\n      \"external annotation crossinline const operator infix suspend actual expect setparam\"\n    ),\n    types: words(\n      /* package java.lang */\n      \"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable \" +\n      \"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process \" +\n      \"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String \" +\n      \"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray \" +\n      \"ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy \" +\n      \"LazyThreadSafetyMode LongArray Nothing ShortArray Unit\"\n    ),\n    intendSwitch: false,\n    indentStatements: false,\n    multiLineStrings: true,\n    number: /^(?:0x[a-f\\d_]+|0b[01_]+|(?:[\\d_]+(\\.\\d+)?|\\.\\d+)(?:e[-+]?[\\d_]+)?)(u|ll?|l|f)?/i,\n    blockKeywords: words(\"catch class do else finally for if where try while enum\"),\n    defKeywords: words(\"class val var object interface fun\"),\n    atoms: words(\"true false null this\"),\n    hooks: {\n      \"@\": function(stream) {\n        stream.eatWhile(/[\\w\\$_]/);\n        return \"meta\";\n      },\n      '*': function(_stream, state) {\n        return state.prevToken == '.' ? 'variable' : 'operator';\n      },\n      '\"': function(stream, state) {\n        state.tokenize = tokenKotlinString(stream.match('\"\"'));\n        return state.tokenize(stream, state);\n      },\n      \"/\": function(stream, state) {\n        if (!stream.eat(\"*\")) return false;\n        state.tokenize = tokenNestedComment(1);\n        return state.tokenize(stream, state)\n      },\n      indent: function(state, ctx, textAfter, indentUnit) {\n        var firstChar = textAfter && textAfter.charAt(0);\n        if ((state.prevToken == \"}\" || state.prevToken == \")\") && textAfter == \"\")\n          return state.indented;\n        if ((state.prevToken == \"operator\" && textAfter != \"}\" && state.context.type != \"}\") ||\n          state.prevToken == \"variable\" && firstChar == \".\" ||\n          (state.prevToken == \"}\" || state.prevToken == \")\") && firstChar == \".\")\n          return indentUnit * 2 + ctx.indented;\n        if (ctx.align && ctx.type == \"}\")\n          return ctx.indented + (state.context.type == (textAfter || \"\").charAt(0) ? 0 : indentUnit);\n      }\n    },\n    modeProps: {closeBrackets: {triples: '\"'}}\n  });\n\n  def([\"x-shader/x-vertex\", \"x-shader/x-fragment\"], {\n    name: \"clike\",\n    keywords: words(\"sampler1D sampler2D sampler3D samplerCube \" +\n                    \"sampler1DShadow sampler2DShadow \" +\n                    \"const attribute uniform varying \" +\n                    \"break continue discard return \" +\n                    \"for while do if else struct \" +\n                    \"in out inout\"),\n    types: words(\"float int bool void \" +\n                 \"vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 \" +\n                 \"mat2 mat3 mat4\"),\n    blockKeywords: words(\"for while do if else struct\"),\n    builtin: words(\"radians degrees sin cos tan asin acos atan \" +\n                    \"pow exp log exp2 sqrt inversesqrt \" +\n                    \"abs sign floor ceil fract mod min max clamp mix step smoothstep \" +\n                    \"length distance dot cross normalize ftransform faceforward \" +\n                    \"reflect refract matrixCompMult \" +\n                    \"lessThan lessThanEqual greaterThan greaterThanEqual \" +\n                    \"equal notEqual any all not \" +\n                    \"texture1D texture1DProj texture1DLod texture1DProjLod \" +\n                    \"texture2D texture2DProj texture2DLod texture2DProjLod \" +\n                    \"texture3D texture3DProj texture3DLod texture3DProjLod \" +\n                    \"textureCube textureCubeLod \" +\n                    \"shadow1D shadow2D shadow1DProj shadow2DProj \" +\n                    \"shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod \" +\n                    \"dFdx dFdy fwidth \" +\n                    \"noise1 noise2 noise3 noise4\"),\n    atoms: words(\"true false \" +\n                \"gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex \" +\n                \"gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 \" +\n                \"gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 \" +\n                \"gl_FogCoord gl_PointCoord \" +\n                \"gl_Position gl_PointSize gl_ClipVertex \" +\n                \"gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor \" +\n                \"gl_TexCoord gl_FogFragCoord \" +\n                \"gl_FragCoord gl_FrontFacing \" +\n                \"gl_FragData gl_FragDepth \" +\n                \"gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix \" +\n                \"gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse \" +\n                \"gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse \" +\n                \"gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose \" +\n                \"gl_ProjectionMatrixInverseTranspose \" +\n                \"gl_ModelViewProjectionMatrixInverseTranspose \" +\n                \"gl_TextureMatrixInverseTranspose \" +\n                \"gl_NormalScale gl_DepthRange gl_ClipPlane \" +\n                \"gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel \" +\n                \"gl_FrontLightModelProduct gl_BackLightModelProduct \" +\n                \"gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ \" +\n                \"gl_FogParameters \" +\n                \"gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords \" +\n                \"gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats \" +\n                \"gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits \" +\n                \"gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits \" +\n                \"gl_MaxDrawBuffers\"),\n    indentSwitch: false,\n    hooks: {\"#\": cppHook},\n    modeProps: {fold: [\"brace\", \"include\"]}\n  });\n\n  def(\"text/x-nesc\", {\n    name: \"clike\",\n    keywords: words(cKeywords + \" as atomic async call command component components configuration event generic \" +\n                    \"implementation includes interface module new norace nx_struct nx_union post provides \" +\n                    \"signal task uses abstract extends\"),\n    types: cTypes,\n    blockKeywords: words(cBlockKeywords),\n    atoms: words(\"null true false\"),\n    hooks: {\"#\": cppHook},\n    modeProps: {fold: [\"brace\", \"include\"]}\n  });\n\n  def(\"text/x-objectivec\", {\n    name: \"clike\",\n    keywords: words(cKeywords + \" \" + objCKeywords),\n    types: objCTypes,\n    builtin: words(objCBuiltins),\n    blockKeywords: words(cBlockKeywords + \" @synthesize @try @catch @finally @autoreleasepool @synchronized\"),\n    defKeywords: words(cDefKeywords + \" @interface @implementation @protocol @class\"),\n    dontIndentStatements: /^@.*$/,\n    typeFirstDefinitions: true,\n    atoms: words(\"YES NO NULL Nil nil true false nullptr\"),\n    isReservedIdentifier: cIsReservedIdentifier,\n    hooks: {\n      \"#\": cppHook,\n      \"*\": pointerHook,\n    },\n    modeProps: {fold: [\"brace\", \"include\"]}\n  });\n\n  def(\"text/x-objectivec++\", {\n    name: \"clike\",\n    keywords: words(cKeywords + \" \" + objCKeywords + \" \" + cppKeywords),\n    types: objCTypes,\n    builtin: words(objCBuiltins),\n    blockKeywords: words(cBlockKeywords + \" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch\"),\n    defKeywords: words(cDefKeywords + \" @interface @implementation @protocol @class class namespace\"),\n    dontIndentStatements: /^@.*$|^template$/,\n    typeFirstDefinitions: true,\n    atoms: words(\"YES NO NULL Nil nil true false nullptr\"),\n    isReservedIdentifier: cIsReservedIdentifier,\n    hooks: {\n      \"#\": cppHook,\n      \"*\": pointerHook,\n      \"u\": cpp11StringHook,\n      \"U\": cpp11StringHook,\n      \"L\": cpp11StringHook,\n      \"R\": cpp11StringHook,\n      \"0\": cpp14Literal,\n      \"1\": cpp14Literal,\n      \"2\": cpp14Literal,\n      \"3\": cpp14Literal,\n      \"4\": cpp14Literal,\n      \"5\": cpp14Literal,\n      \"6\": cpp14Literal,\n      \"7\": cpp14Literal,\n      \"8\": cpp14Literal,\n      \"9\": cpp14Literal,\n      token: function(stream, state, style) {\n        if (style == \"variable\" && stream.peek() == \"(\" &&\n            (state.prevToken == \";\" || state.prevToken == null ||\n             state.prevToken == \"}\") &&\n            cppLooksLikeConstructor(stream.current()))\n          return \"def\";\n      }\n    },\n    namespaceSeparator: \"::\",\n    modeProps: {fold: [\"brace\", \"include\"]}\n  });\n\n  def(\"text/x-squirrel\", {\n    name: \"clike\",\n    keywords: words(\"base break clone continue const default delete enum extends function in class\" +\n                    \" foreach local resume return this throw typeof yield constructor instanceof static\"),\n    types: cTypes,\n    blockKeywords: words(\"case catch class else for foreach if switch try while\"),\n    defKeywords: words(\"function local class\"),\n    typeFirstDefinitions: true,\n    atoms: words(\"true false null\"),\n    hooks: {\"#\": cppHook},\n    modeProps: {fold: [\"brace\", \"include\"]}\n  });\n\n  // Ceylon Strings need to deal with interpolation\n  var stringTokenizer = null;\n  function tokenCeylonString(type) {\n    return function(stream, state) {\n      var escaped = false, next, end = false;\n      while (!stream.eol()) {\n        if (!escaped && stream.match('\"') &&\n              (type == \"single\" || stream.match('\"\"'))) {\n          end = true;\n          break;\n        }\n        if (!escaped && stream.match('``')) {\n          stringTokenizer = tokenCeylonString(type);\n          end = true;\n          break;\n        }\n        next = stream.next();\n        escaped = type == \"single\" && !escaped && next == \"\\\\\";\n      }\n      if (end)\n          state.tokenize = null;\n      return \"string\";\n    }\n  }\n\n  def(\"text/x-ceylon\", {\n    name: \"clike\",\n    keywords: words(\"abstracts alias assembly assert assign break case catch class continue dynamic else\" +\n                    \" exists extends finally for function given if import in interface is let module new\" +\n                    \" nonempty object of out outer package return satisfies super switch then this throw\" +\n                    \" try value void while\"),\n    types: function(word) {\n        // In Ceylon all identifiers that start with an uppercase are types\n        var first = word.charAt(0);\n        return (first === first.toUpperCase() && first !== first.toLowerCase());\n    },\n    blockKeywords: words(\"case catch class dynamic else finally for function if interface module new object switch try while\"),\n    defKeywords: words(\"class dynamic function interface module object package value\"),\n    builtin: words(\"abstract actual aliased annotation by default deprecated doc final formal late license\" +\n                   \" native optional sealed see serializable shared suppressWarnings tagged throws variable\"),\n    isPunctuationChar: /[\\[\\]{}\\(\\),;\\:\\.`]/,\n    isOperatorChar: /[+\\-*&%=<>!?|^~:\\/]/,\n    numberStart: /[\\d#$]/,\n    number: /^(?:#[\\da-fA-F_]+|\\$[01_]+|[\\d_]+[kMGTPmunpf]?|[\\d_]+\\.[\\d_]+(?:[eE][-+]?\\d+|[kMGTPmunpf]|)|)/i,\n    multiLineStrings: true,\n    typeFirstDefinitions: true,\n    atoms: words(\"true false null larger smaller equal empty finished\"),\n    indentSwitch: false,\n    styleDefs: false,\n    hooks: {\n      \"@\": function(stream) {\n        stream.eatWhile(/[\\w\\$_]/);\n        return \"meta\";\n      },\n      '\"': function(stream, state) {\n          state.tokenize = tokenCeylonString(stream.match('\"\"') ? \"triple\" : \"single\");\n          return state.tokenize(stream, state);\n        },\n      '`': function(stream, state) {\n          if (!stringTokenizer || !stream.match('`')) return false;\n          state.tokenize = stringTokenizer;\n          stringTokenizer = null;\n          return state.tokenize(stream, state);\n        },\n      \"'\": function(stream) {\n        stream.eatWhile(/[\\w\\$_\\xa1-\\uffff]/);\n        return \"atom\";\n      },\n      token: function(_stream, state, style) {\n          if ((style == \"variable\" || style == \"type\") &&\n              state.prevToken == \".\") {\n            return \"variable-2\";\n          }\n        }\n    },\n    modeProps: {\n        fold: [\"brace\", \"import\"],\n        closeBrackets: {triples: '\"'}\n    }\n  });\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../javascript/javascript\"), require(\"../css/css\"), require(\"../htmlmixed/htmlmixed\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../javascript/javascript\", \"../css/css\", \"../htmlmixed/htmlmixed\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"pug\", function (config) {\n  // token types\n  var KEYWORD = 'keyword';\n  var DOCTYPE = 'meta';\n  var ID = 'builtin';\n  var CLASS = 'qualifier';\n\n  var ATTRS_NEST = {\n    '{': '}',\n    '(': ')',\n    '[': ']'\n  };\n\n  var jsMode = CodeMirror.getMode(config, 'javascript');\n\n  function State() {\n    this.javaScriptLine = false;\n    this.javaScriptLineExcludesColon = false;\n\n    this.javaScriptArguments = false;\n    this.javaScriptArgumentsDepth = 0;\n\n    this.isInterpolating = false;\n    this.interpolationNesting = 0;\n\n    this.jsState = CodeMirror.startState(jsMode);\n\n    this.restOfLine = '';\n\n    this.isIncludeFiltered = false;\n    this.isEach = false;\n\n    this.lastTag = '';\n    this.scriptType = '';\n\n    // Attributes Mode\n    this.isAttrs = false;\n    this.attrsNest = [];\n    this.inAttributeName = true;\n    this.attributeIsType = false;\n    this.attrValue = '';\n\n    // Indented Mode\n    this.indentOf = Infinity;\n    this.indentToken = '';\n\n    this.innerMode = null;\n    this.innerState = null;\n\n    this.innerModeForLine = false;\n  }\n  /**\n   * Safely copy a state\n   *\n   * @return {State}\n   */\n  State.prototype.copy = function () {\n    var res = new State();\n    res.javaScriptLine = this.javaScriptLine;\n    res.javaScriptLineExcludesColon = this.javaScriptLineExcludesColon;\n    res.javaScriptArguments = this.javaScriptArguments;\n    res.javaScriptArgumentsDepth = this.javaScriptArgumentsDepth;\n    res.isInterpolating = this.isInterpolating;\n    res.interpolationNesting = this.interpolationNesting;\n\n    res.jsState = CodeMirror.copyState(jsMode, this.jsState);\n\n    res.innerMode = this.innerMode;\n    if (this.innerMode && this.innerState) {\n      res.innerState = CodeMirror.copyState(this.innerMode, this.innerState);\n    }\n\n    res.restOfLine = this.restOfLine;\n\n    res.isIncludeFiltered = this.isIncludeFiltered;\n    res.isEach = this.isEach;\n    res.lastTag = this.lastTag;\n    res.scriptType = this.scriptType;\n    res.isAttrs = this.isAttrs;\n    res.attrsNest = this.attrsNest.slice();\n    res.inAttributeName = this.inAttributeName;\n    res.attributeIsType = this.attributeIsType;\n    res.attrValue = this.attrValue;\n    res.indentOf = this.indentOf;\n    res.indentToken = this.indentToken;\n\n    res.innerModeForLine = this.innerModeForLine;\n\n    return res;\n  };\n\n  function javaScript(stream, state) {\n    if (stream.sol()) {\n      // if javaScriptLine was set at end of line, ignore it\n      state.javaScriptLine = false;\n      state.javaScriptLineExcludesColon = false;\n    }\n    if (state.javaScriptLine) {\n      if (state.javaScriptLineExcludesColon && stream.peek() === ':') {\n        state.javaScriptLine = false;\n        state.javaScriptLineExcludesColon = false;\n        return;\n      }\n      var tok = jsMode.token(stream, state.jsState);\n      if (stream.eol()) state.javaScriptLine = false;\n      return tok || true;\n    }\n  }\n  function javaScriptArguments(stream, state) {\n    if (state.javaScriptArguments) {\n      if (state.javaScriptArgumentsDepth === 0 && stream.peek() !== '(') {\n        state.javaScriptArguments = false;\n        return;\n      }\n      if (stream.peek() === '(') {\n        state.javaScriptArgumentsDepth++;\n      } else if (stream.peek() === ')') {\n        state.javaScriptArgumentsDepth--;\n      }\n      if (state.javaScriptArgumentsDepth === 0) {\n        state.javaScriptArguments = false;\n        return;\n      }\n\n      var tok = jsMode.token(stream, state.jsState);\n      return tok || true;\n    }\n  }\n\n  function yieldStatement(stream) {\n    if (stream.match(/^yield\\b/)) {\n        return 'keyword';\n    }\n  }\n\n  function doctype(stream) {\n    if (stream.match(/^(?:doctype) *([^\\n]+)?/)) {\n        return DOCTYPE;\n    }\n  }\n\n  function interpolation(stream, state) {\n    if (stream.match('#{')) {\n      state.isInterpolating = true;\n      state.interpolationNesting = 0;\n      return 'punctuation';\n    }\n  }\n\n  function interpolationContinued(stream, state) {\n    if (state.isInterpolating) {\n      if (stream.peek() === '}') {\n        state.interpolationNesting--;\n        if (state.interpolationNesting < 0) {\n          stream.next();\n          state.isInterpolating = false;\n          return 'punctuation';\n        }\n      } else if (stream.peek() === '{') {\n        state.interpolationNesting++;\n      }\n      return jsMode.token(stream, state.jsState) || true;\n    }\n  }\n\n  function caseStatement(stream, state) {\n    if (stream.match(/^case\\b/)) {\n      state.javaScriptLine = true;\n      return KEYWORD;\n    }\n  }\n\n  function when(stream, state) {\n    if (stream.match(/^when\\b/)) {\n      state.javaScriptLine = true;\n      state.javaScriptLineExcludesColon = true;\n      return KEYWORD;\n    }\n  }\n\n  function defaultStatement(stream) {\n    if (stream.match(/^default\\b/)) {\n      return KEYWORD;\n    }\n  }\n\n  function extendsStatement(stream, state) {\n    if (stream.match(/^extends?\\b/)) {\n      state.restOfLine = 'string';\n      return KEYWORD;\n    }\n  }\n\n  function append(stream, state) {\n    if (stream.match(/^append\\b/)) {\n      state.restOfLine = 'variable';\n      return KEYWORD;\n    }\n  }\n  function prepend(stream, state) {\n    if (stream.match(/^prepend\\b/)) {\n      state.restOfLine = 'variable';\n      return KEYWORD;\n    }\n  }\n  function block(stream, state) {\n    if (stream.match(/^block\\b *(?:(prepend|append)\\b)?/)) {\n      state.restOfLine = 'variable';\n      return KEYWORD;\n    }\n  }\n\n  function include(stream, state) {\n    if (stream.match(/^include\\b/)) {\n      state.restOfLine = 'string';\n      return KEYWORD;\n    }\n  }\n\n  function includeFiltered(stream, state) {\n    if (stream.match(/^include:([a-zA-Z0-9\\-]+)/, false) && stream.match('include')) {\n      state.isIncludeFiltered = true;\n      return KEYWORD;\n    }\n  }\n\n  function includeFilteredContinued(stream, state) {\n    if (state.isIncludeFiltered) {\n      var tok = filter(stream, state);\n      state.isIncludeFiltered = false;\n      state.restOfLine = 'string';\n      return tok;\n    }\n  }\n\n  function mixin(stream, state) {\n    if (stream.match(/^mixin\\b/)) {\n      state.javaScriptLine = true;\n      return KEYWORD;\n    }\n  }\n\n  function call(stream, state) {\n    if (stream.match(/^\\+([-\\w]+)/)) {\n      if (!stream.match(/^\\( *[-\\w]+ *=/, false)) {\n        state.javaScriptArguments = true;\n        state.javaScriptArgumentsDepth = 0;\n      }\n      return 'variable';\n    }\n    if (stream.match(/^\\+#{/, false)) {\n      stream.next();\n      state.mixinCallAfter = true;\n      return interpolation(stream, state);\n    }\n  }\n  function callArguments(stream, state) {\n    if (state.mixinCallAfter) {\n      state.mixinCallAfter = false;\n      if (!stream.match(/^\\( *[-\\w]+ *=/, false)) {\n        state.javaScriptArguments = true;\n        state.javaScriptArgumentsDepth = 0;\n      }\n      return true;\n    }\n  }\n\n  function conditional(stream, state) {\n    if (stream.match(/^(if|unless|else if|else)\\b/)) {\n      state.javaScriptLine = true;\n      return KEYWORD;\n    }\n  }\n\n  function each(stream, state) {\n    if (stream.match(/^(- *)?(each|for)\\b/)) {\n      state.isEach = true;\n      return KEYWORD;\n    }\n  }\n  function eachContinued(stream, state) {\n    if (state.isEach) {\n      if (stream.match(/^ in\\b/)) {\n        state.javaScriptLine = true;\n        state.isEach = false;\n        return KEYWORD;\n      } else if (stream.sol() || stream.eol()) {\n        state.isEach = false;\n      } else if (stream.next()) {\n        while (!stream.match(/^ in\\b/, false) && stream.next());\n        return 'variable';\n      }\n    }\n  }\n\n  function whileStatement(stream, state) {\n    if (stream.match(/^while\\b/)) {\n      state.javaScriptLine = true;\n      return KEYWORD;\n    }\n  }\n\n  function tag(stream, state) {\n    var captures;\n    if (captures = stream.match(/^(\\w(?:[-:\\w]*\\w)?)\\/?/)) {\n      state.lastTag = captures[1].toLowerCase();\n      if (state.lastTag === 'script') {\n        state.scriptType = 'application/javascript';\n      }\n      return 'tag';\n    }\n  }\n\n  function filter(stream, state) {\n    if (stream.match(/^:([\\w\\-]+)/)) {\n      var innerMode;\n      if (config && config.innerModes) {\n        innerMode = config.innerModes(stream.current().substring(1));\n      }\n      if (!innerMode) {\n        innerMode = stream.current().substring(1);\n      }\n      if (typeof innerMode === 'string') {\n        innerMode = CodeMirror.getMode(config, innerMode);\n      }\n      setInnerMode(stream, state, innerMode);\n      return 'atom';\n    }\n  }\n\n  function code(stream, state) {\n    if (stream.match(/^(!?=|-)/)) {\n      state.javaScriptLine = true;\n      return 'punctuation';\n    }\n  }\n\n  function id(stream) {\n    if (stream.match(/^#([\\w-]+)/)) {\n      return ID;\n    }\n  }\n\n  function className(stream) {\n    if (stream.match(/^\\.([\\w-]+)/)) {\n      return CLASS;\n    }\n  }\n\n  function attrs(stream, state) {\n    if (stream.peek() == '(') {\n      stream.next();\n      state.isAttrs = true;\n      state.attrsNest = [];\n      state.inAttributeName = true;\n      state.attrValue = '';\n      state.attributeIsType = false;\n      return 'punctuation';\n    }\n  }\n\n  function attrsContinued(stream, state) {\n    if (state.isAttrs) {\n      if (ATTRS_NEST[stream.peek()]) {\n        state.attrsNest.push(ATTRS_NEST[stream.peek()]);\n      }\n      if (state.attrsNest[state.attrsNest.length - 1] === stream.peek()) {\n        state.attrsNest.pop();\n      } else  if (stream.eat(')')) {\n        state.isAttrs = false;\n        return 'punctuation';\n      }\n      if (state.inAttributeName && stream.match(/^[^=,\\)!]+/)) {\n        if (stream.peek() === '=' || stream.peek() === '!') {\n          state.inAttributeName = false;\n          state.jsState = CodeMirror.startState(jsMode);\n          if (state.lastTag === 'script' && stream.current().trim().toLowerCase() === 'type') {\n            state.attributeIsType = true;\n          } else {\n            state.attributeIsType = false;\n          }\n        }\n        return 'attribute';\n      }\n\n      var tok = jsMode.token(stream, state.jsState);\n      if (state.attributeIsType && tok === 'string') {\n        state.scriptType = stream.current().toString();\n      }\n      if (state.attrsNest.length === 0 && (tok === 'string' || tok === 'variable' || tok === 'keyword')) {\n        try {\n          Function('', 'var x ' + state.attrValue.replace(/,\\s*$/, '').replace(/^!/, ''));\n          state.inAttributeName = true;\n          state.attrValue = '';\n          stream.backUp(stream.current().length);\n          return attrsContinued(stream, state);\n        } catch (ex) {\n          //not the end of an attribute\n        }\n      }\n      state.attrValue += stream.current();\n      return tok || true;\n    }\n  }\n\n  function attributesBlock(stream, state) {\n    if (stream.match(/^&attributes\\b/)) {\n      state.javaScriptArguments = true;\n      state.javaScriptArgumentsDepth = 0;\n      return 'keyword';\n    }\n  }\n\n  function indent(stream) {\n    if (stream.sol() && stream.eatSpace()) {\n      return 'indent';\n    }\n  }\n\n  function comment(stream, state) {\n    if (stream.match(/^ *\\/\\/(-)?([^\\n]*)/)) {\n      state.indentOf = stream.indentation();\n      state.indentToken = 'comment';\n      return 'comment';\n    }\n  }\n\n  function colon(stream) {\n    if (stream.match(/^: */)) {\n      return 'colon';\n    }\n  }\n\n  function text(stream, state) {\n    if (stream.match(/^(?:\\| ?| )([^\\n]+)/)) {\n      return 'string';\n    }\n    if (stream.match(/^(<[^\\n]*)/, false)) {\n      // html string\n      setInnerMode(stream, state, 'htmlmixed');\n      state.innerModeForLine = true;\n      return innerMode(stream, state, true);\n    }\n  }\n\n  function dot(stream, state) {\n    if (stream.eat('.')) {\n      var innerMode = null;\n      if (state.lastTag === 'script' && state.scriptType.toLowerCase().indexOf('javascript') != -1) {\n        innerMode = state.scriptType.toLowerCase().replace(/\"|'/g, '');\n      } else if (state.lastTag === 'style') {\n        innerMode = 'css';\n      }\n      setInnerMode(stream, state, innerMode);\n      return 'dot';\n    }\n  }\n\n  function fail(stream) {\n    stream.next();\n    return null;\n  }\n\n\n  function setInnerMode(stream, state, mode) {\n    mode = CodeMirror.mimeModes[mode] || mode;\n    mode = config.innerModes ? config.innerModes(mode) || mode : mode;\n    mode = CodeMirror.mimeModes[mode] || mode;\n    mode = CodeMirror.getMode(config, mode);\n    state.indentOf = stream.indentation();\n\n    if (mode && mode.name !== 'null') {\n      state.innerMode = mode;\n    } else {\n      state.indentToken = 'string';\n    }\n  }\n  function innerMode(stream, state, force) {\n    if (stream.indentation() > state.indentOf || (state.innerModeForLine && !stream.sol()) || force) {\n      if (state.innerMode) {\n        if (!state.innerState) {\n          state.innerState = state.innerMode.startState ? CodeMirror.startState(state.innerMode, stream.indentation()) : {};\n        }\n        return stream.hideFirstChars(state.indentOf + 2, function () {\n          return state.innerMode.token(stream, state.innerState) || true;\n        });\n      } else {\n        stream.skipToEnd();\n        return state.indentToken;\n      }\n    } else if (stream.sol()) {\n      state.indentOf = Infinity;\n      state.indentToken = null;\n      state.innerMode = null;\n      state.innerState = null;\n    }\n  }\n  function restOfLine(stream, state) {\n    if (stream.sol()) {\n      // if restOfLine was set at end of line, ignore it\n      state.restOfLine = '';\n    }\n    if (state.restOfLine) {\n      stream.skipToEnd();\n      var tok = state.restOfLine;\n      state.restOfLine = '';\n      return tok;\n    }\n  }\n\n\n  function startState() {\n    return new State();\n  }\n  function copyState(state) {\n    return state.copy();\n  }\n  /**\n   * Get the next token in the stream\n   *\n   * @param {Stream} stream\n   * @param {State} state\n   */\n  function nextToken(stream, state) {\n    var tok = innerMode(stream, state)\n      || restOfLine(stream, state)\n      || interpolationContinued(stream, state)\n      || includeFilteredContinued(stream, state)\n      || eachContinued(stream, state)\n      || attrsContinued(stream, state)\n      || javaScript(stream, state)\n      || javaScriptArguments(stream, state)\n      || callArguments(stream, state)\n\n      || yieldStatement(stream)\n      || doctype(stream)\n      || interpolation(stream, state)\n      || caseStatement(stream, state)\n      || when(stream, state)\n      || defaultStatement(stream)\n      || extendsStatement(stream, state)\n      || append(stream, state)\n      || prepend(stream, state)\n      || block(stream, state)\n      || include(stream, state)\n      || includeFiltered(stream, state)\n      || mixin(stream, state)\n      || call(stream, state)\n      || conditional(stream, state)\n      || each(stream, state)\n      || whileStatement(stream, state)\n      || tag(stream, state)\n      || filter(stream, state)\n      || code(stream, state)\n      || id(stream)\n      || className(stream)\n      || attrs(stream, state)\n      || attributesBlock(stream, state)\n      || indent(stream)\n      || text(stream, state)\n      || comment(stream, state)\n      || colon(stream)\n      || dot(stream, state)\n      || fail(stream);\n\n    return tok === true ? null : tok;\n  }\n  return {\n    startState: startState,\n    copyState: copyState,\n    token: nextToken\n  };\n}, 'javascript', 'css', 'htmlmixed');\n\nCodeMirror.defineMIME('text/x-pug', 'pug');\nCodeMirror.defineMIME('text/x-jade', 'pug');\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function (mod) {\n  \"use strict\";\n  if (typeof exports === \"object\" && typeof module === \"object\") {// CommonJS\n    mod(require(\"../../lib/codemirror\"),\n        require(\"../../addon/mode/overlay\"),\n        require(\"../xml/xml\"),\n        require(\"../javascript/javascript\"),\n        require(\"../coffeescript/coffeescript\"),\n        require(\"../css/css\"),\n        require(\"../sass/sass\"),\n        require(\"../stylus/stylus\"),\n        require(\"../pug/pug\"),\n        require(\"../handlebars/handlebars\"));\n  } else if (typeof define === \"function\" && define.amd) { // AMD\n    define([\"../../lib/codemirror\",\n            \"../../addon/mode/overlay\",\n            \"../xml/xml\",\n            \"../javascript/javascript\",\n            \"../coffeescript/coffeescript\",\n            \"../css/css\",\n            \"../sass/sass\",\n            \"../stylus/stylus\",\n            \"../pug/pug\",\n            \"../handlebars/handlebars\"], mod);\n  } else { // Plain browser env\n    mod(CodeMirror);\n  }\n})(function (CodeMirror) {\n  var tagLanguages = {\n    script: [\n      [\"lang\", /coffee(script)?/, \"coffeescript\"],\n      [\"type\", /^(?:text|application)\\/(?:x-)?coffee(?:script)?$/, \"coffeescript\"],\n      [\"lang\", /^babel$/, \"javascript\"],\n      [\"type\", /^text\\/babel$/, \"javascript\"],\n      [\"type\", /^text\\/ecmascript-\\d+$/, \"javascript\"]\n    ],\n    style: [\n      [\"lang\", /^stylus$/i, \"stylus\"],\n      [\"lang\", /^sass$/i, \"sass\"],\n      [\"lang\", /^less$/i, \"text/x-less\"],\n      [\"lang\", /^scss$/i, \"text/x-scss\"],\n      [\"type\", /^(text\\/)?(x-)?styl(us)?$/i, \"stylus\"],\n      [\"type\", /^text\\/sass/i, \"sass\"],\n      [\"type\", /^(text\\/)?(x-)?scss$/i, \"text/x-scss\"],\n      [\"type\", /^(text\\/)?(x-)?less$/i, \"text/x-less\"]\n    ],\n    template: [\n      [\"lang\", /^vue-template$/i, \"vue\"],\n      [\"lang\", /^pug$/i, \"pug\"],\n      [\"lang\", /^handlebars$/i, \"handlebars\"],\n      [\"type\", /^(text\\/)?(x-)?pug$/i, \"pug\"],\n      [\"type\", /^text\\/x-handlebars-template$/i, \"handlebars\"],\n      [null, null, \"vue-template\"]\n    ]\n  };\n\n  CodeMirror.defineMode(\"vue-template\", function (config, parserConfig) {\n    var mustacheOverlay = {\n      token: function (stream) {\n        if (stream.match(/^\\{\\{.*?\\}\\}/)) return \"meta mustache\";\n        while (stream.next() && !stream.match(\"{{\", false)) {}\n        return null;\n      }\n    };\n    return CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop || \"text/html\"), mustacheOverlay);\n  });\n\n  CodeMirror.defineMode(\"vue\", function (config) {\n    return CodeMirror.getMode(config, {name: \"htmlmixed\", tags: tagLanguages});\n  }, \"htmlmixed\", \"xml\", \"javascript\", \"coffeescript\", \"css\", \"sass\", \"stylus\", \"pug\", \"handlebars\");\n\n  CodeMirror.defineMIME(\"script/x-vue\", \"vue\");\n  CodeMirror.defineMIME(\"text/x-vue\", \"vue\");\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./searchcursor\"), require(\"../scroll/annotatescrollbar\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"./searchcursor\", \"../scroll/annotatescrollbar\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineExtension(\"showMatchesOnScrollbar\", function(query, caseFold, options) {\n    if (typeof options == \"string\") options = {className: options};\n    if (!options) options = {};\n    return new SearchAnnotation(this, query, caseFold, options);\n  });\n\n  function SearchAnnotation(cm, query, caseFold, options) {\n    this.cm = cm;\n    this.options = options;\n    var annotateOptions = {listenForChanges: false};\n    for (var prop in options) annotateOptions[prop] = options[prop];\n    if (!annotateOptions.className) annotateOptions.className = \"CodeMirror-search-match\";\n    this.annotation = cm.annotateScrollbar(annotateOptions);\n    this.query = query;\n    this.caseFold = caseFold;\n    this.gap = {from: cm.firstLine(), to: cm.lastLine() + 1};\n    this.matches = [];\n    this.update = null;\n\n    this.findMatches();\n    this.annotation.update(this.matches);\n\n    var self = this;\n    cm.on(\"change\", this.changeHandler = function(_cm, change) { self.onChange(change); });\n  }\n\n  var MAX_MATCHES = 1000;\n\n  SearchAnnotation.prototype.findMatches = function() {\n    if (!this.gap) return;\n    for (var i = 0; i < this.matches.length; i++) {\n      var match = this.matches[i];\n      if (match.from.line >= this.gap.to) break;\n      if (match.to.line >= this.gap.from) this.matches.splice(i--, 1);\n    }\n    var cursor = this.cm.getSearchCursor(this.query, CodeMirror.Pos(this.gap.from, 0), {caseFold: this.caseFold, multiline: this.options.multiline});\n    var maxMatches = this.options && this.options.maxMatches || MAX_MATCHES;\n    while (cursor.findNext()) {\n      var match = {from: cursor.from(), to: cursor.to()};\n      if (match.from.line >= this.gap.to) break;\n      this.matches.splice(i++, 0, match);\n      if (this.matches.length > maxMatches) break;\n    }\n    this.gap = null;\n  };\n\n  function offsetLine(line, changeStart, sizeChange) {\n    if (line <= changeStart) return line;\n    return Math.max(changeStart, line + sizeChange);\n  }\n\n  SearchAnnotation.prototype.onChange = function(change) {\n    var startLine = change.from.line;\n    var endLine = CodeMirror.changeEnd(change).line;\n    var sizeChange = endLine - change.to.line;\n    if (this.gap) {\n      this.gap.from = Math.min(offsetLine(this.gap.from, startLine, sizeChange), change.from.line);\n      this.gap.to = Math.max(offsetLine(this.gap.to, startLine, sizeChange), change.from.line);\n    } else {\n      this.gap = {from: change.from.line, to: endLine + 1};\n    }\n\n    if (sizeChange) for (var i = 0; i < this.matches.length; i++) {\n      var match = this.matches[i];\n      var newFrom = offsetLine(match.from.line, startLine, sizeChange);\n      if (newFrom != match.from.line) match.from = CodeMirror.Pos(newFrom, match.from.ch);\n      var newTo = offsetLine(match.to.line, startLine, sizeChange);\n      if (newTo != match.to.line) match.to = CodeMirror.Pos(newTo, match.to.ch);\n    }\n    clearTimeout(this.update);\n    var self = this;\n    this.update = setTimeout(function() { self.updateAfterChange(); }, 250);\n  };\n\n  SearchAnnotation.prototype.updateAfterChange = function() {\n    this.findMatches();\n    this.annotation.update(this.matches);\n  };\n\n  SearchAnnotation.prototype.clear = function() {\n    this.cm.off(\"change\", this.changeHandler);\n    this.annotation.clear();\n  };\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var noOptions = {};\n  var nonWS = /[^\\s\\u00a0]/;\n  var Pos = CodeMirror.Pos;\n\n  function firstNonWS(str) {\n    var found = str.search(nonWS);\n    return found == -1 ? 0 : found;\n  }\n\n  CodeMirror.commands.toggleComment = function(cm) {\n    cm.toggleComment();\n  };\n\n  CodeMirror.defineExtension(\"toggleComment\", function(options) {\n    if (!options) options = noOptions;\n    var cm = this;\n    var minLine = Infinity, ranges = this.listSelections(), mode = null;\n    for (var i = ranges.length - 1; i >= 0; i--) {\n      var from = ranges[i].from(), to = ranges[i].to();\n      if (from.line >= minLine) continue;\n      if (to.line >= minLine) to = Pos(minLine, 0);\n      minLine = from.line;\n      if (mode == null) {\n        if (cm.uncomment(from, to, options)) mode = \"un\";\n        else { cm.lineComment(from, to, options); mode = \"line\"; }\n      } else if (mode == \"un\") {\n        cm.uncomment(from, to, options);\n      } else {\n        cm.lineComment(from, to, options);\n      }\n    }\n  });\n\n  // Rough heuristic to try and detect lines that are part of multi-line string\n  function probablyInsideString(cm, pos, line) {\n    return /\\bstring\\b/.test(cm.getTokenTypeAt(Pos(pos.line, 0))) && !/^[\\'\\\"\\`]/.test(line)\n  }\n\n  function getMode(cm, pos) {\n    var mode = cm.getMode()\n    return mode.useInnerComments === false || !mode.innerMode ? mode : cm.getModeAt(pos)\n  }\n\n  CodeMirror.defineExtension(\"lineComment\", function(from, to, options) {\n    if (!options) options = noOptions;\n    var self = this, mode = getMode(self, from);\n    var firstLine = self.getLine(from.line);\n    if (firstLine == null || probablyInsideString(self, from, firstLine)) return;\n\n    var commentString = options.lineComment || mode.lineComment;\n    if (!commentString) {\n      if (options.blockCommentStart || mode.blockCommentStart) {\n        options.fullLines = true;\n        self.blockComment(from, to, options);\n      }\n      return;\n    }\n\n    var end = Math.min(to.ch != 0 || to.line == from.line ? to.line + 1 : to.line, self.lastLine() + 1);\n    var pad = options.padding == null ? \" \" : options.padding;\n    var blankLines = options.commentBlankLines || from.line == to.line;\n\n    self.operation(function() {\n      if (options.indent) {\n        var baseString = null;\n        for (var i = from.line; i < end; ++i) {\n          var line = self.getLine(i);\n          var whitespace = line.slice(0, firstNonWS(line));\n          if (baseString == null || baseString.length > whitespace.length) {\n            baseString = whitespace;\n          }\n        }\n        for (var i = from.line; i < end; ++i) {\n          var line = self.getLine(i), cut = baseString.length;\n          if (!blankLines && !nonWS.test(line)) continue;\n          if (line.slice(0, cut) != baseString) cut = firstNonWS(line);\n          self.replaceRange(baseString + commentString + pad, Pos(i, 0), Pos(i, cut));\n        }\n      } else {\n        for (var i = from.line; i < end; ++i) {\n          if (blankLines || nonWS.test(self.getLine(i)))\n            self.replaceRange(commentString + pad, Pos(i, 0));\n        }\n      }\n    });\n  });\n\n  CodeMirror.defineExtension(\"blockComment\", function(from, to, options) {\n    if (!options) options = noOptions;\n    var self = this, mode = getMode(self, from);\n    var startString = options.blockCommentStart || mode.blockCommentStart;\n    var endString = options.blockCommentEnd || mode.blockCommentEnd;\n    if (!startString || !endString) {\n      if ((options.lineComment || mode.lineComment) && options.fullLines != false)\n        self.lineComment(from, to, options);\n      return;\n    }\n    if (/\\bcomment\\b/.test(self.getTokenTypeAt(Pos(from.line, 0)))) return\n\n    var end = Math.min(to.line, self.lastLine());\n    if (end != from.line && to.ch == 0 && nonWS.test(self.getLine(end))) --end;\n\n    var pad = options.padding == null ? \" \" : options.padding;\n    if (from.line > end) return;\n\n    self.operation(function() {\n      if (options.fullLines != false) {\n        var lastLineHasText = nonWS.test(self.getLine(end));\n        self.replaceRange(pad + endString, Pos(end));\n        self.replaceRange(startString + pad, Pos(from.line, 0));\n        var lead = options.blockCommentLead || mode.blockCommentLead;\n        if (lead != null) for (var i = from.line + 1; i <= end; ++i)\n          if (i != end || lastLineHasText)\n            self.replaceRange(lead + pad, Pos(i, 0));\n      } else {\n        self.replaceRange(endString, to);\n        self.replaceRange(startString, from);\n      }\n    });\n  });\n\n  CodeMirror.defineExtension(\"uncomment\", function(from, to, options) {\n    if (!options) options = noOptions;\n    var self = this, mode = getMode(self, from);\n    var end = Math.min(to.ch != 0 || to.line == from.line ? to.line : to.line - 1, self.lastLine()), start = Math.min(from.line, end);\n\n    // Try finding line comments\n    var lineString = options.lineComment || mode.lineComment, lines = [];\n    var pad = options.padding == null ? \" \" : options.padding, didSomething;\n    lineComment: {\n      if (!lineString) break lineComment;\n      for (var i = start; i <= end; ++i) {\n        var line = self.getLine(i);\n        var found = line.indexOf(lineString);\n        if (found > -1 && !/comment/.test(self.getTokenTypeAt(Pos(i, found + 1)))) found = -1;\n        if (found == -1 && nonWS.test(line)) break lineComment;\n        if (found > -1 && nonWS.test(line.slice(0, found))) break lineComment;\n        lines.push(line);\n      }\n      self.operation(function() {\n        for (var i = start; i <= end; ++i) {\n          var line = lines[i - start];\n          var pos = line.indexOf(lineString), endPos = pos + lineString.length;\n          if (pos < 0) continue;\n          if (line.slice(endPos, endPos + pad.length) == pad) endPos += pad.length;\n          didSomething = true;\n          self.replaceRange(\"\", Pos(i, pos), Pos(i, endPos));\n        }\n      });\n      if (didSomething) return true;\n    }\n\n    // Try block comments\n    var startString = options.blockCommentStart || mode.blockCommentStart;\n    var endString = options.blockCommentEnd || mode.blockCommentEnd;\n    if (!startString || !endString) return false;\n    var lead = options.blockCommentLead || mode.blockCommentLead;\n    var startLine = self.getLine(start), open = startLine.indexOf(startString)\n    if (open == -1) return false\n    var endLine = end == start ? startLine : self.getLine(end)\n    var close = endLine.indexOf(endString, end == start ? open + startString.length : 0);\n    var insideStart = Pos(start, open + 1), insideEnd = Pos(end, close + 1)\n    if (close == -1 ||\n        !/comment/.test(self.getTokenTypeAt(insideStart)) ||\n        !/comment/.test(self.getTokenTypeAt(insideEnd)) ||\n        self.getRange(insideStart, insideEnd, \"\\n\").indexOf(endString) > -1)\n      return false;\n\n    // Avoid killing block comments completely outside the selection.\n    // Positions of the last startString before the start of the selection, and the first endString after it.\n    var lastStart = startLine.lastIndexOf(startString, from.ch);\n    var firstEnd = lastStart == -1 ? -1 : startLine.slice(0, from.ch).indexOf(endString, lastStart + startString.length);\n    if (lastStart != -1 && firstEnd != -1 && firstEnd + endString.length != from.ch) return false;\n    // Positions of the first endString after the end of the selection, and the last startString before it.\n    firstEnd = endLine.indexOf(endString, to.ch);\n    var almostLastStart = endLine.slice(to.ch).lastIndexOf(startString, firstEnd - to.ch);\n    lastStart = (firstEnd == -1 || almostLastStart == -1) ? -1 : to.ch + almostLastStart;\n    if (firstEnd != -1 && lastStart != -1 && lastStart != to.ch) return false;\n\n    self.operation(function() {\n      self.replaceRange(\"\", Pos(end, close - (pad && endLine.slice(close - pad.length, close) == pad ? pad.length : 0)),\n                        Pos(end, close + endString.length));\n      var openEnd = open + startString.length;\n      if (pad && startLine.slice(openEnd, openEnd + pad.length) == pad) openEnd += pad.length;\n      self.replaceRange(\"\", Pos(start, open), Pos(start, openEnd));\n      if (lead) for (var i = start + 1; i <= end; ++i) {\n        var line = self.getLine(i), found = line.indexOf(lead);\n        if (found == -1 || nonWS.test(line.slice(0, found))) continue;\n        var foundEnd = found + lead.length;\n        if (pad && line.slice(foundEnd, foundEnd + pad.length) == pad) foundEnd += pad.length;\n        self.replaceRange(\"\", Pos(i, found), Pos(i, foundEnd));\n      }\n    });\n    return true;\n  });\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineSimpleMode = function(name, states) {\n    CodeMirror.defineMode(name, function(config) {\n      return CodeMirror.simpleMode(config, states);\n    });\n  };\n\n  CodeMirror.simpleMode = function(config, states) {\n    ensureState(states, \"start\");\n    var states_ = {}, meta = states.meta || {}, hasIndentation = false;\n    for (var state in states) if (state != meta && states.hasOwnProperty(state)) {\n      var list = states_[state] = [], orig = states[state];\n      for (var i = 0; i < orig.length; i++) {\n        var data = orig[i];\n        list.push(new Rule(data, states));\n        if (data.indent || data.dedent) hasIndentation = true;\n      }\n    }\n    var mode = {\n      startState: function() {\n        return {state: \"start\", pending: null,\n                local: null, localState: null,\n                indent: hasIndentation ? [] : null};\n      },\n      copyState: function(state) {\n        var s = {state: state.state, pending: state.pending,\n                 local: state.local, localState: null,\n                 indent: state.indent && state.indent.slice(0)};\n        if (state.localState)\n          s.localState = CodeMirror.copyState(state.local.mode, state.localState);\n        if (state.stack)\n          s.stack = state.stack.slice(0);\n        for (var pers = state.persistentStates; pers; pers = pers.next)\n          s.persistentStates = {mode: pers.mode,\n                                spec: pers.spec,\n                                state: pers.state == state.localState ? s.localState : CodeMirror.copyState(pers.mode, pers.state),\n                                next: s.persistentStates};\n        return s;\n      },\n      token: tokenFunction(states_, config),\n      innerMode: function(state) { return state.local && {mode: state.local.mode, state: state.localState}; },\n      indent: indentFunction(states_, meta)\n    };\n    if (meta) for (var prop in meta) if (meta.hasOwnProperty(prop))\n      mode[prop] = meta[prop];\n    return mode;\n  };\n\n  function ensureState(states, name) {\n    if (!states.hasOwnProperty(name))\n      throw new Error(\"Undefined state \" + name + \" in simple mode\");\n  }\n\n  function toRegex(val, caret) {\n    if (!val) return /(?:)/;\n    var flags = \"\";\n    if (val instanceof RegExp) {\n      if (val.ignoreCase) flags = \"i\";\n      val = val.source;\n    } else {\n      val = String(val);\n    }\n    return new RegExp((caret === false ? \"\" : \"^\") + \"(?:\" + val + \")\", flags);\n  }\n\n  function asToken(val) {\n    if (!val) return null;\n    if (val.apply) return val\n    if (typeof val == \"string\") return val.replace(/\\./g, \" \");\n    var result = [];\n    for (var i = 0; i < val.length; i++)\n      result.push(val[i] && val[i].replace(/\\./g, \" \"));\n    return result;\n  }\n\n  function Rule(data, states) {\n    if (data.next || data.push) ensureState(states, data.next || data.push);\n    this.regex = toRegex(data.regex);\n    this.token = asToken(data.token);\n    this.data = data;\n  }\n\n  function tokenFunction(states, config) {\n    return function(stream, state) {\n      if (state.pending) {\n        var pend = state.pending.shift();\n        if (state.pending.length == 0) state.pending = null;\n        stream.pos += pend.text.length;\n        return pend.token;\n      }\n\n      if (state.local) {\n        if (state.local.end && stream.match(state.local.end)) {\n          var tok = state.local.endToken || null;\n          state.local = state.localState = null;\n          return tok;\n        } else {\n          var tok = state.local.mode.token(stream, state.localState), m;\n          if (state.local.endScan && (m = state.local.endScan.exec(stream.current())))\n            stream.pos = stream.start + m.index;\n          return tok;\n        }\n      }\n\n      var curState = states[state.state];\n      for (var i = 0; i < curState.length; i++) {\n        var rule = curState[i];\n        var matches = (!rule.data.sol || stream.sol()) && stream.match(rule.regex);\n        if (matches) {\n          if (rule.data.next) {\n            state.state = rule.data.next;\n          } else if (rule.data.push) {\n            (state.stack || (state.stack = [])).push(state.state);\n            state.state = rule.data.push;\n          } else if (rule.data.pop && state.stack && state.stack.length) {\n            state.state = state.stack.pop();\n          }\n\n          if (rule.data.mode)\n            enterLocalMode(config, state, rule.data.mode, rule.token);\n          if (rule.data.indent)\n            state.indent.push(stream.indentation() + config.indentUnit);\n          if (rule.data.dedent)\n            state.indent.pop();\n          var token = rule.token\n          if (token && token.apply) token = token(matches)\n          if (matches.length > 2 && rule.token && typeof rule.token != \"string\") {\n            state.pending = [];\n            for (var j = 2; j < matches.length; j++)\n              if (matches[j])\n                state.pending.push({text: matches[j], token: rule.token[j - 1]});\n            stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0));\n            return token[0];\n          } else if (token && token.join) {\n            return token[0];\n          } else {\n            return token;\n          }\n        }\n      }\n      stream.next();\n      return null;\n    };\n  }\n\n  function cmp(a, b) {\n    if (a === b) return true;\n    if (!a || typeof a != \"object\" || !b || typeof b != \"object\") return false;\n    var props = 0;\n    for (var prop in a) if (a.hasOwnProperty(prop)) {\n      if (!b.hasOwnProperty(prop) || !cmp(a[prop], b[prop])) return false;\n      props++;\n    }\n    for (var prop in b) if (b.hasOwnProperty(prop)) props--;\n    return props == 0;\n  }\n\n  function enterLocalMode(config, state, spec, token) {\n    var pers;\n    if (spec.persistent) for (var p = state.persistentStates; p && !pers; p = p.next)\n      if (spec.spec ? cmp(spec.spec, p.spec) : spec.mode == p.mode) pers = p;\n    var mode = pers ? pers.mode : spec.mode || CodeMirror.getMode(config, spec.spec);\n    var lState = pers ? pers.state : CodeMirror.startState(mode);\n    if (spec.persistent && !pers)\n      state.persistentStates = {mode: mode, spec: spec.spec, state: lState, next: state.persistentStates};\n\n    state.localState = lState;\n    state.local = {mode: mode,\n                   end: spec.end && toRegex(spec.end),\n                   endScan: spec.end && spec.forceEnd !== false && toRegex(spec.end, false),\n                   endToken: token && token.join ? token[token.length - 1] : token};\n  }\n\n  function indexOf(val, arr) {\n    for (var i = 0; i < arr.length; i++) if (arr[i] === val) return true;\n  }\n\n  function indentFunction(states, meta) {\n    return function(state, textAfter, line) {\n      if (state.local && state.local.mode.indent)\n        return state.local.mode.indent(state.localState, textAfter, line);\n      if (state.indent == null || state.local || meta.dontIndentStates && indexOf(state.state, meta.dontIndentStates) > -1)\n        return CodeMirror.Pass;\n\n      var pos = state.indent.length - 1, rules = states[state.state];\n      scan: for (;;) {\n        for (var i = 0; i < rules.length; i++) {\n          var rule = rules[i];\n          if (rule.data.dedent && rule.data.dedentIfLineStart !== false) {\n            var m = rule.regex.exec(textAfter);\n            if (m && m[0]) {\n              pos--;\n              if (rule.next || rule.push) rules = states[rule.next || rule.push];\n              textAfter = textAfter.slice(m[0].length);\n              continue scan;\n            }\n          }\n        }\n        break;\n      }\n      return pos < 0 ? 0 : state.indent[pos];\n    };\n  }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Stylus mode created by Dmitry Kiselyov http://git.io/AaRB\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineMode(\"stylus\", function(config) {\n    var indentUnit = config.indentUnit,\n        indentUnitString = '',\n        tagKeywords = keySet(tagKeywords_),\n        tagVariablesRegexp = /^(a|b|i|s|col|em)$/i,\n        propertyKeywords = keySet(propertyKeywords_),\n        nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_),\n        valueKeywords = keySet(valueKeywords_),\n        colorKeywords = keySet(colorKeywords_),\n        documentTypes = keySet(documentTypes_),\n        documentTypesRegexp = wordRegexp(documentTypes_),\n        mediaFeatures = keySet(mediaFeatures_),\n        mediaTypes = keySet(mediaTypes_),\n        fontProperties = keySet(fontProperties_),\n        operatorsRegexp = /^\\s*([.]{2,3}|&&|\\|\\||\\*\\*|[?!=:]?=|[-+*\\/%<>]=?|\\?:|\\~)/,\n        wordOperatorKeywordsRegexp = wordRegexp(wordOperatorKeywords_),\n        blockKeywords = keySet(blockKeywords_),\n        vendorPrefixesRegexp = new RegExp(/^\\-(moz|ms|o|webkit)-/i),\n        commonAtoms = keySet(commonAtoms_),\n        firstWordMatch = \"\",\n        states = {},\n        ch,\n        style,\n        type,\n        override;\n\n    while (indentUnitString.length < indentUnit) indentUnitString += ' ';\n\n    /**\n     * Tokenizers\n     */\n    function tokenBase(stream, state) {\n      firstWordMatch = stream.string.match(/(^[\\w-]+\\s*=\\s*$)|(^\\s*[\\w-]+\\s*=\\s*[\\w-])|(^\\s*(\\.|#|@|\\$|\\&|\\[|\\d|\\+|::?|\\{|\\>|~|\\/)?\\s*[\\w-]*([a-z0-9-]|\\*|\\/\\*)(\\(|,)?)/);\n      state.context.line.firstWord = firstWordMatch ? firstWordMatch[0].replace(/^\\s*/, \"\") : \"\";\n      state.context.line.indent = stream.indentation();\n      ch = stream.peek();\n\n      // Line comment\n      if (stream.match(\"//\")) {\n        stream.skipToEnd();\n        return [\"comment\", \"comment\"];\n      }\n      // Block comment\n      if (stream.match(\"/*\")) {\n        state.tokenize = tokenCComment;\n        return tokenCComment(stream, state);\n      }\n      // String\n      if (ch == \"\\\"\" || ch == \"'\") {\n        stream.next();\n        state.tokenize = tokenString(ch);\n        return state.tokenize(stream, state);\n      }\n      // Def\n      if (ch == \"@\") {\n        stream.next();\n        stream.eatWhile(/[\\w\\\\-]/);\n        return [\"def\", stream.current()];\n      }\n      // ID selector or Hex color\n      if (ch == \"#\") {\n        stream.next();\n        // Hex color\n        if (stream.match(/^[0-9a-f]{3}([0-9a-f]([0-9a-f]{2}){0,2})?\\b/i)) {\n          return [\"atom\", \"atom\"];\n        }\n        // ID selector\n        if (stream.match(/^[a-z][\\w-]*/i)) {\n          return [\"builtin\", \"hash\"];\n        }\n      }\n      // Vendor prefixes\n      if (stream.match(vendorPrefixesRegexp)) {\n        return [\"meta\", \"vendor-prefixes\"];\n      }\n      // Numbers\n      if (stream.match(/^-?[0-9]?\\.?[0-9]/)) {\n        stream.eatWhile(/[a-z%]/i);\n        return [\"number\", \"unit\"];\n      }\n      // !important|optional\n      if (ch == \"!\") {\n        stream.next();\n        return [stream.match(/^(important|optional)/i) ? \"keyword\": \"operator\", \"important\"];\n      }\n      // Class\n      if (ch == \".\" && stream.match(/^\\.[a-z][\\w-]*/i)) {\n        return [\"qualifier\", \"qualifier\"];\n      }\n      // url url-prefix domain regexp\n      if (stream.match(documentTypesRegexp)) {\n        if (stream.peek() == \"(\") state.tokenize = tokenParenthesized;\n        return [\"property\", \"word\"];\n      }\n      // Mixins / Functions\n      if (stream.match(/^[a-z][\\w-]*\\(/i)) {\n        stream.backUp(1);\n        return [\"keyword\", \"mixin\"];\n      }\n      // Block mixins\n      if (stream.match(/^(\\+|-)[a-z][\\w-]*\\(/i)) {\n        stream.backUp(1);\n        return [\"keyword\", \"block-mixin\"];\n      }\n      // Parent Reference BEM naming\n      if (stream.string.match(/^\\s*&/) && stream.match(/^[-_]+[a-z][\\w-]*/)) {\n        return [\"qualifier\", \"qualifier\"];\n      }\n      // / Root Reference & Parent Reference\n      if (stream.match(/^(\\/|&)(-|_|:|\\.|#|[a-z])/)) {\n        stream.backUp(1);\n        return [\"variable-3\", \"reference\"];\n      }\n      if (stream.match(/^&{1}\\s*$/)) {\n        return [\"variable-3\", \"reference\"];\n      }\n      // Word operator\n      if (stream.match(wordOperatorKeywordsRegexp)) {\n        return [\"operator\", \"operator\"];\n      }\n      // Word\n      if (stream.match(/^\\$?[-_]*[a-z0-9]+[\\w-]*/i)) {\n        // Variable\n        if (stream.match(/^(\\.|\\[)[\\w-\\'\\\"\\]]+/i, false)) {\n          if (!wordIsTag(stream.current())) {\n            stream.match(/\\./);\n            return [\"variable-2\", \"variable-name\"];\n          }\n        }\n        return [\"variable-2\", \"word\"];\n      }\n      // Operators\n      if (stream.match(operatorsRegexp)) {\n        return [\"operator\", stream.current()];\n      }\n      // Delimiters\n      if (/[:;,{}\\[\\]\\(\\)]/.test(ch)) {\n        stream.next();\n        return [null, ch];\n      }\n      // Non-detected items\n      stream.next();\n      return [null, null];\n    }\n\n    /**\n     * Token comment\n     */\n    function tokenCComment(stream, state) {\n      var maybeEnd = false, ch;\n      while ((ch = stream.next()) != null) {\n        if (maybeEnd && ch == \"/\") {\n          state.tokenize = null;\n          break;\n        }\n        maybeEnd = (ch == \"*\");\n      }\n      return [\"comment\", \"comment\"];\n    }\n\n    /**\n     * Token string\n     */\n    function tokenString(quote) {\n      return function(stream, state) {\n        var escaped = false, ch;\n        while ((ch = stream.next()) != null) {\n          if (ch == quote && !escaped) {\n            if (quote == \")\") stream.backUp(1);\n            break;\n          }\n          escaped = !escaped && ch == \"\\\\\";\n        }\n        if (ch == quote || !escaped && quote != \")\") state.tokenize = null;\n        return [\"string\", \"string\"];\n      };\n    }\n\n    /**\n     * Token parenthesized\n     */\n    function tokenParenthesized(stream, state) {\n      stream.next(); // Must be \"(\"\n      if (!stream.match(/\\s*[\\\"\\')]/, false))\n        state.tokenize = tokenString(\")\");\n      else\n        state.tokenize = null;\n      return [null, \"(\"];\n    }\n\n    /**\n     * Context management\n     */\n    function Context(type, indent, prev, line) {\n      this.type = type;\n      this.indent = indent;\n      this.prev = prev;\n      this.line = line || {firstWord: \"\", indent: 0};\n    }\n\n    function pushContext(state, stream, type, indent) {\n      indent = indent >= 0 ? indent : indentUnit;\n      state.context = new Context(type, stream.indentation() + indent, state.context);\n      return type;\n    }\n\n    function popContext(state, currentIndent) {\n      var contextIndent = state.context.indent - indentUnit;\n      currentIndent = currentIndent || false;\n      state.context = state.context.prev;\n      if (currentIndent) state.context.indent = contextIndent;\n      return state.context.type;\n    }\n\n    function pass(type, stream, state) {\n      return states[state.context.type](type, stream, state);\n    }\n\n    function popAndPass(type, stream, state, n) {\n      for (var i = n || 1; i > 0; i--)\n        state.context = state.context.prev;\n      return pass(type, stream, state);\n    }\n\n\n    /**\n     * Parser\n     */\n    function wordIsTag(word) {\n      return word.toLowerCase() in tagKeywords;\n    }\n\n    function wordIsProperty(word) {\n      word = word.toLowerCase();\n      return word in propertyKeywords || word in fontProperties;\n    }\n\n    function wordIsBlock(word) {\n      return word.toLowerCase() in blockKeywords;\n    }\n\n    function wordIsVendorPrefix(word) {\n      return word.toLowerCase().match(vendorPrefixesRegexp);\n    }\n\n    function wordAsValue(word) {\n      var wordLC = word.toLowerCase();\n      var override = \"variable-2\";\n      if (wordIsTag(word)) override = \"tag\";\n      else if (wordIsBlock(word)) override = \"block-keyword\";\n      else if (wordIsProperty(word)) override = \"property\";\n      else if (wordLC in valueKeywords || wordLC in commonAtoms) override = \"atom\";\n      else if (wordLC == \"return\" || wordLC in colorKeywords) override = \"keyword\";\n\n      // Font family\n      else if (word.match(/^[A-Z]/)) override = \"string\";\n      return override;\n    }\n\n    function typeIsBlock(type, stream) {\n      return ((endOfLine(stream) && (type == \"{\" || type == \"]\" || type == \"hash\" || type == \"qualifier\")) || type == \"block-mixin\");\n    }\n\n    function typeIsInterpolation(type, stream) {\n      return type == \"{\" && stream.match(/^\\s*\\$?[\\w-]+/i, false);\n    }\n\n    function typeIsPseudo(type, stream) {\n      return type == \":\" && stream.match(/^[a-z-]+/, false);\n    }\n\n    function startOfLine(stream) {\n      return stream.sol() || stream.string.match(new RegExp(\"^\\\\s*\" + escapeRegExp(stream.current())));\n    }\n\n    function endOfLine(stream) {\n      return stream.eol() || stream.match(/^\\s*$/, false);\n    }\n\n    function firstWordOfLine(line) {\n      var re = /^\\s*[-_]*[a-z0-9]+[\\w-]*/i;\n      var result = typeof line == \"string\" ? line.match(re) : line.string.match(re);\n      return result ? result[0].replace(/^\\s*/, \"\") : \"\";\n    }\n\n\n    /**\n     * Block\n     */\n    states.block = function(type, stream, state) {\n      if ((type == \"comment\" && startOfLine(stream)) ||\n          (type == \",\" && endOfLine(stream)) ||\n          type == \"mixin\") {\n        return pushContext(state, stream, \"block\", 0);\n      }\n      if (typeIsInterpolation(type, stream)) {\n        return pushContext(state, stream, \"interpolation\");\n      }\n      if (endOfLine(stream) && type == \"]\") {\n        if (!/^\\s*(\\.|#|:|\\[|\\*|&)/.test(stream.string) && !wordIsTag(firstWordOfLine(stream))) {\n          return pushContext(state, stream, \"block\", 0);\n        }\n      }\n      if (typeIsBlock(type, stream)) {\n        return pushContext(state, stream, \"block\");\n      }\n      if (type == \"}\" && endOfLine(stream)) {\n        return pushContext(state, stream, \"block\", 0);\n      }\n      if (type == \"variable-name\") {\n        if (stream.string.match(/^\\s?\\$[\\w-\\.\\[\\]\\'\\\"]+$/) || wordIsBlock(firstWordOfLine(stream))) {\n          return pushContext(state, stream, \"variableName\");\n        }\n        else {\n          return pushContext(state, stream, \"variableName\", 0);\n        }\n      }\n      if (type == \"=\") {\n        if (!endOfLine(stream) && !wordIsBlock(firstWordOfLine(stream))) {\n          return pushContext(state, stream, \"block\", 0);\n        }\n        return pushContext(state, stream, \"block\");\n      }\n      if (type == \"*\") {\n        if (endOfLine(stream) || stream.match(/\\s*(,|\\.|#|\\[|:|{)/,false)) {\n          override = \"tag\";\n          return pushContext(state, stream, \"block\");\n        }\n      }\n      if (typeIsPseudo(type, stream)) {\n        return pushContext(state, stream, \"pseudo\");\n      }\n      if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) {\n        return pushContext(state, stream, endOfLine(stream) ? \"block\" : \"atBlock\");\n      }\n      if (/@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) {\n        return pushContext(state, stream, \"keyframes\");\n      }\n      if (/@extends?/.test(type)) {\n        return pushContext(state, stream, \"extend\", 0);\n      }\n      if (type && type.charAt(0) == \"@\") {\n\n        // Property Lookup\n        if (stream.indentation() > 0 && wordIsProperty(stream.current().slice(1))) {\n          override = \"variable-2\";\n          return \"block\";\n        }\n        if (/(@import|@require|@charset)/.test(type)) {\n          return pushContext(state, stream, \"block\", 0);\n        }\n        return pushContext(state, stream, \"block\");\n      }\n      if (type == \"reference\" && endOfLine(stream)) {\n        return pushContext(state, stream, \"block\");\n      }\n      if (type == \"(\") {\n        return pushContext(state, stream, \"parens\");\n      }\n\n      if (type == \"vendor-prefixes\") {\n        return pushContext(state, stream, \"vendorPrefixes\");\n      }\n      if (type == \"word\") {\n        var word = stream.current();\n        override = wordAsValue(word);\n\n        if (override == \"property\") {\n          if (startOfLine(stream)) {\n            return pushContext(state, stream, \"block\", 0);\n          } else {\n            override = \"atom\";\n            return \"block\";\n          }\n        }\n\n        if (override == \"tag\") {\n\n          // tag is a css value\n          if (/embed|menu|pre|progress|sub|table/.test(word)) {\n            if (wordIsProperty(firstWordOfLine(stream))) {\n              override = \"atom\";\n              return \"block\";\n            }\n          }\n\n          // tag is an attribute\n          if (stream.string.match(new RegExp(\"\\\\[\\\\s*\" + word + \"|\" + word +\"\\\\s*\\\\]\"))) {\n            override = \"atom\";\n            return \"block\";\n          }\n\n          // tag is a variable\n          if (tagVariablesRegexp.test(word)) {\n            if ((startOfLine(stream) && stream.string.match(/=/)) ||\n                (!startOfLine(stream) &&\n                 !stream.string.match(/^(\\s*\\.|#|\\&|\\[|\\/|>|\\*)/) &&\n                 !wordIsTag(firstWordOfLine(stream)))) {\n              override = \"variable-2\";\n              if (wordIsBlock(firstWordOfLine(stream)))  return \"block\";\n              return pushContext(state, stream, \"block\", 0);\n            }\n          }\n\n          if (endOfLine(stream)) return pushContext(state, stream, \"block\");\n        }\n        if (override == \"block-keyword\") {\n          override = \"keyword\";\n\n          // Postfix conditionals\n          if (stream.current(/(if|unless)/) && !startOfLine(stream)) {\n            return \"block\";\n          }\n          return pushContext(state, stream, \"block\");\n        }\n        if (word == \"return\") return pushContext(state, stream, \"block\", 0);\n\n        // Placeholder selector\n        if (override == \"variable-2\" && stream.string.match(/^\\s?\\$[\\w-\\.\\[\\]\\'\\\"]+$/)) {\n          return pushContext(state, stream, \"block\");\n        }\n      }\n      return state.context.type;\n    };\n\n\n    /**\n     * Parens\n     */\n    states.parens = function(type, stream, state) {\n      if (type == \"(\") return pushContext(state, stream, \"parens\");\n      if (type == \")\") {\n        if (state.context.prev.type == \"parens\") {\n          return popContext(state);\n        }\n        if ((stream.string.match(/^[a-z][\\w-]*\\(/i) && endOfLine(stream)) ||\n            wordIsBlock(firstWordOfLine(stream)) ||\n            /(\\.|#|:|\\[|\\*|&|>|~|\\+|\\/)/.test(firstWordOfLine(stream)) ||\n            (!stream.string.match(/^-?[a-z][\\w-\\.\\[\\]\\'\\\"]*\\s*=/) &&\n             wordIsTag(firstWordOfLine(stream)))) {\n          return pushContext(state, stream, \"block\");\n        }\n        if (stream.string.match(/^[\\$-]?[a-z][\\w-\\.\\[\\]\\'\\\"]*\\s*=/) ||\n            stream.string.match(/^\\s*(\\(|\\)|[0-9])/) ||\n            stream.string.match(/^\\s+[a-z][\\w-]*\\(/i) ||\n            stream.string.match(/^\\s+[\\$-]?[a-z]/i)) {\n          return pushContext(state, stream, \"block\", 0);\n        }\n        if (endOfLine(stream)) return pushContext(state, stream, \"block\");\n        else return pushContext(state, stream, \"block\", 0);\n      }\n      if (type && type.charAt(0) == \"@\" && wordIsProperty(stream.current().slice(1))) {\n        override = \"variable-2\";\n      }\n      if (type == \"word\") {\n        var word = stream.current();\n        override = wordAsValue(word);\n        if (override == \"tag\" && tagVariablesRegexp.test(word)) {\n          override = \"variable-2\";\n        }\n        if (override == \"property\" || word == \"to\") override = \"atom\";\n      }\n      if (type == \"variable-name\") {\n        return pushContext(state, stream, \"variableName\");\n      }\n      if (typeIsPseudo(type, stream)) {\n        return pushContext(state, stream, \"pseudo\");\n      }\n      return state.context.type;\n    };\n\n\n    /**\n     * Vendor prefixes\n     */\n    states.vendorPrefixes = function(type, stream, state) {\n      if (type == \"word\") {\n        override = \"property\";\n        return pushContext(state, stream, \"block\", 0);\n      }\n      return popContext(state);\n    };\n\n\n    /**\n     * Pseudo\n     */\n    states.pseudo = function(type, stream, state) {\n      if (!wordIsProperty(firstWordOfLine(stream.string))) {\n        stream.match(/^[a-z-]+/);\n        override = \"variable-3\";\n        if (endOfLine(stream)) return pushContext(state, stream, \"block\");\n        return popContext(state);\n      }\n      return popAndPass(type, stream, state);\n    };\n\n\n    /**\n     * atBlock\n     */\n    states.atBlock = function(type, stream, state) {\n      if (type == \"(\") return pushContext(state, stream, \"atBlock_parens\");\n      if (typeIsBlock(type, stream)) {\n        return pushContext(state, stream, \"block\");\n      }\n      if (typeIsInterpolation(type, stream)) {\n        return pushContext(state, stream, \"interpolation\");\n      }\n      if (type == \"word\") {\n        var word = stream.current().toLowerCase();\n        if (/^(only|not|and|or)$/.test(word))\n          override = \"keyword\";\n        else if (documentTypes.hasOwnProperty(word))\n          override = \"tag\";\n        else if (mediaTypes.hasOwnProperty(word))\n          override = \"attribute\";\n        else if (mediaFeatures.hasOwnProperty(word))\n          override = \"property\";\n        else if (nonStandardPropertyKeywords.hasOwnProperty(word))\n          override = \"string-2\";\n        else override = wordAsValue(stream.current());\n        if (override == \"tag\" && endOfLine(stream)) {\n          return pushContext(state, stream, \"block\");\n        }\n      }\n      if (type == \"operator\" && /^(not|and|or)$/.test(stream.current())) {\n        override = \"keyword\";\n      }\n      return state.context.type;\n    };\n\n    states.atBlock_parens = function(type, stream, state) {\n      if (type == \"{\" || type == \"}\") return state.context.type;\n      if (type == \")\") {\n        if (endOfLine(stream)) return pushContext(state, stream, \"block\");\n        else return pushContext(state, stream, \"atBlock\");\n      }\n      if (type == \"word\") {\n        var word = stream.current().toLowerCase();\n        override = wordAsValue(word);\n        if (/^(max|min)/.test(word)) override = \"property\";\n        if (override == \"tag\") {\n          tagVariablesRegexp.test(word) ? override = \"variable-2\" : override = \"atom\";\n        }\n        return state.context.type;\n      }\n      return states.atBlock(type, stream, state);\n    };\n\n\n    /**\n     * Keyframes\n     */\n    states.keyframes = function(type, stream, state) {\n      if (stream.indentation() == \"0\" && ((type == \"}\" && startOfLine(stream)) || type == \"]\" || type == \"hash\"\n                                          || type == \"qualifier\" || wordIsTag(stream.current()))) {\n        return popAndPass(type, stream, state);\n      }\n      if (type == \"{\") return pushContext(state, stream, \"keyframes\");\n      if (type == \"}\") {\n        if (startOfLine(stream)) return popContext(state, true);\n        else return pushContext(state, stream, \"keyframes\");\n      }\n      if (type == \"unit\" && /^[0-9]+\\%$/.test(stream.current())) {\n        return pushContext(state, stream, \"keyframes\");\n      }\n      if (type == \"word\") {\n        override = wordAsValue(stream.current());\n        if (override == \"block-keyword\") {\n          override = \"keyword\";\n          return pushContext(state, stream, \"keyframes\");\n        }\n      }\n      if (/@(font-face|media|supports|(-moz-)?document)/.test(type)) {\n        return pushContext(state, stream, endOfLine(stream) ? \"block\" : \"atBlock\");\n      }\n      if (type == \"mixin\") {\n        return pushContext(state, stream, \"block\", 0);\n      }\n      return state.context.type;\n    };\n\n\n    /**\n     * Interpolation\n     */\n    states.interpolation = function(type, stream, state) {\n      if (type == \"{\") popContext(state) && pushContext(state, stream, \"block\");\n      if (type == \"}\") {\n        if (stream.string.match(/^\\s*(\\.|#|:|\\[|\\*|&|>|~|\\+|\\/)/i) ||\n            (stream.string.match(/^\\s*[a-z]/i) && wordIsTag(firstWordOfLine(stream)))) {\n          return pushContext(state, stream, \"block\");\n        }\n        if (!stream.string.match(/^(\\{|\\s*\\&)/) ||\n            stream.match(/\\s*[\\w-]/,false)) {\n          return pushContext(state, stream, \"block\", 0);\n        }\n        return pushContext(state, stream, \"block\");\n      }\n      if (type == \"variable-name\") {\n        return pushContext(state, stream, \"variableName\", 0);\n      }\n      if (type == \"word\") {\n        override = wordAsValue(stream.current());\n        if (override == \"tag\") override = \"atom\";\n      }\n      return state.context.type;\n    };\n\n\n    /**\n     * Extend/s\n     */\n    states.extend = function(type, stream, state) {\n      if (type == \"[\" || type == \"=\") return \"extend\";\n      if (type == \"]\") return popContext(state);\n      if (type == \"word\") {\n        override = wordAsValue(stream.current());\n        return \"extend\";\n      }\n      return popContext(state);\n    };\n\n\n    /**\n     * Variable name\n     */\n    states.variableName = function(type, stream, state) {\n      if (type == \"string\" || type == \"[\" || type == \"]\" || stream.current().match(/^(\\.|\\$)/)) {\n        if (stream.current().match(/^\\.[\\w-]+/i)) override = \"variable-2\";\n        return \"variableName\";\n      }\n      return popAndPass(type, stream, state);\n    };\n\n\n    return {\n      startState: function(base) {\n        return {\n          tokenize: null,\n          state: \"block\",\n          context: new Context(\"block\", base || 0, null)\n        };\n      },\n      token: function(stream, state) {\n        if (!state.tokenize && stream.eatSpace()) return null;\n        style = (state.tokenize || tokenBase)(stream, state);\n        if (style && typeof style == \"object\") {\n          type = style[1];\n          style = style[0];\n        }\n        override = style;\n        state.state = states[state.state](type, stream, state);\n        return override;\n      },\n      indent: function(state, textAfter, line) {\n\n        var cx = state.context,\n            ch = textAfter && textAfter.charAt(0),\n            indent = cx.indent,\n            lineFirstWord = firstWordOfLine(textAfter),\n            lineIndent = line.match(/^\\s*/)[0].replace(/\\t/g, indentUnitString).length,\n            prevLineFirstWord = state.context.prev ? state.context.prev.line.firstWord : \"\",\n            prevLineIndent = state.context.prev ? state.context.prev.line.indent : lineIndent;\n\n        if (cx.prev &&\n            (ch == \"}\" && (cx.type == \"block\" || cx.type == \"atBlock\" || cx.type == \"keyframes\") ||\n             ch == \")\" && (cx.type == \"parens\" || cx.type == \"atBlock_parens\") ||\n             ch == \"{\" && (cx.type == \"at\"))) {\n          indent = cx.indent - indentUnit;\n        } else if (!(/(\\})/.test(ch))) {\n          if (/@|\\$|\\d/.test(ch) ||\n              /^\\{/.test(textAfter) ||\n/^\\s*\\/(\\/|\\*)/.test(textAfter) ||\n              /^\\s*\\/\\*/.test(prevLineFirstWord) ||\n              /^\\s*[\\w-\\.\\[\\]\\'\\\"]+\\s*(\\?|:|\\+)?=/i.test(textAfter) ||\n/^(\\+|-)?[a-z][\\w-]*\\(/i.test(textAfter) ||\n/^return/.test(textAfter) ||\n              wordIsBlock(lineFirstWord)) {\n            indent = lineIndent;\n          } else if (/(\\.|#|:|\\[|\\*|&|>|~|\\+|\\/)/.test(ch) || wordIsTag(lineFirstWord)) {\n            if (/\\,\\s*$/.test(prevLineFirstWord)) {\n              indent = prevLineIndent;\n            } else if (/^\\s+/.test(line) && (/(\\.|#|:|\\[|\\*|&|>|~|\\+|\\/)/.test(prevLineFirstWord) || wordIsTag(prevLineFirstWord))) {\n              indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit;\n            } else {\n              indent = lineIndent;\n            }\n          } else if (!/,\\s*$/.test(line) && (wordIsVendorPrefix(lineFirstWord) || wordIsProperty(lineFirstWord))) {\n            if (wordIsBlock(prevLineFirstWord)) {\n              indent = lineIndent <= prevLineIndent ? prevLineIndent : prevLineIndent + indentUnit;\n            } else if (/^\\{/.test(prevLineFirstWord)) {\n              indent = lineIndent <= prevLineIndent ? lineIndent : prevLineIndent + indentUnit;\n            } else if (wordIsVendorPrefix(prevLineFirstWord) || wordIsProperty(prevLineFirstWord)) {\n              indent = lineIndent >= prevLineIndent ? prevLineIndent : lineIndent;\n            } else if (/^(\\.|#|:|\\[|\\*|&|@|\\+|\\-|>|~|\\/)/.test(prevLineFirstWord) ||\n                      /=\\s*$/.test(prevLineFirstWord) ||\n                      wordIsTag(prevLineFirstWord) ||\n                      /^\\$[\\w-\\.\\[\\]\\'\\\"]/.test(prevLineFirstWord)) {\n              indent = prevLineIndent + indentUnit;\n            } else {\n              indent = lineIndent;\n            }\n          }\n        }\n        return indent;\n      },\n      electricChars: \"}\",\n      lineComment: \"//\",\n      fold: \"indent\"\n    };\n  });\n\n  // developer.mozilla.org/en-US/docs/Web/HTML/Element\n  var tagKeywords_ = [\"a\",\"abbr\",\"address\",\"area\",\"article\",\"aside\",\"audio\", \"b\", \"base\",\"bdi\", \"bdo\",\"bgsound\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"cite\", \"code\",\"col\",\"colgroup\",\"data\",\"datalist\",\"dd\",\"del\",\"details\",\"dfn\",\"div\", \"dl\",\"dt\",\"em\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\", \"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"iframe\", \"img\",\"input\",\"ins\",\"kbd\",\"keygen\",\"label\",\"legend\",\"li\",\"link\",\"main\",\"map\", \"mark\",\"marquee\",\"menu\",\"menuitem\",\"meta\",\"meter\",\"nav\",\"nobr\",\"noframes\", \"noscript\",\"object\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"param\",\"pre\", \"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"script\",\"section\",\"select\", \"small\",\"source\",\"span\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\", \"u\",\"ul\",\"var\",\"video\"];\n\n  // github.com/codemirror/CodeMirror/blob/master/mode/css/css.js\n  var documentTypes_ = [\"domain\", \"regexp\", \"url\", \"url-prefix\"];\n  var mediaTypes_ = [\"all\",\"aural\",\"braille\",\"handheld\",\"print\",\"projection\",\"screen\",\"tty\",\"tv\",\"embossed\"];\n  var mediaFeatures_ = [\"width\",\"min-width\",\"max-width\",\"height\",\"min-height\",\"max-height\",\"device-width\",\"min-device-width\",\"max-device-width\",\"device-height\",\"min-device-height\",\"max-device-height\",\"aspect-ratio\",\"min-aspect-ratio\",\"max-aspect-ratio\",\"device-aspect-ratio\",\"min-device-aspect-ratio\",\"max-device-aspect-ratio\",\"color\",\"min-color\",\"max-color\",\"color-index\",\"min-color-index\",\"max-color-index\",\"monochrome\",\"min-monochrome\",\"max-monochrome\",\"resolution\",\"min-resolution\",\"max-resolution\",\"scan\",\"grid\"];\n  var propertyKeywords_ = [\"align-content\",\"align-items\",\"align-self\",\"alignment-adjust\",\"alignment-baseline\",\"anchor-point\",\"animation\",\"animation-delay\",\"animation-direction\",\"animation-duration\",\"animation-fill-mode\",\"animation-iteration-count\",\"animation-name\",\"animation-play-state\",\"animation-timing-function\",\"appearance\",\"azimuth\",\"backface-visibility\",\"background\",\"background-attachment\",\"background-clip\",\"background-color\",\"background-image\",\"background-origin\",\"background-position\",\"background-repeat\",\"background-size\",\"baseline-shift\",\"binding\",\"bleed\",\"bookmark-label\",\"bookmark-level\",\"bookmark-state\",\"bookmark-target\",\"border\",\"border-bottom\",\"border-bottom-color\",\"border-bottom-left-radius\",\"border-bottom-right-radius\",\"border-bottom-style\",\"border-bottom-width\",\"border-collapse\",\"border-color\",\"border-image\",\"border-image-outset\",\"border-image-repeat\",\"border-image-slice\",\"border-image-source\",\"border-image-width\",\"border-left\",\"border-left-color\",\"border-left-style\",\"border-left-width\",\"border-radius\",\"border-right\",\"border-right-color\",\"border-right-style\",\"border-right-width\",\"border-spacing\",\"border-style\",\"border-top\",\"border-top-color\",\"border-top-left-radius\",\"border-top-right-radius\",\"border-top-style\",\"border-top-width\",\"border-width\",\"bottom\",\"box-decoration-break\",\"box-shadow\",\"box-sizing\",\"break-after\",\"break-before\",\"break-inside\",\"caption-side\",\"clear\",\"clip\",\"color\",\"color-profile\",\"column-count\",\"column-fill\",\"column-gap\",\"column-rule\",\"column-rule-color\",\"column-rule-style\",\"column-rule-width\",\"column-span\",\"column-width\",\"columns\",\"content\",\"counter-increment\",\"counter-reset\",\"crop\",\"cue\",\"cue-after\",\"cue-before\",\"cursor\",\"direction\",\"display\",\"dominant-baseline\",\"drop-initial-after-adjust\",\"drop-initial-after-align\",\"drop-initial-before-adjust\",\"drop-initial-before-align\",\"drop-initial-size\",\"drop-initial-value\",\"elevation\",\"empty-cells\",\"fit\",\"fit-position\",\"flex\",\"flex-basis\",\"flex-direction\",\"flex-flow\",\"flex-grow\",\"flex-shrink\",\"flex-wrap\",\"float\",\"float-offset\",\"flow-from\",\"flow-into\",\"font\",\"font-feature-settings\",\"font-family\",\"font-kerning\",\"font-language-override\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-synthesis\",\"font-variant\",\"font-variant-alternates\",\"font-variant-caps\",\"font-variant-east-asian\",\"font-variant-ligatures\",\"font-variant-numeric\",\"font-variant-position\",\"font-weight\",\"grid\",\"grid-area\",\"grid-auto-columns\",\"grid-auto-flow\",\"grid-auto-position\",\"grid-auto-rows\",\"grid-column\",\"grid-column-end\",\"grid-column-start\",\"grid-row\",\"grid-row-end\",\"grid-row-start\",\"grid-template\",\"grid-template-areas\",\"grid-template-columns\",\"grid-template-rows\",\"hanging-punctuation\",\"height\",\"hyphens\",\"icon\",\"image-orientation\",\"image-rendering\",\"image-resolution\",\"inline-box-align\",\"justify-content\",\"left\",\"letter-spacing\",\"line-break\",\"line-height\",\"line-stacking\",\"line-stacking-ruby\",\"line-stacking-shift\",\"line-stacking-strategy\",\"list-style\",\"list-style-image\",\"list-style-position\",\"list-style-type\",\"margin\",\"margin-bottom\",\"margin-left\",\"margin-right\",\"margin-top\",\"marker-offset\",\"marks\",\"marquee-direction\",\"marquee-loop\",\"marquee-play-count\",\"marquee-speed\",\"marquee-style\",\"max-height\",\"max-width\",\"min-height\",\"min-width\",\"move-to\",\"nav-down\",\"nav-index\",\"nav-left\",\"nav-right\",\"nav-up\",\"object-fit\",\"object-position\",\"opacity\",\"order\",\"orphans\",\"outline\",\"outline-color\",\"outline-offset\",\"outline-style\",\"outline-width\",\"overflow\",\"overflow-style\",\"overflow-wrap\",\"overflow-x\",\"overflow-y\",\"padding\",\"padding-bottom\",\"padding-left\",\"padding-right\",\"padding-top\",\"page\",\"page-break-after\",\"page-break-before\",\"page-break-inside\",\"page-policy\",\"pause\",\"pause-after\",\"pause-before\",\"perspective\",\"perspective-origin\",\"pitch\",\"pitch-range\",\"play-during\",\"position\",\"presentation-level\",\"punctuation-trim\",\"quotes\",\"region-break-after\",\"region-break-before\",\"region-break-inside\",\"region-fragment\",\"rendering-intent\",\"resize\",\"rest\",\"rest-after\",\"rest-before\",\"richness\",\"right\",\"rotation\",\"rotation-point\",\"ruby-align\",\"ruby-overhang\",\"ruby-position\",\"ruby-span\",\"shape-image-threshold\",\"shape-inside\",\"shape-margin\",\"shape-outside\",\"size\",\"speak\",\"speak-as\",\"speak-header\",\"speak-numeral\",\"speak-punctuation\",\"speech-rate\",\"stress\",\"string-set\",\"tab-size\",\"table-layout\",\"target\",\"target-name\",\"target-new\",\"target-position\",\"text-align\",\"text-align-last\",\"text-decoration\",\"text-decoration-color\",\"text-decoration-line\",\"text-decoration-skip\",\"text-decoration-style\",\"text-emphasis\",\"text-emphasis-color\",\"text-emphasis-position\",\"text-emphasis-style\",\"text-height\",\"text-indent\",\"text-justify\",\"text-outline\",\"text-overflow\",\"text-shadow\",\"text-size-adjust\",\"text-space-collapse\",\"text-transform\",\"text-underline-position\",\"text-wrap\",\"top\",\"transform\",\"transform-origin\",\"transform-style\",\"transition\",\"transition-delay\",\"transition-duration\",\"transition-property\",\"transition-timing-function\",\"unicode-bidi\",\"vertical-align\",\"visibility\",\"voice-balance\",\"voice-duration\",\"voice-family\",\"voice-pitch\",\"voice-range\",\"voice-rate\",\"voice-stress\",\"voice-volume\",\"volume\",\"white-space\",\"widows\",\"width\",\"will-change\",\"word-break\",\"word-spacing\",\"word-wrap\",\"z-index\",\"clip-path\",\"clip-rule\",\"mask\",\"enable-background\",\"filter\",\"flood-color\",\"flood-opacity\",\"lighting-color\",\"stop-color\",\"stop-opacity\",\"pointer-events\",\"color-interpolation\",\"color-interpolation-filters\",\"color-rendering\",\"fill\",\"fill-opacity\",\"fill-rule\",\"image-rendering\",\"marker\",\"marker-end\",\"marker-mid\",\"marker-start\",\"shape-rendering\",\"stroke\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke-width\",\"text-rendering\",\"baseline-shift\",\"dominant-baseline\",\"glyph-orientation-horizontal\",\"glyph-orientation-vertical\",\"text-anchor\",\"writing-mode\",\"font-smoothing\",\"osx-font-smoothing\"];\n  var nonStandardPropertyKeywords_ = [\"scrollbar-arrow-color\",\"scrollbar-base-color\",\"scrollbar-dark-shadow-color\",\"scrollbar-face-color\",\"scrollbar-highlight-color\",\"scrollbar-shadow-color\",\"scrollbar-3d-light-color\",\"scrollbar-track-color\",\"shape-inside\",\"searchfield-cancel-button\",\"searchfield-decoration\",\"searchfield-results-button\",\"searchfield-results-decoration\",\"zoom\"];\n  var fontProperties_ = [\"font-family\",\"src\",\"unicode-range\",\"font-variant\",\"font-feature-settings\",\"font-stretch\",\"font-weight\",\"font-style\"];\n  var colorKeywords_ = [\"aliceblue\",\"antiquewhite\",\"aqua\",\"aquamarine\",\"azure\",\"beige\",\"bisque\",\"black\",\"blanchedalmond\",\"blue\",\"blueviolet\",\"brown\",\"burlywood\",\"cadetblue\",\"chartreuse\",\"chocolate\",\"coral\",\"cornflowerblue\",\"cornsilk\",\"crimson\",\"cyan\",\"darkblue\",\"darkcyan\",\"darkgoldenrod\",\"darkgray\",\"darkgreen\",\"darkkhaki\",\"darkmagenta\",\"darkolivegreen\",\"darkorange\",\"darkorchid\",\"darkred\",\"darksalmon\",\"darkseagreen\",\"darkslateblue\",\"darkslategray\",\"darkturquoise\",\"darkviolet\",\"deeppink\",\"deepskyblue\",\"dimgray\",\"dodgerblue\",\"firebrick\",\"floralwhite\",\"forestgreen\",\"fuchsia\",\"gainsboro\",\"ghostwhite\",\"gold\",\"goldenrod\",\"gray\",\"grey\",\"green\",\"greenyellow\",\"honeydew\",\"hotpink\",\"indianred\",\"indigo\",\"ivory\",\"khaki\",\"lavender\",\"lavenderblush\",\"lawngreen\",\"lemonchiffon\",\"lightblue\",\"lightcoral\",\"lightcyan\",\"lightgoldenrodyellow\",\"lightgray\",\"lightgreen\",\"lightpink\",\"lightsalmon\",\"lightseagreen\",\"lightskyblue\",\"lightslategray\",\"lightsteelblue\",\"lightyellow\",\"lime\",\"limegreen\",\"linen\",\"magenta\",\"maroon\",\"mediumaquamarine\",\"mediumblue\",\"mediumorchid\",\"mediumpurple\",\"mediumseagreen\",\"mediumslateblue\",\"mediumspringgreen\",\"mediumturquoise\",\"mediumvioletred\",\"midnightblue\",\"mintcream\",\"mistyrose\",\"moccasin\",\"navajowhite\",\"navy\",\"oldlace\",\"olive\",\"olivedrab\",\"orange\",\"orangered\",\"orchid\",\"palegoldenrod\",\"palegreen\",\"paleturquoise\",\"palevioletred\",\"papayawhip\",\"peachpuff\",\"peru\",\"pink\",\"plum\",\"powderblue\",\"purple\",\"rebeccapurple\",\"red\",\"rosybrown\",\"royalblue\",\"saddlebrown\",\"salmon\",\"sandybrown\",\"seagreen\",\"seashell\",\"sienna\",\"silver\",\"skyblue\",\"slateblue\",\"slategray\",\"snow\",\"springgreen\",\"steelblue\",\"tan\",\"teal\",\"thistle\",\"tomato\",\"turquoise\",\"violet\",\"wheat\",\"white\",\"whitesmoke\",\"yellow\",\"yellowgreen\"];\n  var valueKeywords_ = [\"above\",\"absolute\",\"activeborder\",\"additive\",\"activecaption\",\"afar\",\"after-white-space\",\"ahead\",\"alias\",\"all\",\"all-scroll\",\"alphabetic\",\"alternate\",\"always\",\"amharic\",\"amharic-abegede\",\"antialiased\",\"appworkspace\",\"arabic-indic\",\"armenian\",\"asterisks\",\"attr\",\"auto\",\"avoid\",\"avoid-column\",\"avoid-page\",\"avoid-region\",\"background\",\"backwards\",\"baseline\",\"below\",\"bidi-override\",\"binary\",\"bengali\",\"blink\",\"block\",\"block-axis\",\"bold\",\"bolder\",\"border\",\"border-box\",\"both\",\"bottom\",\"break\",\"break-all\",\"break-word\",\"bullets\",\"button\",\"button-bevel\",\"buttonface\",\"buttonhighlight\",\"buttonshadow\",\"buttontext\",\"calc\",\"cambodian\",\"capitalize\",\"caps-lock-indicator\",\"caption\",\"captiontext\",\"caret\",\"cell\",\"center\",\"checkbox\",\"circle\",\"cjk-decimal\",\"cjk-earthly-branch\",\"cjk-heavenly-stem\",\"cjk-ideographic\",\"clear\",\"clip\",\"close-quote\",\"col-resize\",\"collapse\",\"column\",\"compact\",\"condensed\",\"contain\",\"content\",\"contents\",\"content-box\",\"context-menu\",\"continuous\",\"copy\",\"counter\",\"counters\",\"cover\",\"crop\",\"cross\",\"crosshair\",\"currentcolor\",\"cursive\",\"cyclic\",\"dashed\",\"decimal\",\"decimal-leading-zero\",\"default\",\"default-button\",\"destination-atop\",\"destination-in\",\"destination-out\",\"destination-over\",\"devanagari\",\"disc\",\"discard\",\"disclosure-closed\",\"disclosure-open\",\"document\",\"dot-dash\",\"dot-dot-dash\",\"dotted\",\"double\",\"down\",\"e-resize\",\"ease\",\"ease-in\",\"ease-in-out\",\"ease-out\",\"element\",\"ellipse\",\"ellipsis\",\"embed\",\"end\",\"ethiopic\",\"ethiopic-abegede\",\"ethiopic-abegede-am-et\",\"ethiopic-abegede-gez\",\"ethiopic-abegede-ti-er\",\"ethiopic-abegede-ti-et\",\"ethiopic-halehame-aa-er\",\"ethiopic-halehame-aa-et\",\"ethiopic-halehame-am-et\",\"ethiopic-halehame-gez\",\"ethiopic-halehame-om-et\",\"ethiopic-halehame-sid-et\",\"ethiopic-halehame-so-et\",\"ethiopic-halehame-ti-er\",\"ethiopic-halehame-ti-et\",\"ethiopic-halehame-tig\",\"ethiopic-numeric\",\"ew-resize\",\"expanded\",\"extends\",\"extra-condensed\",\"extra-expanded\",\"fantasy\",\"fast\",\"fill\",\"fixed\",\"flat\",\"flex\",\"footnotes\",\"forwards\",\"from\",\"geometricPrecision\",\"georgian\",\"graytext\",\"groove\",\"gujarati\",\"gurmukhi\",\"hand\",\"hangul\",\"hangul-consonant\",\"hebrew\",\"help\",\"hidden\",\"hide\",\"higher\",\"highlight\",\"highlighttext\",\"hiragana\",\"hiragana-iroha\",\"horizontal\",\"hsl\",\"hsla\",\"icon\",\"ignore\",\"inactiveborder\",\"inactivecaption\",\"inactivecaptiontext\",\"infinite\",\"infobackground\",\"infotext\",\"inherit\",\"initial\",\"inline\",\"inline-axis\",\"inline-block\",\"inline-flex\",\"inline-table\",\"inset\",\"inside\",\"intrinsic\",\"invert\",\"italic\",\"japanese-formal\",\"japanese-informal\",\"justify\",\"kannada\",\"katakana\",\"katakana-iroha\",\"keep-all\",\"khmer\",\"korean-hangul-formal\",\"korean-hanja-formal\",\"korean-hanja-informal\",\"landscape\",\"lao\",\"large\",\"larger\",\"left\",\"level\",\"lighter\",\"line-through\",\"linear\",\"linear-gradient\",\"lines\",\"list-item\",\"listbox\",\"listitem\",\"local\",\"logical\",\"loud\",\"lower\",\"lower-alpha\",\"lower-armenian\",\"lower-greek\",\"lower-hexadecimal\",\"lower-latin\",\"lower-norwegian\",\"lower-roman\",\"lowercase\",\"ltr\",\"malayalam\",\"match\",\"matrix\",\"matrix3d\",\"media-controls-background\",\"media-current-time-display\",\"media-fullscreen-button\",\"media-mute-button\",\"media-play-button\",\"media-return-to-realtime-button\",\"media-rewind-button\",\"media-seek-back-button\",\"media-seek-forward-button\",\"media-slider\",\"media-sliderthumb\",\"media-time-remaining-display\",\"media-volume-slider\",\"media-volume-slider-container\",\"media-volume-sliderthumb\",\"medium\",\"menu\",\"menulist\",\"menulist-button\",\"menulist-text\",\"menulist-textfield\",\"menutext\",\"message-box\",\"middle\",\"min-intrinsic\",\"mix\",\"mongolian\",\"monospace\",\"move\",\"multiple\",\"myanmar\",\"n-resize\",\"narrower\",\"ne-resize\",\"nesw-resize\",\"no-close-quote\",\"no-drop\",\"no-open-quote\",\"no-repeat\",\"none\",\"normal\",\"not-allowed\",\"nowrap\",\"ns-resize\",\"numbers\",\"numeric\",\"nw-resize\",\"nwse-resize\",\"oblique\",\"octal\",\"open-quote\",\"optimizeLegibility\",\"optimizeSpeed\",\"oriya\",\"oromo\",\"outset\",\"outside\",\"outside-shape\",\"overlay\",\"overline\",\"padding\",\"padding-box\",\"painted\",\"page\",\"paused\",\"persian\",\"perspective\",\"plus-darker\",\"plus-lighter\",\"pointer\",\"polygon\",\"portrait\",\"pre\",\"pre-line\",\"pre-wrap\",\"preserve-3d\",\"progress\",\"push-button\",\"radial-gradient\",\"radio\",\"read-only\",\"read-write\",\"read-write-plaintext-only\",\"rectangle\",\"region\",\"relative\",\"repeat\",\"repeating-linear-gradient\",\"repeating-radial-gradient\",\"repeat-x\",\"repeat-y\",\"reset\",\"reverse\",\"rgb\",\"rgba\",\"ridge\",\"right\",\"rotate\",\"rotate3d\",\"rotateX\",\"rotateY\",\"rotateZ\",\"round\",\"row-resize\",\"rtl\",\"run-in\",\"running\",\"s-resize\",\"sans-serif\",\"scale\",\"scale3d\",\"scaleX\",\"scaleY\",\"scaleZ\",\"scroll\",\"scrollbar\",\"scroll-position\",\"se-resize\",\"searchfield\",\"searchfield-cancel-button\",\"searchfield-decoration\",\"searchfield-results-button\",\"searchfield-results-decoration\",\"semi-condensed\",\"semi-expanded\",\"separate\",\"serif\",\"show\",\"sidama\",\"simp-chinese-formal\",\"simp-chinese-informal\",\"single\",\"skew\",\"skewX\",\"skewY\",\"skip-white-space\",\"slide\",\"slider-horizontal\",\"slider-vertical\",\"sliderthumb-horizontal\",\"sliderthumb-vertical\",\"slow\",\"small\",\"small-caps\",\"small-caption\",\"smaller\",\"solid\",\"somali\",\"source-atop\",\"source-in\",\"source-out\",\"source-over\",\"space\",\"spell-out\",\"square\",\"square-button\",\"start\",\"static\",\"status-bar\",\"stretch\",\"stroke\",\"sub\",\"subpixel-antialiased\",\"super\",\"sw-resize\",\"symbolic\",\"symbols\",\"table\",\"table-caption\",\"table-cell\",\"table-column\",\"table-column-group\",\"table-footer-group\",\"table-header-group\",\"table-row\",\"table-row-group\",\"tamil\",\"telugu\",\"text\",\"text-bottom\",\"text-top\",\"textarea\",\"textfield\",\"thai\",\"thick\",\"thin\",\"threeddarkshadow\",\"threedface\",\"threedhighlight\",\"threedlightshadow\",\"threedshadow\",\"tibetan\",\"tigre\",\"tigrinya-er\",\"tigrinya-er-abegede\",\"tigrinya-et\",\"tigrinya-et-abegede\",\"to\",\"top\",\"trad-chinese-formal\",\"trad-chinese-informal\",\"translate\",\"translate3d\",\"translateX\",\"translateY\",\"translateZ\",\"transparent\",\"ultra-condensed\",\"ultra-expanded\",\"underline\",\"up\",\"upper-alpha\",\"upper-armenian\",\"upper-greek\",\"upper-hexadecimal\",\"upper-latin\",\"upper-norwegian\",\"upper-roman\",\"uppercase\",\"urdu\",\"url\",\"var\",\"vertical\",\"vertical-text\",\"visible\",\"visibleFill\",\"visiblePainted\",\"visibleStroke\",\"visual\",\"w-resize\",\"wait\",\"wave\",\"wider\",\"window\",\"windowframe\",\"windowtext\",\"words\",\"x-large\",\"x-small\",\"xor\",\"xx-large\",\"xx-small\",\"bicubic\",\"optimizespeed\",\"grayscale\",\"row\",\"row-reverse\",\"wrap\",\"wrap-reverse\",\"column-reverse\",\"flex-start\",\"flex-end\",\"space-between\",\"space-around\", \"unset\"];\n\n  var wordOperatorKeywords_ = [\"in\",\"and\",\"or\",\"not\",\"is not\",\"is a\",\"is\",\"isnt\",\"defined\",\"if unless\"],\n      blockKeywords_ = [\"for\",\"if\",\"else\",\"unless\", \"from\", \"to\"],\n      commonAtoms_ = [\"null\",\"true\",\"false\",\"href\",\"title\",\"type\",\"not-allowed\",\"readonly\",\"disabled\"],\n      commonDef_ = [\"@font-face\", \"@keyframes\", \"@media\", \"@viewport\", \"@page\", \"@host\", \"@supports\", \"@block\", \"@css\"];\n\n  var hintWords = tagKeywords_.concat(documentTypes_,mediaTypes_,mediaFeatures_,\n                                      propertyKeywords_,nonStandardPropertyKeywords_,\n                                      colorKeywords_,valueKeywords_,fontProperties_,\n                                      wordOperatorKeywords_,blockKeywords_,\n                                      commonAtoms_,commonDef_);\n\n  function wordRegexp(words) {\n    words = words.sort(function(a,b){return b > a;});\n    return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n  }\n\n  function keySet(array) {\n    var keys = {};\n    for (var i = 0; i < array.length; ++i) keys[array[i]] = true;\n    return keys;\n  }\n\n  function escapeRegExp(text) {\n    return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n  }\n\n  CodeMirror.registerHelper(\"hintWords\", \"stylus\", hintWords);\n  CodeMirror.defineMIME(\"text/x-styl\", \"stylus\");\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"css\", function(config, parserConfig) {\n  var inline = parserConfig.inline\n  if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode(\"text/css\");\n\n  var indentUnit = config.indentUnit,\n      tokenHooks = parserConfig.tokenHooks,\n      documentTypes = parserConfig.documentTypes || {},\n      mediaTypes = parserConfig.mediaTypes || {},\n      mediaFeatures = parserConfig.mediaFeatures || {},\n      mediaValueKeywords = parserConfig.mediaValueKeywords || {},\n      propertyKeywords = parserConfig.propertyKeywords || {},\n      nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {},\n      fontProperties = parserConfig.fontProperties || {},\n      counterDescriptors = parserConfig.counterDescriptors || {},\n      colorKeywords = parserConfig.colorKeywords || {},\n      valueKeywords = parserConfig.valueKeywords || {},\n      allowNested = parserConfig.allowNested,\n      lineComment = parserConfig.lineComment,\n      supportsAtComponent = parserConfig.supportsAtComponent === true;\n\n  var type, override;\n  function ret(style, tp) { type = tp; return style; }\n\n  // Tokenizers\n\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n    if (tokenHooks[ch]) {\n      var result = tokenHooks[ch](stream, state);\n      if (result !== false) return result;\n    }\n    if (ch == \"@\") {\n      stream.eatWhile(/[\\w\\\\\\-]/);\n      return ret(\"def\", stream.current());\n    } else if (ch == \"=\" || (ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) {\n      return ret(null, \"compare\");\n    } else if (ch == \"\\\"\" || ch == \"'\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    } else if (ch == \"#\") {\n      stream.eatWhile(/[\\w\\\\\\-]/);\n      return ret(\"atom\", \"hash\");\n    } else if (ch == \"!\") {\n      stream.match(/^\\s*\\w*/);\n      return ret(\"keyword\", \"important\");\n    } else if (/\\d/.test(ch) || ch == \".\" && stream.eat(/\\d/)) {\n      stream.eatWhile(/[\\w.%]/);\n      return ret(\"number\", \"unit\");\n    } else if (ch === \"-\") {\n      if (/[\\d.]/.test(stream.peek())) {\n        stream.eatWhile(/[\\w.%]/);\n        return ret(\"number\", \"unit\");\n      } else if (stream.match(/^-[\\w\\\\\\-]*/)) {\n        stream.eatWhile(/[\\w\\\\\\-]/);\n        if (stream.match(/^\\s*:/, false))\n          return ret(\"variable-2\", \"variable-definition\");\n        return ret(\"variable-2\", \"variable\");\n      } else if (stream.match(/^\\w+-/)) {\n        return ret(\"meta\", \"meta\");\n      }\n    } else if (/[,+>*\\/]/.test(ch)) {\n      return ret(null, \"select-op\");\n    } else if (ch == \".\" && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {\n      return ret(\"qualifier\", \"qualifier\");\n    } else if (/[:;{}\\[\\]\\(\\)]/.test(ch)) {\n      return ret(null, ch);\n    } else if (stream.match(/[\\w-.]+(?=\\()/)) {\n      if (/^(url(-prefix)?|domain|regexp)$/.test(stream.current().toLowerCase())) {\n        state.tokenize = tokenParenthesized;\n      }\n      return ret(\"variable callee\", \"variable\");\n    } else if (/[\\w\\\\\\-]/.test(ch)) {\n      stream.eatWhile(/[\\w\\\\\\-]/);\n      return ret(\"property\", \"word\");\n    } else {\n      return ret(null, null);\n    }\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == quote && !escaped) {\n          if (quote == \")\") stream.backUp(1);\n          break;\n        }\n        escaped = !escaped && ch == \"\\\\\";\n      }\n      if (ch == quote || !escaped && quote != \")\") state.tokenize = null;\n      return ret(\"string\", \"string\");\n    };\n  }\n\n  function tokenParenthesized(stream, state) {\n    stream.next(); // Must be '('\n    if (!stream.match(/\\s*[\\\"\\')]/, false))\n      state.tokenize = tokenString(\")\");\n    else\n      state.tokenize = null;\n    return ret(null, \"(\");\n  }\n\n  // Context management\n\n  function Context(type, indent, prev) {\n    this.type = type;\n    this.indent = indent;\n    this.prev = prev;\n  }\n\n  function pushContext(state, stream, type, indent) {\n    state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context);\n    return type;\n  }\n\n  function popContext(state) {\n    if (state.context.prev)\n      state.context = state.context.prev;\n    return state.context.type;\n  }\n\n  function pass(type, stream, state) {\n    return states[state.context.type](type, stream, state);\n  }\n  function popAndPass(type, stream, state, n) {\n    for (var i = n || 1; i > 0; i--)\n      state.context = state.context.prev;\n    return pass(type, stream, state);\n  }\n\n  // Parser\n\n  function wordAsValue(stream) {\n    var word = stream.current().toLowerCase();\n    if (valueKeywords.hasOwnProperty(word))\n      override = \"atom\";\n    else if (colorKeywords.hasOwnProperty(word))\n      override = \"keyword\";\n    else\n      override = \"variable\";\n  }\n\n  var states = {};\n\n  states.top = function(type, stream, state) {\n    if (type == \"{\") {\n      return pushContext(state, stream, \"block\");\n    } else if (type == \"}\" && state.context.prev) {\n      return popContext(state);\n    } else if (supportsAtComponent && /@component/i.test(type)) {\n      return pushContext(state, stream, \"atComponentBlock\");\n    } else if (/^@(-moz-)?document$/i.test(type)) {\n      return pushContext(state, stream, \"documentTypes\");\n    } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) {\n      return pushContext(state, stream, \"atBlock\");\n    } else if (/^@(font-face|counter-style)/i.test(type)) {\n      state.stateArg = type;\n      return \"restricted_atBlock_before\";\n    } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) {\n      return \"keyframes\";\n    } else if (type && type.charAt(0) == \"@\") {\n      return pushContext(state, stream, \"at\");\n    } else if (type == \"hash\") {\n      override = \"builtin\";\n    } else if (type == \"word\") {\n      override = \"tag\";\n    } else if (type == \"variable-definition\") {\n      return \"maybeprop\";\n    } else if (type == \"interpolation\") {\n      return pushContext(state, stream, \"interpolation\");\n    } else if (type == \":\") {\n      return \"pseudo\";\n    } else if (allowNested && type == \"(\") {\n      return pushContext(state, stream, \"parens\");\n    }\n    return state.context.type;\n  };\n\n  states.block = function(type, stream, state) {\n    if (type == \"word\") {\n      var word = stream.current().toLowerCase();\n      if (propertyKeywords.hasOwnProperty(word)) {\n        override = \"property\";\n        return \"maybeprop\";\n      } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) {\n        override = \"string-2\";\n        return \"maybeprop\";\n      } else if (allowNested) {\n        override = stream.match(/^\\s*:(?:\\s|$)/, false) ? \"property\" : \"tag\";\n        return \"block\";\n      } else {\n        override += \" error\";\n        return \"maybeprop\";\n      }\n    } else if (type == \"meta\") {\n      return \"block\";\n    } else if (!allowNested && (type == \"hash\" || type == \"qualifier\")) {\n      override = \"error\";\n      return \"block\";\n    } else {\n      return states.top(type, stream, state);\n    }\n  };\n\n  states.maybeprop = function(type, stream, state) {\n    if (type == \":\") return pushContext(state, stream, \"prop\");\n    return pass(type, stream, state);\n  };\n\n  states.prop = function(type, stream, state) {\n    if (type == \";\") return popContext(state);\n    if (type == \"{\" && allowNested) return pushContext(state, stream, \"propBlock\");\n    if (type == \"}\" || type == \"{\") return popAndPass(type, stream, state);\n    if (type == \"(\") return pushContext(state, stream, \"parens\");\n\n    if (type == \"hash\" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) {\n      override += \" error\";\n    } else if (type == \"word\") {\n      wordAsValue(stream);\n    } else if (type == \"interpolation\") {\n      return pushContext(state, stream, \"interpolation\");\n    }\n    return \"prop\";\n  };\n\n  states.propBlock = function(type, _stream, state) {\n    if (type == \"}\") return popContext(state);\n    if (type == \"word\") { override = \"property\"; return \"maybeprop\"; }\n    return state.context.type;\n  };\n\n  states.parens = function(type, stream, state) {\n    if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n    if (type == \")\") return popContext(state);\n    if (type == \"(\") return pushContext(state, stream, \"parens\");\n    if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n    if (type == \"word\") wordAsValue(stream);\n    return \"parens\";\n  };\n\n  states.pseudo = function(type, stream, state) {\n    if (type == \"meta\") return \"pseudo\";\n\n    if (type == \"word\") {\n      override = \"variable-3\";\n      return state.context.type;\n    }\n    return pass(type, stream, state);\n  };\n\n  states.documentTypes = function(type, stream, state) {\n    if (type == \"word\" && documentTypes.hasOwnProperty(stream.current())) {\n      override = \"tag\";\n      return state.context.type;\n    } else {\n      return states.atBlock(type, stream, state);\n    }\n  };\n\n  states.atBlock = function(type, stream, state) {\n    if (type == \"(\") return pushContext(state, stream, \"atBlock_parens\");\n    if (type == \"}\" || type == \";\") return popAndPass(type, stream, state);\n    if (type == \"{\") return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\");\n\n    if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n\n    if (type == \"word\") {\n      var word = stream.current().toLowerCase();\n      if (word == \"only\" || word == \"not\" || word == \"and\" || word == \"or\")\n        override = \"keyword\";\n      else if (mediaTypes.hasOwnProperty(word))\n        override = \"attribute\";\n      else if (mediaFeatures.hasOwnProperty(word))\n        override = \"property\";\n      else if (mediaValueKeywords.hasOwnProperty(word))\n        override = \"keyword\";\n      else if (propertyKeywords.hasOwnProperty(word))\n        override = \"property\";\n      else if (nonStandardPropertyKeywords.hasOwnProperty(word))\n        override = \"string-2\";\n      else if (valueKeywords.hasOwnProperty(word))\n        override = \"atom\";\n      else if (colorKeywords.hasOwnProperty(word))\n        override = \"keyword\";\n      else\n        override = \"error\";\n    }\n    return state.context.type;\n  };\n\n  states.atComponentBlock = function(type, stream, state) {\n    if (type == \"}\")\n      return popAndPass(type, stream, state);\n    if (type == \"{\")\n      return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\", false);\n    if (type == \"word\")\n      override = \"error\";\n    return state.context.type;\n  };\n\n  states.atBlock_parens = function(type, stream, state) {\n    if (type == \")\") return popContext(state);\n    if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state, 2);\n    return states.atBlock(type, stream, state);\n  };\n\n  states.restricted_atBlock_before = function(type, stream, state) {\n    if (type == \"{\")\n      return pushContext(state, stream, \"restricted_atBlock\");\n    if (type == \"word\" && state.stateArg == \"@counter-style\") {\n      override = \"variable\";\n      return \"restricted_atBlock_before\";\n    }\n    return pass(type, stream, state);\n  };\n\n  states.restricted_atBlock = function(type, stream, state) {\n    if (type == \"}\") {\n      state.stateArg = null;\n      return popContext(state);\n    }\n    if (type == \"word\") {\n      if ((state.stateArg == \"@font-face\" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) ||\n          (state.stateArg == \"@counter-style\" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))\n        override = \"error\";\n      else\n        override = \"property\";\n      return \"maybeprop\";\n    }\n    return \"restricted_atBlock\";\n  };\n\n  states.keyframes = function(type, stream, state) {\n    if (type == \"word\") { override = \"variable\"; return \"keyframes\"; }\n    if (type == \"{\") return pushContext(state, stream, \"top\");\n    return pass(type, stream, state);\n  };\n\n  states.at = function(type, stream, state) {\n    if (type == \";\") return popContext(state);\n    if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n    if (type == \"word\") override = \"tag\";\n    else if (type == \"hash\") override = \"builtin\";\n    return \"at\";\n  };\n\n  states.interpolation = function(type, stream, state) {\n    if (type == \"}\") return popContext(state);\n    if (type == \"{\" || type == \";\") return popAndPass(type, stream, state);\n    if (type == \"word\") override = \"variable\";\n    else if (type != \"variable\" && type != \"(\" && type != \")\") override = \"error\";\n    return \"interpolation\";\n  };\n\n  return {\n    startState: function(base) {\n      return {tokenize: null,\n              state: inline ? \"block\" : \"top\",\n              stateArg: null,\n              context: new Context(inline ? \"block\" : \"top\", base || 0, null)};\n    },\n\n    token: function(stream, state) {\n      if (!state.tokenize && stream.eatSpace()) return null;\n      var style = (state.tokenize || tokenBase)(stream, state);\n      if (style && typeof style == \"object\") {\n        type = style[1];\n        style = style[0];\n      }\n      override = style;\n      if (type != \"comment\")\n        state.state = states[state.state](type, stream, state);\n      return override;\n    },\n\n    indent: function(state, textAfter) {\n      var cx = state.context, ch = textAfter && textAfter.charAt(0);\n      var indent = cx.indent;\n      if (cx.type == \"prop\" && (ch == \"}\" || ch == \")\")) cx = cx.prev;\n      if (cx.prev) {\n        if (ch == \"}\" && (cx.type == \"block\" || cx.type == \"top\" ||\n                          cx.type == \"interpolation\" || cx.type == \"restricted_atBlock\")) {\n          // Resume indentation from parent context.\n          cx = cx.prev;\n          indent = cx.indent;\n        } else if (ch == \")\" && (cx.type == \"parens\" || cx.type == \"atBlock_parens\") ||\n            ch == \"{\" && (cx.type == \"at\" || cx.type == \"atBlock\")) {\n          // Dedent relative to current context.\n          indent = Math.max(0, cx.indent - indentUnit);\n        }\n      }\n      return indent;\n    },\n\n    electricChars: \"}\",\n    blockCommentStart: \"/*\",\n    blockCommentEnd: \"*/\",\n    blockCommentContinue: \" * \",\n    lineComment: lineComment,\n    fold: \"brace\"\n  };\n});\n\n  function keySet(array) {\n    var keys = {};\n    for (var i = 0; i < array.length; ++i) {\n      keys[array[i].toLowerCase()] = true;\n    }\n    return keys;\n  }\n\n  var documentTypes_ = [\n    \"domain\", \"regexp\", \"url\", \"url-prefix\"\n  ], documentTypes = keySet(documentTypes_);\n\n  var mediaTypes_ = [\n    \"all\", \"aural\", \"braille\", \"handheld\", \"print\", \"projection\", \"screen\",\n    \"tty\", \"tv\", \"embossed\"\n  ], mediaTypes = keySet(mediaTypes_);\n\n  var mediaFeatures_ = [\n    \"width\", \"min-width\", \"max-width\", \"height\", \"min-height\", \"max-height\",\n    \"device-width\", \"min-device-width\", \"max-device-width\", \"device-height\",\n    \"min-device-height\", \"max-device-height\", \"aspect-ratio\",\n    \"min-aspect-ratio\", \"max-aspect-ratio\", \"device-aspect-ratio\",\n    \"min-device-aspect-ratio\", \"max-device-aspect-ratio\", \"color\", \"min-color\",\n    \"max-color\", \"color-index\", \"min-color-index\", \"max-color-index\",\n    \"monochrome\", \"min-monochrome\", \"max-monochrome\", \"resolution\",\n    \"min-resolution\", \"max-resolution\", \"scan\", \"grid\", \"orientation\",\n    \"device-pixel-ratio\", \"min-device-pixel-ratio\", \"max-device-pixel-ratio\",\n    \"pointer\", \"any-pointer\", \"hover\", \"any-hover\"\n  ], mediaFeatures = keySet(mediaFeatures_);\n\n  var mediaValueKeywords_ = [\n    \"landscape\", \"portrait\", \"none\", \"coarse\", \"fine\", \"on-demand\", \"hover\",\n    \"interlace\", \"progressive\"\n  ], mediaValueKeywords = keySet(mediaValueKeywords_);\n\n  var propertyKeywords_ = [\n    \"align-content\", \"align-items\", \"align-self\", \"alignment-adjust\",\n    \"alignment-baseline\", \"anchor-point\", \"animation\", \"animation-delay\",\n    \"animation-direction\", \"animation-duration\", \"animation-fill-mode\",\n    \"animation-iteration-count\", \"animation-name\", \"animation-play-state\",\n    \"animation-timing-function\", \"appearance\", \"azimuth\", \"backface-visibility\",\n    \"background\", \"background-attachment\", \"background-blend-mode\", \"background-clip\",\n    \"background-color\", \"background-image\", \"background-origin\", \"background-position\",\n    \"background-repeat\", \"background-size\", \"baseline-shift\", \"binding\",\n    \"bleed\", \"bookmark-label\", \"bookmark-level\", \"bookmark-state\",\n    \"bookmark-target\", \"border\", \"border-bottom\", \"border-bottom-color\",\n    \"border-bottom-left-radius\", \"border-bottom-right-radius\",\n    \"border-bottom-style\", \"border-bottom-width\", \"border-collapse\",\n    \"border-color\", \"border-image\", \"border-image-outset\",\n    \"border-image-repeat\", \"border-image-slice\", \"border-image-source\",\n    \"border-image-width\", \"border-left\", \"border-left-color\",\n    \"border-left-style\", \"border-left-width\", \"border-radius\", \"border-right\",\n    \"border-right-color\", \"border-right-style\", \"border-right-width\",\n    \"border-spacing\", \"border-style\", \"border-top\", \"border-top-color\",\n    \"border-top-left-radius\", \"border-top-right-radius\", \"border-top-style\",\n    \"border-top-width\", \"border-width\", \"bottom\", \"box-decoration-break\",\n    \"box-shadow\", \"box-sizing\", \"break-after\", \"break-before\", \"break-inside\",\n    \"caption-side\", \"caret-color\", \"clear\", \"clip\", \"color\", \"color-profile\", \"column-count\",\n    \"column-fill\", \"column-gap\", \"column-rule\", \"column-rule-color\",\n    \"column-rule-style\", \"column-rule-width\", \"column-span\", \"column-width\",\n    \"columns\", \"content\", \"counter-increment\", \"counter-reset\", \"crop\", \"cue\",\n    \"cue-after\", \"cue-before\", \"cursor\", \"direction\", \"display\",\n    \"dominant-baseline\", \"drop-initial-after-adjust\",\n    \"drop-initial-after-align\", \"drop-initial-before-adjust\",\n    \"drop-initial-before-align\", \"drop-initial-size\", \"drop-initial-value\",\n    \"elevation\", \"empty-cells\", \"fit\", \"fit-position\", \"flex\", \"flex-basis\",\n    \"flex-direction\", \"flex-flow\", \"flex-grow\", \"flex-shrink\", \"flex-wrap\",\n    \"float\", \"float-offset\", \"flow-from\", \"flow-into\", \"font\", \"font-feature-settings\",\n    \"font-family\", \"font-kerning\", \"font-language-override\", \"font-size\", \"font-size-adjust\",\n    \"font-stretch\", \"font-style\", \"font-synthesis\", \"font-variant\",\n    \"font-variant-alternates\", \"font-variant-caps\", \"font-variant-east-asian\",\n    \"font-variant-ligatures\", \"font-variant-numeric\", \"font-variant-position\",\n    \"font-weight\", \"grid\", \"grid-area\", \"grid-auto-columns\", \"grid-auto-flow\",\n    \"grid-auto-rows\", \"grid-column\", \"grid-column-end\", \"grid-column-gap\",\n    \"grid-column-start\", \"grid-gap\", \"grid-row\", \"grid-row-end\", \"grid-row-gap\",\n    \"grid-row-start\", \"grid-template\", \"grid-template-areas\", \"grid-template-columns\",\n    \"grid-template-rows\", \"hanging-punctuation\", \"height\", \"hyphens\",\n    \"icon\", \"image-orientation\", \"image-rendering\", \"image-resolution\",\n    \"inline-box-align\", \"justify-content\", \"justify-items\", \"justify-self\", \"left\", \"letter-spacing\",\n    \"line-break\", \"line-height\", \"line-stacking\", \"line-stacking-ruby\",\n    \"line-stacking-shift\", \"line-stacking-strategy\", \"list-style\",\n    \"list-style-image\", \"list-style-position\", \"list-style-type\", \"margin\",\n    \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\",\n    \"marks\", \"marquee-direction\", \"marquee-loop\",\n    \"marquee-play-count\", \"marquee-speed\", \"marquee-style\", \"max-height\",\n    \"max-width\", \"min-height\", \"min-width\", \"mix-blend-mode\", \"move-to\", \"nav-down\", \"nav-index\",\n    \"nav-left\", \"nav-right\", \"nav-up\", \"object-fit\", \"object-position\",\n    \"opacity\", \"order\", \"orphans\", \"outline\",\n    \"outline-color\", \"outline-offset\", \"outline-style\", \"outline-width\",\n    \"overflow\", \"overflow-style\", \"overflow-wrap\", \"overflow-x\", \"overflow-y\",\n    \"padding\", \"padding-bottom\", \"padding-left\", \"padding-right\", \"padding-top\",\n    \"page\", \"page-break-after\", \"page-break-before\", \"page-break-inside\",\n    \"page-policy\", \"pause\", \"pause-after\", \"pause-before\", \"perspective\",\n    \"perspective-origin\", \"pitch\", \"pitch-range\", \"place-content\", \"place-items\", \"place-self\", \"play-during\", \"position\",\n    \"presentation-level\", \"punctuation-trim\", \"quotes\", \"region-break-after\",\n    \"region-break-before\", \"region-break-inside\", \"region-fragment\",\n    \"rendering-intent\", \"resize\", \"rest\", \"rest-after\", \"rest-before\", \"richness\",\n    \"right\", \"rotation\", \"rotation-point\", \"ruby-align\", \"ruby-overhang\",\n    \"ruby-position\", \"ruby-span\", \"shape-image-threshold\", \"shape-inside\", \"shape-margin\",\n    \"shape-outside\", \"size\", \"speak\", \"speak-as\", \"speak-header\",\n    \"speak-numeral\", \"speak-punctuation\", \"speech-rate\", \"stress\", \"string-set\",\n    \"tab-size\", \"table-layout\", \"target\", \"target-name\", \"target-new\",\n    \"target-position\", \"text-align\", \"text-align-last\", \"text-decoration\",\n    \"text-decoration-color\", \"text-decoration-line\", \"text-decoration-skip\",\n    \"text-decoration-style\", \"text-emphasis\", \"text-emphasis-color\",\n    \"text-emphasis-position\", \"text-emphasis-style\", \"text-height\",\n    \"text-indent\", \"text-justify\", \"text-outline\", \"text-overflow\", \"text-shadow\",\n    \"text-size-adjust\", \"text-space-collapse\", \"text-transform\", \"text-underline-position\",\n    \"text-wrap\", \"top\", \"transform\", \"transform-origin\", \"transform-style\",\n    \"transition\", \"transition-delay\", \"transition-duration\",\n    \"transition-property\", \"transition-timing-function\", \"unicode-bidi\",\n    \"user-select\", \"vertical-align\", \"visibility\", \"voice-balance\", \"voice-duration\",\n    \"voice-family\", \"voice-pitch\", \"voice-range\", \"voice-rate\", \"voice-stress\",\n    \"voice-volume\", \"volume\", \"white-space\", \"widows\", \"width\", \"will-change\", \"word-break\",\n    \"word-spacing\", \"word-wrap\", \"z-index\",\n    // SVG-specific\n    \"clip-path\", \"clip-rule\", \"mask\", \"enable-background\", \"filter\", \"flood-color\",\n    \"flood-opacity\", \"lighting-color\", \"stop-color\", \"stop-opacity\", \"pointer-events\",\n    \"color-interpolation\", \"color-interpolation-filters\",\n    \"color-rendering\", \"fill\", \"fill-opacity\", \"fill-rule\", \"image-rendering\",\n    \"marker\", \"marker-end\", \"marker-mid\", \"marker-start\", \"shape-rendering\", \"stroke\",\n    \"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-linecap\", \"stroke-linejoin\",\n    \"stroke-miterlimit\", \"stroke-opacity\", \"stroke-width\", \"text-rendering\",\n    \"baseline-shift\", \"dominant-baseline\", \"glyph-orientation-horizontal\",\n    \"glyph-orientation-vertical\", \"text-anchor\", \"writing-mode\"\n  ], propertyKeywords = keySet(propertyKeywords_);\n\n  var nonStandardPropertyKeywords_ = [\n    \"scrollbar-arrow-color\", \"scrollbar-base-color\", \"scrollbar-dark-shadow-color\",\n    \"scrollbar-face-color\", \"scrollbar-highlight-color\", \"scrollbar-shadow-color\",\n    \"scrollbar-3d-light-color\", \"scrollbar-track-color\", \"shape-inside\",\n    \"searchfield-cancel-button\", \"searchfield-decoration\", \"searchfield-results-button\",\n    \"searchfield-results-decoration\", \"zoom\"\n  ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);\n\n  var fontProperties_ = [\n    \"font-family\", \"src\", \"unicode-range\", \"font-variant\", \"font-feature-settings\",\n    \"font-stretch\", \"font-weight\", \"font-style\"\n  ], fontProperties = keySet(fontProperties_);\n\n  var counterDescriptors_ = [\n    \"additive-symbols\", \"fallback\", \"negative\", \"pad\", \"prefix\", \"range\",\n    \"speak-as\", \"suffix\", \"symbols\", \"system\"\n  ], counterDescriptors = keySet(counterDescriptors_);\n\n  var colorKeywords_ = [\n    \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n    \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n    \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n    \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n    \"darkgray\", \"darkgreen\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n    \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n    \"darkslateblue\", \"darkslategray\", \"darkturquoise\", \"darkviolet\",\n    \"deeppink\", \"deepskyblue\", \"dimgray\", \"dodgerblue\", \"firebrick\",\n    \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n    \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n    \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n    \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n    \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightpink\",\n    \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\",\n    \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n    \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n    \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n    \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n    \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n    \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n    \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n    \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n    \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n    \"slateblue\", \"slategray\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n    \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n    \"whitesmoke\", \"yellow\", \"yellowgreen\"\n  ], colorKeywords = keySet(colorKeywords_);\n\n  var valueKeywords_ = [\n    \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"afar\",\n    \"after-white-space\", \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\",\n    \"always\", \"amharic\", \"amharic-abegede\", \"antialiased\", \"appworkspace\",\n    \"arabic-indic\", \"armenian\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\", \"avoid-page\",\n    \"avoid-region\", \"background\", \"backwards\", \"baseline\", \"below\", \"bidi-override\", \"binary\",\n    \"bengali\", \"blink\", \"block\", \"block-axis\", \"bold\", \"bolder\", \"border\", \"border-box\",\n    \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"bullets\", \"button\", \"button-bevel\",\n    \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"cambodian\",\n    \"capitalize\", \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\",\n    \"cell\", \"center\", \"checkbox\", \"circle\", \"cjk-decimal\", \"cjk-earthly-branch\",\n    \"cjk-heavenly-stem\", \"cjk-ideographic\", \"clear\", \"clip\", \"close-quote\",\n    \"col-resize\", \"collapse\", \"color\", \"color-burn\", \"color-dodge\", \"column\", \"column-reverse\",\n    \"compact\", \"condensed\", \"contain\", \"content\", \"contents\",\n    \"content-box\", \"context-menu\", \"continuous\", \"copy\", \"counter\", \"counters\", \"cover\", \"crop\",\n    \"cross\", \"crosshair\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n    \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\",\n    \"destination-in\", \"destination-out\", \"destination-over\", \"devanagari\", \"difference\",\n    \"disc\", \"discard\", \"disclosure-closed\", \"disclosure-open\", \"document\",\n    \"dot-dash\", \"dot-dot-dash\",\n    \"dotted\", \"double\", \"down\", \"e-resize\", \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\",\n    \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\", \"ethiopic\", \"ethiopic-abegede\",\n    \"ethiopic-abegede-am-et\", \"ethiopic-abegede-gez\", \"ethiopic-abegede-ti-er\",\n    \"ethiopic-abegede-ti-et\", \"ethiopic-halehame-aa-er\",\n    \"ethiopic-halehame-aa-et\", \"ethiopic-halehame-am-et\",\n    \"ethiopic-halehame-gez\", \"ethiopic-halehame-om-et\",\n    \"ethiopic-halehame-sid-et\", \"ethiopic-halehame-so-et\",\n    \"ethiopic-halehame-ti-er\", \"ethiopic-halehame-ti-et\", \"ethiopic-halehame-tig\",\n    \"ethiopic-numeric\", \"ew-resize\", \"exclusion\", \"expanded\", \"extends\", \"extra-condensed\",\n    \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\",\n    \"forwards\", \"from\", \"geometricPrecision\", \"georgian\", \"graytext\", \"grid\", \"groove\",\n    \"gujarati\", \"gurmukhi\", \"hand\", \"hangul\", \"hangul-consonant\", \"hard-light\", \"hebrew\",\n    \"help\", \"hidden\", \"hide\", \"higher\", \"highlight\", \"highlighttext\",\n    \"hiragana\", \"hiragana-iroha\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"icon\", \"ignore\",\n    \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\",\n    \"infobackground\", \"infotext\", \"inherit\", \"initial\", \"inline\", \"inline-axis\",\n    \"inline-block\", \"inline-flex\", \"inline-grid\", \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\",\n    \"italic\", \"japanese-formal\", \"japanese-informal\", \"justify\", \"kannada\",\n    \"katakana\", \"katakana-iroha\", \"keep-all\", \"khmer\",\n    \"korean-hangul-formal\", \"korean-hanja-formal\", \"korean-hanja-informal\",\n    \"landscape\", \"lao\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\",\n    \"line-through\", \"linear\", \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\",\n    \"local\", \"logical\", \"loud\", \"lower\", \"lower-alpha\", \"lower-armenian\",\n    \"lower-greek\", \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\",\n    \"lower-roman\", \"lowercase\", \"ltr\", \"luminosity\", \"malayalam\", \"match\", \"matrix\", \"matrix3d\",\n    \"media-controls-background\", \"media-current-time-display\",\n    \"media-fullscreen-button\", \"media-mute-button\", \"media-play-button\",\n    \"media-return-to-realtime-button\", \"media-rewind-button\",\n    \"media-seek-back-button\", \"media-seek-forward-button\", \"media-slider\",\n    \"media-sliderthumb\", \"media-time-remaining-display\", \"media-volume-slider\",\n    \"media-volume-slider-container\", \"media-volume-sliderthumb\", \"medium\",\n    \"menu\", \"menulist\", \"menulist-button\", \"menulist-text\",\n    \"menulist-textfield\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n    \"mix\", \"mongolian\", \"monospace\", \"move\", \"multiple\", \"multiply\", \"myanmar\", \"n-resize\",\n    \"narrower\", \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\",\n    \"no-open-quote\", \"no-repeat\", \"none\", \"normal\", \"not-allowed\", \"nowrap\",\n    \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\", \"oblique\", \"octal\", \"opacity\", \"open-quote\",\n    \"optimizeLegibility\", \"optimizeSpeed\", \"oriya\", \"oromo\", \"outset\",\n    \"outside\", \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\",\n    \"painted\", \"page\", \"paused\", \"persian\", \"perspective\", \"plus-darker\", \"plus-lighter\",\n    \"pointer\", \"polygon\", \"portrait\", \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\",\n    \"progress\", \"push-button\", \"radial-gradient\", \"radio\", \"read-only\",\n    \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\",\n    \"relative\", \"repeat\", \"repeating-linear-gradient\",\n    \"repeating-radial-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n    \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\",\n    \"rotateZ\", \"round\", \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\",\n    \"s-resize\", \"sans-serif\", \"saturation\", \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\",\n    \"scroll\", \"scrollbar\", \"scroll-position\", \"se-resize\", \"searchfield\",\n    \"searchfield-cancel-button\", \"searchfield-decoration\",\n    \"searchfield-results-button\", \"searchfield-results-decoration\", \"self-start\", \"self-end\",\n    \"semi-condensed\", \"semi-expanded\", \"separate\", \"serif\", \"show\", \"sidama\",\n    \"simp-chinese-formal\", \"simp-chinese-informal\", \"single\",\n    \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n    \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\",\n    \"small\", \"small-caps\", \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"somali\",\n    \"source-atop\", \"source-in\", \"source-out\", \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\",\n    \"square-button\", \"start\", \"static\", \"status-bar\", \"stretch\", \"stroke\", \"sub\",\n    \"subpixel-antialiased\", \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\",\n    \"table-caption\", \"table-cell\", \"table-column\", \"table-column-group\",\n    \"table-footer-group\", \"table-header-group\", \"table-row\", \"table-row-group\",\n    \"tamil\",\n    \"telugu\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thai\",\n    \"thick\", \"thin\", \"threeddarkshadow\", \"threedface\", \"threedhighlight\",\n    \"threedlightshadow\", \"threedshadow\", \"tibetan\", \"tigre\", \"tigrinya-er\",\n    \"tigrinya-er-abegede\", \"tigrinya-et\", \"tigrinya-et-abegede\", \"to\", \"top\",\n    \"trad-chinese-formal\", \"trad-chinese-informal\", \"transform\",\n    \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\",\n    \"transparent\", \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unset\", \"up\",\n    \"upper-alpha\", \"upper-armenian\", \"upper-greek\", \"upper-hexadecimal\",\n    \"upper-latin\", \"upper-norwegian\", \"upper-roman\", \"uppercase\", \"urdu\", \"url\",\n    \"var\", \"vertical\", \"vertical-text\", \"visible\", \"visibleFill\", \"visiblePainted\",\n    \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\",\n    \"window\", \"windowframe\", \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\",\n    \"xx-large\", \"xx-small\"\n  ], valueKeywords = keySet(valueKeywords_);\n\n  var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_)\n    .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_)\n    .concat(valueKeywords_);\n  CodeMirror.registerHelper(\"hintWords\", \"css\", allWords);\n\n  function tokenCComment(stream, state) {\n    var maybeEnd = false, ch;\n    while ((ch = stream.next()) != null) {\n      if (maybeEnd && ch == \"/\") {\n        state.tokenize = null;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return [\"comment\", \"comment\"];\n  }\n\n  CodeMirror.defineMIME(\"text/css\", {\n    documentTypes: documentTypes,\n    mediaTypes: mediaTypes,\n    mediaFeatures: mediaFeatures,\n    mediaValueKeywords: mediaValueKeywords,\n    propertyKeywords: propertyKeywords,\n    nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n    fontProperties: fontProperties,\n    counterDescriptors: counterDescriptors,\n    colorKeywords: colorKeywords,\n    valueKeywords: valueKeywords,\n    tokenHooks: {\n      \"/\": function(stream, state) {\n        if (!stream.eat(\"*\")) return false;\n        state.tokenize = tokenCComment;\n        return tokenCComment(stream, state);\n      }\n    },\n    name: \"css\"\n  });\n\n  CodeMirror.defineMIME(\"text/x-scss\", {\n    mediaTypes: mediaTypes,\n    mediaFeatures: mediaFeatures,\n    mediaValueKeywords: mediaValueKeywords,\n    propertyKeywords: propertyKeywords,\n    nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n    colorKeywords: colorKeywords,\n    valueKeywords: valueKeywords,\n    fontProperties: fontProperties,\n    allowNested: true,\n    lineComment: \"//\",\n    tokenHooks: {\n      \"/\": function(stream, state) {\n        if (stream.eat(\"/\")) {\n          stream.skipToEnd();\n          return [\"comment\", \"comment\"];\n        } else if (stream.eat(\"*\")) {\n          state.tokenize = tokenCComment;\n          return tokenCComment(stream, state);\n        } else {\n          return [\"operator\", \"operator\"];\n        }\n      },\n      \":\": function(stream) {\n        if (stream.match(/\\s*\\{/, false))\n          return [null, null]\n        return false;\n      },\n      \"$\": function(stream) {\n        stream.match(/^[\\w-]+/);\n        if (stream.match(/^\\s*:/, false))\n          return [\"variable-2\", \"variable-definition\"];\n        return [\"variable-2\", \"variable\"];\n      },\n      \"#\": function(stream) {\n        if (!stream.eat(\"{\")) return false;\n        return [null, \"interpolation\"];\n      }\n    },\n    name: \"css\",\n    helperType: \"scss\"\n  });\n\n  CodeMirror.defineMIME(\"text/x-less\", {\n    mediaTypes: mediaTypes,\n    mediaFeatures: mediaFeatures,\n    mediaValueKeywords: mediaValueKeywords,\n    propertyKeywords: propertyKeywords,\n    nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n    colorKeywords: colorKeywords,\n    valueKeywords: valueKeywords,\n    fontProperties: fontProperties,\n    allowNested: true,\n    lineComment: \"//\",\n    tokenHooks: {\n      \"/\": function(stream, state) {\n        if (stream.eat(\"/\")) {\n          stream.skipToEnd();\n          return [\"comment\", \"comment\"];\n        } else if (stream.eat(\"*\")) {\n          state.tokenize = tokenCComment;\n          return tokenCComment(stream, state);\n        } else {\n          return [\"operator\", \"operator\"];\n        }\n      },\n      \"@\": function(stream) {\n        if (stream.eat(\"{\")) return [null, \"interpolation\"];\n        if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\\b/i, false)) return false;\n        stream.eatWhile(/[\\w\\\\\\-]/);\n        if (stream.match(/^\\s*:/, false))\n          return [\"variable-2\", \"variable-definition\"];\n        return [\"variable-2\", \"variable\"];\n      },\n      \"&\": function() {\n        return [\"atom\", \"atom\"];\n      }\n    },\n    name: \"css\",\n    helperType: \"less\"\n  });\n\n  CodeMirror.defineMIME(\"text/x-gss\", {\n    documentTypes: documentTypes,\n    mediaTypes: mediaTypes,\n    mediaFeatures: mediaFeatures,\n    propertyKeywords: propertyKeywords,\n    nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n    fontProperties: fontProperties,\n    counterDescriptors: counterDescriptors,\n    colorKeywords: colorKeywords,\n    valueKeywords: valueKeywords,\n    supportsAtComponent: true,\n    tokenHooks: {\n      \"/\": function(stream, state) {\n        if (!stream.eat(\"*\")) return false;\n        state.tokenize = tokenCComment;\n        return tokenCComment(stream, state);\n      }\n    },\n    name: \"css\",\n    helperType: \"gss\"\n  });\n\n});\n","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./input.vue?vue&type=style&index=0&id=657450cc&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./input.vue?vue&type=style&index=0&id=657450cc&lang=scss&scoped=true&\"","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Because sometimes you need to mark the selected *text*.\n//\n// Adds an option 'styleSelectedText' which, when enabled, gives\n// selected text the CSS class given as option value, or\n// \"CodeMirror-selectedtext\" when the value is not a string.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineOption(\"styleSelectedText\", false, function(cm, val, old) {\n    var prev = old && old != CodeMirror.Init;\n    if (val && !prev) {\n      cm.state.markedSelection = [];\n      cm.state.markedSelectionStyle = typeof val == \"string\" ? val : \"CodeMirror-selectedtext\";\n      reset(cm);\n      cm.on(\"cursorActivity\", onCursorActivity);\n      cm.on(\"change\", onChange);\n    } else if (!val && prev) {\n      cm.off(\"cursorActivity\", onCursorActivity);\n      cm.off(\"change\", onChange);\n      clear(cm);\n      cm.state.markedSelection = cm.state.markedSelectionStyle = null;\n    }\n  });\n\n  function onCursorActivity(cm) {\n    if (cm.state.markedSelection)\n      cm.operation(function() { update(cm); });\n  }\n\n  function onChange(cm) {\n    if (cm.state.markedSelection && cm.state.markedSelection.length)\n      cm.operation(function() { clear(cm); });\n  }\n\n  var CHUNK_SIZE = 8;\n  var Pos = CodeMirror.Pos;\n  var cmp = CodeMirror.cmpPos;\n\n  function coverRange(cm, from, to, addAt) {\n    if (cmp(from, to) == 0) return;\n    var array = cm.state.markedSelection;\n    var cls = cm.state.markedSelectionStyle;\n    for (var line = from.line;;) {\n      var start = line == from.line ? from : Pos(line, 0);\n      var endLine = line + CHUNK_SIZE, atEnd = endLine >= to.line;\n      var end = atEnd ? to : Pos(endLine, 0);\n      var mark = cm.markText(start, end, {className: cls});\n      if (addAt == null) array.push(mark);\n      else array.splice(addAt++, 0, mark);\n      if (atEnd) break;\n      line = endLine;\n    }\n  }\n\n  function clear(cm) {\n    var array = cm.state.markedSelection;\n    for (var i = 0; i < array.length; ++i) array[i].clear();\n    array.length = 0;\n  }\n\n  function reset(cm) {\n    clear(cm);\n    var ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++)\n      coverRange(cm, ranges[i].from(), ranges[i].to());\n  }\n\n  function update(cm) {\n    if (!cm.somethingSelected()) return clear(cm);\n    if (cm.listSelections().length > 1) return reset(cm);\n\n    var from = cm.getCursor(\"start\"), to = cm.getCursor(\"end\");\n\n    var array = cm.state.markedSelection;\n    if (!array.length) return coverRange(cm, from, to);\n\n    var coverStart = array[0].find(), coverEnd = array[array.length - 1].find();\n    if (!coverStart || !coverEnd || to.line - from.line <= CHUNK_SIZE ||\n        cmp(from, coverEnd.to) >= 0 || cmp(to, coverStart.from) <= 0)\n      return reset(cm);\n\n    while (cmp(from, coverStart.from) > 0) {\n      array.shift().clear();\n      coverStart = array[0].find();\n    }\n    if (cmp(from, coverStart.from) < 0) {\n      if (coverStart.to.line - from.line < CHUNK_SIZE) {\n        array.shift().clear();\n        coverRange(cm, from, coverStart.to, 0);\n      } else {\n        coverRange(cm, from, coverStart.from, 0);\n      }\n    }\n\n    while (cmp(to, coverEnd.to) < 0) {\n      array.pop().clear();\n      coverEnd = array[array.length - 1].find();\n    }\n    if (cmp(to, coverEnd.to) > 0) {\n      if (to.line - coverEnd.from.line < CHUNK_SIZE) {\n        array.pop().clear();\n        coverRange(cm, coverEnd.from, to);\n      } else {\n        coverRange(cm, coverEnd.to, to);\n      }\n    }\n  }\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// A rough approximation of Sublime Text's keybindings\n// Depends on addon/search/searchcursor.js and optionally addon/dialog/dialogs.js\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../lib/codemirror\"), require(\"../addon/search/searchcursor\"), require(\"../addon/edit/matchbrackets\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../lib/codemirror\", \"../addon/search/searchcursor\", \"../addon/edit/matchbrackets\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var cmds = CodeMirror.commands;\n  var Pos = CodeMirror.Pos;\n\n  // This is not exactly Sublime's algorithm. I couldn't make heads or tails of that.\n  function findPosSubword(doc, start, dir) {\n    if (dir < 0 && start.ch == 0) return doc.clipPos(Pos(start.line - 1));\n    var line = doc.getLine(start.line);\n    if (dir > 0 && start.ch >= line.length) return doc.clipPos(Pos(start.line + 1, 0));\n    var state = \"start\", type, startPos = start.ch;\n    for (var pos = startPos, e = dir < 0 ? 0 : line.length, i = 0; pos != e; pos += dir, i++) {\n      var next = line.charAt(dir < 0 ? pos - 1 : pos);\n      var cat = next != \"_\" && CodeMirror.isWordChar(next) ? \"w\" : \"o\";\n      if (cat == \"w\" && next.toUpperCase() == next) cat = \"W\";\n      if (state == \"start\") {\n        if (cat != \"o\") { state = \"in\"; type = cat; }\n        else startPos = pos + dir\n      } else if (state == \"in\") {\n        if (type != cat) {\n          if (type == \"w\" && cat == \"W\" && dir < 0) pos--;\n          if (type == \"W\" && cat == \"w\" && dir > 0) { // From uppercase to lowercase\n            if (pos == startPos + 1) { type = \"w\"; continue; }\n            else pos--;\n          }\n          break;\n        }\n      }\n    }\n    return Pos(start.line, pos);\n  }\n\n  function moveSubword(cm, dir) {\n    cm.extendSelectionsBy(function(range) {\n      if (cm.display.shift || cm.doc.extend || range.empty())\n        return findPosSubword(cm.doc, range.head, dir);\n      else\n        return dir < 0 ? range.from() : range.to();\n    });\n  }\n\n  cmds.goSubwordLeft = function(cm) { moveSubword(cm, -1); };\n  cmds.goSubwordRight = function(cm) { moveSubword(cm, 1); };\n\n  cmds.scrollLineUp = function(cm) {\n    var info = cm.getScrollInfo();\n    if (!cm.somethingSelected()) {\n      var visibleBottomLine = cm.lineAtHeight(info.top + info.clientHeight, \"local\");\n      if (cm.getCursor().line >= visibleBottomLine)\n        cm.execCommand(\"goLineUp\");\n    }\n    cm.scrollTo(null, info.top - cm.defaultTextHeight());\n  };\n  cmds.scrollLineDown = function(cm) {\n    var info = cm.getScrollInfo();\n    if (!cm.somethingSelected()) {\n      var visibleTopLine = cm.lineAtHeight(info.top, \"local\")+1;\n      if (cm.getCursor().line <= visibleTopLine)\n        cm.execCommand(\"goLineDown\");\n    }\n    cm.scrollTo(null, info.top + cm.defaultTextHeight());\n  };\n\n  cmds.splitSelectionByLine = function(cm) {\n    var ranges = cm.listSelections(), lineRanges = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var from = ranges[i].from(), to = ranges[i].to();\n      for (var line = from.line; line <= to.line; ++line)\n        if (!(to.line > from.line && line == to.line && to.ch == 0))\n          lineRanges.push({anchor: line == from.line ? from : Pos(line, 0),\n                           head: line == to.line ? to : Pos(line)});\n    }\n    cm.setSelections(lineRanges, 0);\n  };\n\n  cmds.singleSelectionTop = function(cm) {\n    var range = cm.listSelections()[0];\n    cm.setSelection(range.anchor, range.head, {scroll: false});\n  };\n\n  cmds.selectLine = function(cm) {\n    var ranges = cm.listSelections(), extended = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i];\n      extended.push({anchor: Pos(range.from().line, 0),\n                     head: Pos(range.to().line + 1, 0)});\n    }\n    cm.setSelections(extended);\n  };\n\n  function insertLine(cm, above) {\n    if (cm.isReadOnly()) return CodeMirror.Pass\n    cm.operation(function() {\n      var len = cm.listSelections().length, newSelection = [], last = -1;\n      for (var i = 0; i < len; i++) {\n        var head = cm.listSelections()[i].head;\n        if (head.line <= last) continue;\n        var at = Pos(head.line + (above ? 0 : 1), 0);\n        cm.replaceRange(\"\\n\", at, null, \"+insertLine\");\n        cm.indentLine(at.line, null, true);\n        newSelection.push({head: at, anchor: at});\n        last = head.line + 1;\n      }\n      cm.setSelections(newSelection);\n    });\n    cm.execCommand(\"indentAuto\");\n  }\n\n  cmds.insertLineAfter = function(cm) { return insertLine(cm, false); };\n\n  cmds.insertLineBefore = function(cm) { return insertLine(cm, true); };\n\n  function wordAt(cm, pos) {\n    var start = pos.ch, end = start, line = cm.getLine(pos.line);\n    while (start && CodeMirror.isWordChar(line.charAt(start - 1))) --start;\n    while (end < line.length && CodeMirror.isWordChar(line.charAt(end))) ++end;\n    return {from: Pos(pos.line, start), to: Pos(pos.line, end), word: line.slice(start, end)};\n  }\n\n  cmds.selectNextOccurrence = function(cm) {\n    var from = cm.getCursor(\"from\"), to = cm.getCursor(\"to\");\n    var fullWord = cm.state.sublimeFindFullWord == cm.doc.sel;\n    if (CodeMirror.cmpPos(from, to) == 0) {\n      var word = wordAt(cm, from);\n      if (!word.word) return;\n      cm.setSelection(word.from, word.to);\n      fullWord = true;\n    } else {\n      var text = cm.getRange(from, to);\n      var query = fullWord ? new RegExp(\"\\\\b\" + text + \"\\\\b\") : text;\n      var cur = cm.getSearchCursor(query, to);\n      var found = cur.findNext();\n      if (!found) {\n        cur = cm.getSearchCursor(query, Pos(cm.firstLine(), 0));\n        found = cur.findNext();\n      }\n      if (!found || isSelectedRange(cm.listSelections(), cur.from(), cur.to())) return\n      cm.addSelection(cur.from(), cur.to());\n    }\n    if (fullWord)\n      cm.state.sublimeFindFullWord = cm.doc.sel;\n  };\n\n  cmds.skipAndSelectNextOccurrence = function(cm) {\n    var prevAnchor = cm.getCursor(\"anchor\"), prevHead = cm.getCursor(\"head\");\n    cmds.selectNextOccurrence(cm);\n    if (CodeMirror.cmpPos(prevAnchor, prevHead) != 0) {\n      cm.doc.setSelections(cm.doc.listSelections()\n          .filter(function (sel) {\n            return sel.anchor != prevAnchor || sel.head != prevHead;\n          }));\n    }\n  }\n\n  function addCursorToSelection(cm, dir) {\n    var ranges = cm.listSelections(), newRanges = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i];\n      var newAnchor = cm.findPosV(\n          range.anchor, dir, \"line\", range.anchor.goalColumn);\n      var newHead = cm.findPosV(\n          range.head, dir, \"line\", range.head.goalColumn);\n      newAnchor.goalColumn = range.anchor.goalColumn != null ?\n          range.anchor.goalColumn : cm.cursorCoords(range.anchor, \"div\").left;\n      newHead.goalColumn = range.head.goalColumn != null ?\n          range.head.goalColumn : cm.cursorCoords(range.head, \"div\").left;\n      var newRange = {anchor: newAnchor, head: newHead};\n      newRanges.push(range);\n      newRanges.push(newRange);\n    }\n    cm.setSelections(newRanges);\n  }\n  cmds.addCursorToPrevLine = function(cm) { addCursorToSelection(cm, -1); };\n  cmds.addCursorToNextLine = function(cm) { addCursorToSelection(cm, 1); };\n\n  function isSelectedRange(ranges, from, to) {\n    for (var i = 0; i < ranges.length; i++)\n      if (CodeMirror.cmpPos(ranges[i].from(), from) == 0 &&\n          CodeMirror.cmpPos(ranges[i].to(), to) == 0) return true\n    return false\n  }\n\n  var mirror = \"(){}[]\";\n  function selectBetweenBrackets(cm) {\n    var ranges = cm.listSelections(), newRanges = []\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i], pos = range.head, opening = cm.scanForBracket(pos, -1);\n      if (!opening) return false;\n      for (;;) {\n        var closing = cm.scanForBracket(pos, 1);\n        if (!closing) return false;\n        if (closing.ch == mirror.charAt(mirror.indexOf(opening.ch) + 1)) {\n          var startPos = Pos(opening.pos.line, opening.pos.ch + 1);\n          if (CodeMirror.cmpPos(startPos, range.from()) == 0 &&\n              CodeMirror.cmpPos(closing.pos, range.to()) == 0) {\n            opening = cm.scanForBracket(opening.pos, -1);\n            if (!opening) return false;\n          } else {\n            newRanges.push({anchor: startPos, head: closing.pos});\n            break;\n          }\n        }\n        pos = Pos(closing.pos.line, closing.pos.ch + 1);\n      }\n    }\n    cm.setSelections(newRanges);\n    return true;\n  }\n\n  cmds.selectScope = function(cm) {\n    selectBetweenBrackets(cm) || cm.execCommand(\"selectAll\");\n  };\n  cmds.selectBetweenBrackets = function(cm) {\n    if (!selectBetweenBrackets(cm)) return CodeMirror.Pass;\n  };\n\n  function puncType(type) {\n    return !type ? null : /\\bpunctuation\\b/.test(type) ? type : undefined\n  }\n\n  cmds.goToBracket = function(cm) {\n    cm.extendSelectionsBy(function(range) {\n      var next = cm.scanForBracket(range.head, 1, puncType(cm.getTokenTypeAt(range.head)));\n      if (next && CodeMirror.cmpPos(next.pos, range.head) != 0) return next.pos;\n      var prev = cm.scanForBracket(range.head, -1, puncType(cm.getTokenTypeAt(Pos(range.head.line, range.head.ch + 1))));\n      return prev && Pos(prev.pos.line, prev.pos.ch + 1) || range.head;\n    });\n  };\n\n  cmds.swapLineUp = function(cm) {\n    if (cm.isReadOnly()) return CodeMirror.Pass\n    var ranges = cm.listSelections(), linesToMove = [], at = cm.firstLine() - 1, newSels = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i], from = range.from().line - 1, to = range.to().line;\n      newSels.push({anchor: Pos(range.anchor.line - 1, range.anchor.ch),\n                    head: Pos(range.head.line - 1, range.head.ch)});\n      if (range.to().ch == 0 && !range.empty()) --to;\n      if (from > at) linesToMove.push(from, to);\n      else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to;\n      at = to;\n    }\n    cm.operation(function() {\n      for (var i = 0; i < linesToMove.length; i += 2) {\n        var from = linesToMove[i], to = linesToMove[i + 1];\n        var line = cm.getLine(from);\n        cm.replaceRange(\"\", Pos(from, 0), Pos(from + 1, 0), \"+swapLine\");\n        if (to > cm.lastLine())\n          cm.replaceRange(\"\\n\" + line, Pos(cm.lastLine()), null, \"+swapLine\");\n        else\n          cm.replaceRange(line + \"\\n\", Pos(to, 0), null, \"+swapLine\");\n      }\n      cm.setSelections(newSels);\n      cm.scrollIntoView();\n    });\n  };\n\n  cmds.swapLineDown = function(cm) {\n    if (cm.isReadOnly()) return CodeMirror.Pass\n    var ranges = cm.listSelections(), linesToMove = [], at = cm.lastLine() + 1;\n    for (var i = ranges.length - 1; i >= 0; i--) {\n      var range = ranges[i], from = range.to().line + 1, to = range.from().line;\n      if (range.to().ch == 0 && !range.empty()) from--;\n      if (from < at) linesToMove.push(from, to);\n      else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to;\n      at = to;\n    }\n    cm.operation(function() {\n      for (var i = linesToMove.length - 2; i >= 0; i -= 2) {\n        var from = linesToMove[i], to = linesToMove[i + 1];\n        var line = cm.getLine(from);\n        if (from == cm.lastLine())\n          cm.replaceRange(\"\", Pos(from - 1), Pos(from), \"+swapLine\");\n        else\n          cm.replaceRange(\"\", Pos(from, 0), Pos(from + 1, 0), \"+swapLine\");\n        cm.replaceRange(line + \"\\n\", Pos(to, 0), null, \"+swapLine\");\n      }\n      cm.scrollIntoView();\n    });\n  };\n\n  cmds.toggleCommentIndented = function(cm) {\n    cm.toggleComment({ indent: true });\n  }\n\n  cmds.joinLines = function(cm) {\n    var ranges = cm.listSelections(), joined = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i], from = range.from();\n      var start = from.line, end = range.to().line;\n      while (i < ranges.length - 1 && ranges[i + 1].from().line == end)\n        end = ranges[++i].to().line;\n      joined.push({start: start, end: end, anchor: !range.empty() && from});\n    }\n    cm.operation(function() {\n      var offset = 0, ranges = [];\n      for (var i = 0; i < joined.length; i++) {\n        var obj = joined[i];\n        var anchor = obj.anchor && Pos(obj.anchor.line - offset, obj.anchor.ch), head;\n        for (var line = obj.start; line <= obj.end; line++) {\n          var actual = line - offset;\n          if (line == obj.end) head = Pos(actual, cm.getLine(actual).length + 1);\n          if (actual < cm.lastLine()) {\n            cm.replaceRange(\" \", Pos(actual), Pos(actual + 1, /^\\s*/.exec(cm.getLine(actual + 1))[0].length));\n            ++offset;\n          }\n        }\n        ranges.push({anchor: anchor || head, head: head});\n      }\n      cm.setSelections(ranges, 0);\n    });\n  };\n\n  cmds.duplicateLine = function(cm) {\n    cm.operation(function() {\n      var rangeCount = cm.listSelections().length;\n      for (var i = 0; i < rangeCount; i++) {\n        var range = cm.listSelections()[i];\n        if (range.empty())\n          cm.replaceRange(cm.getLine(range.head.line) + \"\\n\", Pos(range.head.line, 0));\n        else\n          cm.replaceRange(cm.getRange(range.from(), range.to()), range.from());\n      }\n      cm.scrollIntoView();\n    });\n  };\n\n\n  function sortLines(cm, caseSensitive) {\n    if (cm.isReadOnly()) return CodeMirror.Pass\n    var ranges = cm.listSelections(), toSort = [], selected;\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i];\n      if (range.empty()) continue;\n      var from = range.from().line, to = range.to().line;\n      while (i < ranges.length - 1 && ranges[i + 1].from().line == to)\n        to = ranges[++i].to().line;\n      if (!ranges[i].to().ch) to--;\n      toSort.push(from, to);\n    }\n    if (toSort.length) selected = true;\n    else toSort.push(cm.firstLine(), cm.lastLine());\n\n    cm.operation(function() {\n      var ranges = [];\n      for (var i = 0; i < toSort.length; i += 2) {\n        var from = toSort[i], to = toSort[i + 1];\n        var start = Pos(from, 0), end = Pos(to);\n        var lines = cm.getRange(start, end, false);\n        if (caseSensitive)\n          lines.sort();\n        else\n          lines.sort(function(a, b) {\n            var au = a.toUpperCase(), bu = b.toUpperCase();\n            if (au != bu) { a = au; b = bu; }\n            return a < b ? -1 : a == b ? 0 : 1;\n          });\n        cm.replaceRange(lines, start, end);\n        if (selected) ranges.push({anchor: start, head: Pos(to + 1, 0)});\n      }\n      if (selected) cm.setSelections(ranges, 0);\n    });\n  }\n\n  cmds.sortLines = function(cm) { sortLines(cm, true); };\n  cmds.sortLinesInsensitive = function(cm) { sortLines(cm, false); };\n\n  cmds.nextBookmark = function(cm) {\n    var marks = cm.state.sublimeBookmarks;\n    if (marks) while (marks.length) {\n      var current = marks.shift();\n      var found = current.find();\n      if (found) {\n        marks.push(current);\n        return cm.setSelection(found.from, found.to);\n      }\n    }\n  };\n\n  cmds.prevBookmark = function(cm) {\n    var marks = cm.state.sublimeBookmarks;\n    if (marks) while (marks.length) {\n      marks.unshift(marks.pop());\n      var found = marks[marks.length - 1].find();\n      if (!found)\n        marks.pop();\n      else\n        return cm.setSelection(found.from, found.to);\n    }\n  };\n\n  cmds.toggleBookmark = function(cm) {\n    var ranges = cm.listSelections();\n    var marks = cm.state.sublimeBookmarks || (cm.state.sublimeBookmarks = []);\n    for (var i = 0; i < ranges.length; i++) {\n      var from = ranges[i].from(), to = ranges[i].to();\n      var found = ranges[i].empty() ? cm.findMarksAt(from) : cm.findMarks(from, to);\n      for (var j = 0; j < found.length; j++) {\n        if (found[j].sublimeBookmark) {\n          found[j].clear();\n          for (var k = 0; k < marks.length; k++)\n            if (marks[k] == found[j])\n              marks.splice(k--, 1);\n          break;\n        }\n      }\n      if (j == found.length)\n        marks.push(cm.markText(from, to, {sublimeBookmark: true, clearWhenEmpty: false}));\n    }\n  };\n\n  cmds.clearBookmarks = function(cm) {\n    var marks = cm.state.sublimeBookmarks;\n    if (marks) for (var i = 0; i < marks.length; i++) marks[i].clear();\n    marks.length = 0;\n  };\n\n  cmds.selectBookmarks = function(cm) {\n    var marks = cm.state.sublimeBookmarks, ranges = [];\n    if (marks) for (var i = 0; i < marks.length; i++) {\n      var found = marks[i].find();\n      if (!found)\n        marks.splice(i--, 0);\n      else\n        ranges.push({anchor: found.from, head: found.to});\n    }\n    if (ranges.length)\n      cm.setSelections(ranges, 0);\n  };\n\n  function modifyWordOrSelection(cm, mod) {\n    cm.operation(function() {\n      var ranges = cm.listSelections(), indices = [], replacements = [];\n      for (var i = 0; i < ranges.length; i++) {\n        var range = ranges[i];\n        if (range.empty()) { indices.push(i); replacements.push(\"\"); }\n        else replacements.push(mod(cm.getRange(range.from(), range.to())));\n      }\n      cm.replaceSelections(replacements, \"around\", \"case\");\n      for (var i = indices.length - 1, at; i >= 0; i--) {\n        var range = ranges[indices[i]];\n        if (at && CodeMirror.cmpPos(range.head, at) > 0) continue;\n        var word = wordAt(cm, range.head);\n        at = word.from;\n        cm.replaceRange(mod(word.word), word.from, word.to);\n      }\n    });\n  }\n\n  cmds.smartBackspace = function(cm) {\n    if (cm.somethingSelected()) return CodeMirror.Pass;\n\n    cm.operation(function() {\n      var cursors = cm.listSelections();\n      var indentUnit = cm.getOption(\"indentUnit\");\n\n      for (var i = cursors.length - 1; i >= 0; i--) {\n        var cursor = cursors[i].head;\n        var toStartOfLine = cm.getRange({line: cursor.line, ch: 0}, cursor);\n        var column = CodeMirror.countColumn(toStartOfLine, null, cm.getOption(\"tabSize\"));\n\n        // Delete by one character by default\n        var deletePos = cm.findPosH(cursor, -1, \"char\", false);\n\n        if (toStartOfLine && !/\\S/.test(toStartOfLine) && column % indentUnit == 0) {\n          var prevIndent = new Pos(cursor.line,\n            CodeMirror.findColumn(toStartOfLine, column - indentUnit, indentUnit));\n\n          // Smart delete only if we found a valid prevIndent location\n          if (prevIndent.ch != cursor.ch) deletePos = prevIndent;\n        }\n\n        cm.replaceRange(\"\", deletePos, cursor, \"+delete\");\n      }\n    });\n  };\n\n  cmds.delLineRight = function(cm) {\n    cm.operation(function() {\n      var ranges = cm.listSelections();\n      for (var i = ranges.length - 1; i >= 0; i--)\n        cm.replaceRange(\"\", ranges[i].anchor, Pos(ranges[i].to().line), \"+delete\");\n      cm.scrollIntoView();\n    });\n  };\n\n  cmds.upcaseAtCursor = function(cm) {\n    modifyWordOrSelection(cm, function(str) { return str.toUpperCase(); });\n  };\n  cmds.downcaseAtCursor = function(cm) {\n    modifyWordOrSelection(cm, function(str) { return str.toLowerCase(); });\n  };\n\n  cmds.setSublimeMark = function(cm) {\n    if (cm.state.sublimeMark) cm.state.sublimeMark.clear();\n    cm.state.sublimeMark = cm.setBookmark(cm.getCursor());\n  };\n  cmds.selectToSublimeMark = function(cm) {\n    var found = cm.state.sublimeMark && cm.state.sublimeMark.find();\n    if (found) cm.setSelection(cm.getCursor(), found);\n  };\n  cmds.deleteToSublimeMark = function(cm) {\n    var found = cm.state.sublimeMark && cm.state.sublimeMark.find();\n    if (found) {\n      var from = cm.getCursor(), to = found;\n      if (CodeMirror.cmpPos(from, to) > 0) { var tmp = to; to = from; from = tmp; }\n      cm.state.sublimeKilled = cm.getRange(from, to);\n      cm.replaceRange(\"\", from, to);\n    }\n  };\n  cmds.swapWithSublimeMark = function(cm) {\n    var found = cm.state.sublimeMark && cm.state.sublimeMark.find();\n    if (found) {\n      cm.state.sublimeMark.clear();\n      cm.state.sublimeMark = cm.setBookmark(cm.getCursor());\n      cm.setCursor(found);\n    }\n  };\n  cmds.sublimeYank = function(cm) {\n    if (cm.state.sublimeKilled != null)\n      cm.replaceSelection(cm.state.sublimeKilled, null, \"paste\");\n  };\n\n  cmds.showInCenter = function(cm) {\n    var pos = cm.cursorCoords(null, \"local\");\n    cm.scrollTo(null, (pos.top + pos.bottom) / 2 - cm.getScrollInfo().clientHeight / 2);\n  };\n\n  function getTarget(cm) {\n    var from = cm.getCursor(\"from\"), to = cm.getCursor(\"to\");\n    if (CodeMirror.cmpPos(from, to) == 0) {\n      var word = wordAt(cm, from);\n      if (!word.word) return;\n      from = word.from;\n      to = word.to;\n    }\n    return {from: from, to: to, query: cm.getRange(from, to), word: word};\n  }\n\n  function findAndGoTo(cm, forward) {\n    var target = getTarget(cm);\n    if (!target) return;\n    var query = target.query;\n    var cur = cm.getSearchCursor(query, forward ? target.to : target.from);\n\n    if (forward ? cur.findNext() : cur.findPrevious()) {\n      cm.setSelection(cur.from(), cur.to());\n    } else {\n      cur = cm.getSearchCursor(query, forward ? Pos(cm.firstLine(), 0)\n                                              : cm.clipPos(Pos(cm.lastLine())));\n      if (forward ? cur.findNext() : cur.findPrevious())\n        cm.setSelection(cur.from(), cur.to());\n      else if (target.word)\n        cm.setSelection(target.from, target.to);\n    }\n  };\n  cmds.findUnder = function(cm) { findAndGoTo(cm, true); };\n  cmds.findUnderPrevious = function(cm) { findAndGoTo(cm,false); };\n  cmds.findAllUnder = function(cm) {\n    var target = getTarget(cm);\n    if (!target) return;\n    var cur = cm.getSearchCursor(target.query);\n    var matches = [];\n    var primaryIndex = -1;\n    while (cur.findNext()) {\n      matches.push({anchor: cur.from(), head: cur.to()});\n      if (cur.from().line <= target.from.line && cur.from().ch <= target.from.ch)\n        primaryIndex++;\n    }\n    cm.setSelections(matches, primaryIndex);\n  };\n\n\n  var keyMap = CodeMirror.keyMap;\n  keyMap.macSublime = {\n    \"Cmd-Left\": \"goLineStartSmart\",\n    \"Shift-Tab\": \"indentLess\",\n    \"Shift-Ctrl-K\": \"deleteLine\",\n    \"Alt-Q\": \"wrapLines\",\n    \"Ctrl-Left\": \"goSubwordLeft\",\n    \"Ctrl-Right\": \"goSubwordRight\",\n    \"Ctrl-Alt-Up\": \"scrollLineUp\",\n    \"Ctrl-Alt-Down\": \"scrollLineDown\",\n    \"Cmd-L\": \"selectLine\",\n    \"Shift-Cmd-L\": \"splitSelectionByLine\",\n    \"Esc\": \"singleSelectionTop\",\n    \"Cmd-Enter\": \"insertLineAfter\",\n    \"Shift-Cmd-Enter\": \"insertLineBefore\",\n    \"Cmd-D\": \"selectNextOccurrence\",\n    \"Shift-Cmd-Space\": \"selectScope\",\n    \"Shift-Cmd-M\": \"selectBetweenBrackets\",\n    \"Cmd-M\": \"goToBracket\",\n    \"Cmd-Ctrl-Up\": \"swapLineUp\",\n    \"Cmd-Ctrl-Down\": \"swapLineDown\",\n    \"Cmd-/\": \"toggleCommentIndented\",\n    \"Cmd-J\": \"joinLines\",\n    \"Shift-Cmd-D\": \"duplicateLine\",\n    \"F5\": \"sortLines\",\n    \"Cmd-F5\": \"sortLinesInsensitive\",\n    \"F2\": \"nextBookmark\",\n    \"Shift-F2\": \"prevBookmark\",\n    \"Cmd-F2\": \"toggleBookmark\",\n    \"Shift-Cmd-F2\": \"clearBookmarks\",\n    \"Alt-F2\": \"selectBookmarks\",\n    \"Backspace\": \"smartBackspace\",\n    \"Cmd-K Cmd-D\": \"skipAndSelectNextOccurrence\",\n    \"Cmd-K Cmd-K\": \"delLineRight\",\n    \"Cmd-K Cmd-U\": \"upcaseAtCursor\",\n    \"Cmd-K Cmd-L\": \"downcaseAtCursor\",\n    \"Cmd-K Cmd-Space\": \"setSublimeMark\",\n    \"Cmd-K Cmd-A\": \"selectToSublimeMark\",\n    \"Cmd-K Cmd-W\": \"deleteToSublimeMark\",\n    \"Cmd-K Cmd-X\": \"swapWithSublimeMark\",\n    \"Cmd-K Cmd-Y\": \"sublimeYank\",\n    \"Cmd-K Cmd-C\": \"showInCenter\",\n    \"Cmd-K Cmd-G\": \"clearBookmarks\",\n    \"Cmd-K Cmd-Backspace\": \"delLineLeft\",\n    \"Cmd-K Cmd-0\": \"unfoldAll\",\n    \"Cmd-K Cmd-J\": \"unfoldAll\",\n    \"Ctrl-Shift-Up\": \"addCursorToPrevLine\",\n    \"Ctrl-Shift-Down\": \"addCursorToNextLine\",\n    \"Cmd-F3\": \"findUnder\",\n    \"Shift-Cmd-F3\": \"findUnderPrevious\",\n    \"Alt-F3\": \"findAllUnder\",\n    \"Shift-Cmd-[\": \"fold\",\n    \"Shift-Cmd-]\": \"unfold\",\n    \"Cmd-I\": \"findIncremental\",\n    \"Shift-Cmd-I\": \"findIncrementalReverse\",\n    \"Cmd-H\": \"replace\",\n    \"F3\": \"findNext\",\n    \"Shift-F3\": \"findPrev\",\n    \"fallthrough\": \"macDefault\"\n  };\n  CodeMirror.normalizeKeyMap(keyMap.macSublime);\n\n  keyMap.pcSublime = {\n    \"Shift-Tab\": \"indentLess\",\n    \"Shift-Ctrl-K\": \"deleteLine\",\n    \"Alt-Q\": \"wrapLines\",\n    \"Ctrl-T\": \"transposeChars\",\n    \"Alt-Left\": \"goSubwordLeft\",\n    \"Alt-Right\": \"goSubwordRight\",\n    \"Ctrl-Up\": \"scrollLineUp\",\n    \"Ctrl-Down\": \"scrollLineDown\",\n    \"Ctrl-L\": \"selectLine\",\n    \"Shift-Ctrl-L\": \"splitSelectionByLine\",\n    \"Esc\": \"singleSelectionTop\",\n    \"Ctrl-Enter\": \"insertLineAfter\",\n    \"Shift-Ctrl-Enter\": \"insertLineBefore\",\n    \"Ctrl-D\": \"selectNextOccurrence\",\n    \"Shift-Ctrl-Space\": \"selectScope\",\n    \"Shift-Ctrl-M\": \"selectBetweenBrackets\",\n    \"Ctrl-M\": \"goToBracket\",\n    \"Shift-Ctrl-Up\": \"swapLineUp\",\n    \"Shift-Ctrl-Down\": \"swapLineDown\",\n    \"Ctrl-/\": \"toggleCommentIndented\",\n    \"Ctrl-J\": \"joinLines\",\n    \"Shift-Ctrl-D\": \"duplicateLine\",\n    \"F9\": \"sortLines\",\n    \"Ctrl-F9\": \"sortLinesInsensitive\",\n    \"F2\": \"nextBookmark\",\n    \"Shift-F2\": \"prevBookmark\",\n    \"Ctrl-F2\": \"toggleBookmark\",\n    \"Shift-Ctrl-F2\": \"clearBookmarks\",\n    \"Alt-F2\": \"selectBookmarks\",\n    \"Backspace\": \"smartBackspace\",\n    \"Ctrl-K Ctrl-D\": \"skipAndSelectNextOccurrence\",\n    \"Ctrl-K Ctrl-K\": \"delLineRight\",\n    \"Ctrl-K Ctrl-U\": \"upcaseAtCursor\",\n    \"Ctrl-K Ctrl-L\": \"downcaseAtCursor\",\n    \"Ctrl-K Ctrl-Space\": \"setSublimeMark\",\n    \"Ctrl-K Ctrl-A\": \"selectToSublimeMark\",\n    \"Ctrl-K Ctrl-W\": \"deleteToSublimeMark\",\n    \"Ctrl-K Ctrl-X\": \"swapWithSublimeMark\",\n    \"Ctrl-K Ctrl-Y\": \"sublimeYank\",\n    \"Ctrl-K Ctrl-C\": \"showInCenter\",\n    \"Ctrl-K Ctrl-G\": \"clearBookmarks\",\n    \"Ctrl-K Ctrl-Backspace\": \"delLineLeft\",\n    \"Ctrl-K Ctrl-0\": \"unfoldAll\",\n    \"Ctrl-K Ctrl-J\": \"unfoldAll\",\n    \"Ctrl-Alt-Up\": \"addCursorToPrevLine\",\n    \"Ctrl-Alt-Down\": \"addCursorToNextLine\",\n    \"Ctrl-F3\": \"findUnder\",\n    \"Shift-Ctrl-F3\": \"findUnderPrevious\",\n    \"Alt-F3\": \"findAllUnder\",\n    \"Shift-Ctrl-[\": \"fold\",\n    \"Shift-Ctrl-]\": \"unfold\",\n    \"Ctrl-I\": \"findIncremental\",\n    \"Shift-Ctrl-I\": \"findIncrementalReverse\",\n    \"Ctrl-H\": \"replace\",\n    \"F3\": \"findNext\",\n    \"Shift-F3\": \"findPrev\",\n    \"fallthrough\": \"pcDefault\"\n  };\n  CodeMirror.normalizeKeyMap(keyMap.pcSublime);\n\n  var mac = keyMap.default == keyMap.macDefault;\n  keyMap.sublime = mac ? keyMap.macSublime : keyMap.pcSublime;\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var HINT_ELEMENT_CLASS        = \"CodeMirror-hint\";\n  var ACTIVE_HINT_ELEMENT_CLASS = \"CodeMirror-hint-active\";\n\n  // This is the old interface, kept around for now to stay\n  // backwards-compatible.\n  CodeMirror.showHint = function(cm, getHints, options) {\n    if (!getHints) return cm.showHint(options);\n    if (options && options.async) getHints.async = true;\n    var newOpts = {hint: getHints};\n    if (options) for (var prop in options) newOpts[prop] = options[prop];\n    return cm.showHint(newOpts);\n  };\n\n  CodeMirror.defineExtension(\"showHint\", function(options) {\n    options = parseOptions(this, this.getCursor(\"start\"), options);\n    var selections = this.listSelections()\n    if (selections.length > 1) return;\n    // By default, don't allow completion when something is selected.\n    // A hint function can have a `supportsSelection` property to\n    // indicate that it can handle selections.\n    if (this.somethingSelected()) {\n      if (!options.hint.supportsSelection) return;\n      // Don't try with cross-line selections\n      for (var i = 0; i < selections.length; i++)\n        if (selections[i].head.line != selections[i].anchor.line) return;\n    }\n\n    if (this.state.completionActive) this.state.completionActive.close();\n    var completion = this.state.completionActive = new Completion(this, options);\n    if (!completion.options.hint) return;\n\n    CodeMirror.signal(this, \"startCompletion\", this);\n    completion.update(true);\n  });\n\n  CodeMirror.defineExtension(\"closeHint\", function() {\n    if (this.state.completionActive) this.state.completionActive.close()\n  })\n\n  function Completion(cm, options) {\n    this.cm = cm;\n    this.options = options;\n    this.widget = null;\n    this.debounce = 0;\n    this.tick = 0;\n    this.startPos = this.cm.getCursor(\"start\");\n    this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length;\n\n    var self = this;\n    cm.on(\"cursorActivity\", this.activityFunc = function() { self.cursorActivity(); });\n  }\n\n  var requestAnimationFrame = window.requestAnimationFrame || function(fn) {\n    return setTimeout(fn, 1000/60);\n  };\n  var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;\n\n  Completion.prototype = {\n    close: function() {\n      if (!this.active()) return;\n      this.cm.state.completionActive = null;\n      this.tick = null;\n      this.cm.off(\"cursorActivity\", this.activityFunc);\n\n      if (this.widget && this.data) CodeMirror.signal(this.data, \"close\");\n      if (this.widget) this.widget.close();\n      CodeMirror.signal(this.cm, \"endCompletion\", this.cm);\n    },\n\n    active: function() {\n      return this.cm.state.completionActive == this;\n    },\n\n    pick: function(data, i) {\n      var completion = data.list[i];\n      if (completion.hint) completion.hint(this.cm, data, completion);\n      else this.cm.replaceRange(getText(completion), completion.from || data.from,\n                                completion.to || data.to, \"complete\");\n      CodeMirror.signal(data, \"pick\", completion);\n      this.close();\n    },\n\n    cursorActivity: function() {\n      if (this.debounce) {\n        cancelAnimationFrame(this.debounce);\n        this.debounce = 0;\n      }\n\n      var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line);\n      if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch ||\n          pos.ch < this.startPos.ch || this.cm.somethingSelected() ||\n          (!pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {\n        this.close();\n      } else {\n        var self = this;\n        this.debounce = requestAnimationFrame(function() {self.update();});\n        if (this.widget) this.widget.disable();\n      }\n    },\n\n    update: function(first) {\n      if (this.tick == null) return\n      var self = this, myTick = ++this.tick\n      fetchHints(this.options.hint, this.cm, this.options, function(data) {\n        if (self.tick == myTick) self.finishUpdate(data, first)\n      })\n    },\n\n    finishUpdate: function(data, first) {\n      if (this.data) CodeMirror.signal(this.data, \"update\");\n\n      var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle);\n      if (this.widget) this.widget.close();\n\n      this.data = data;\n\n      if (data && data.list.length) {\n        if (picked && data.list.length == 1) {\n          this.pick(data, 0);\n        } else {\n          this.widget = new Widget(this, data);\n          CodeMirror.signal(data, \"shown\");\n        }\n      }\n    }\n  };\n\n  function parseOptions(cm, pos, options) {\n    var editor = cm.options.hintOptions;\n    var out = {};\n    for (var prop in defaultOptions) out[prop] = defaultOptions[prop];\n    if (editor) for (var prop in editor)\n      if (editor[prop] !== undefined) out[prop] = editor[prop];\n    if (options) for (var prop in options)\n      if (options[prop] !== undefined) out[prop] = options[prop];\n    if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos)\n    return out;\n  }\n\n  function getText(completion) {\n    if (typeof completion == \"string\") return completion;\n    else return completion.text;\n  }\n\n  function buildKeyMap(completion, handle) {\n    var baseMap = {\n      Up: function() {handle.moveFocus(-1);},\n      Down: function() {handle.moveFocus(1);},\n      PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);},\n      PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);},\n      Home: function() {handle.setFocus(0);},\n      End: function() {handle.setFocus(handle.length - 1);},\n      Enter: handle.pick,\n      Tab: handle.pick,\n      Esc: handle.close\n    };\n\n    var mac = /Mac/.test(navigator.platform);\n\n    if (mac) {\n      baseMap[\"Ctrl-P\"] = function() {handle.moveFocus(-1);};\n      baseMap[\"Ctrl-N\"] = function() {handle.moveFocus(1);};\n    }\n\n    var custom = completion.options.customKeys;\n    var ourMap = custom ? {} : baseMap;\n    function addBinding(key, val) {\n      var bound;\n      if (typeof val != \"string\")\n        bound = function(cm) { return val(cm, handle); };\n      // This mechanism is deprecated\n      else if (baseMap.hasOwnProperty(val))\n        bound = baseMap[val];\n      else\n        bound = val;\n      ourMap[key] = bound;\n    }\n    if (custom)\n      for (var key in custom) if (custom.hasOwnProperty(key))\n        addBinding(key, custom[key]);\n    var extra = completion.options.extraKeys;\n    if (extra)\n      for (var key in extra) if (extra.hasOwnProperty(key))\n        addBinding(key, extra[key]);\n    return ourMap;\n  }\n\n  function getHintElement(hintsElement, el) {\n    while (el && el != hintsElement) {\n      if (el.nodeName.toUpperCase() === \"LI\" && el.parentNode == hintsElement) return el;\n      el = el.parentNode;\n    }\n  }\n\n  function Widget(completion, data) {\n    this.completion = completion;\n    this.data = data;\n    this.picked = false;\n    var widget = this, cm = completion.cm;\n    var ownerDocument = cm.getInputField().ownerDocument;\n    var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow;\n\n    var hints = this.hints = ownerDocument.createElement(\"ul\");\n    var theme = completion.cm.options.theme;\n    hints.className = \"CodeMirror-hints \" + theme;\n    this.selectedHint = data.selectedHint || 0;\n\n    var completions = data.list;\n    for (var i = 0; i < completions.length; ++i) {\n      var elt = hints.appendChild(ownerDocument.createElement(\"li\")), cur = completions[i];\n      var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? \"\" : \" \" + ACTIVE_HINT_ELEMENT_CLASS);\n      if (cur.className != null) className = cur.className + \" \" + className;\n      elt.className = className;\n      if (cur.render) cur.render(elt, data, cur);\n      else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur)));\n      elt.hintId = i;\n    }\n\n    var container = completion.options.container || ownerDocument.body;\n    var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);\n    var left = pos.left, top = pos.bottom, below = true;\n    var offsetLeft = 0, offsetTop = 0;\n    if (container !== ownerDocument.body) {\n      // We offset the cursor position because left and top are relative to the offsetParent's top left corner.\n      var isContainerPositioned = ['absolute', 'relative', 'fixed'].indexOf(parentWindow.getComputedStyle(container).position) !== -1;\n      var offsetParent = isContainerPositioned ? container : container.offsetParent;\n      var offsetParentPosition = offsetParent.getBoundingClientRect();\n      var bodyPosition = ownerDocument.body.getBoundingClientRect();\n      offsetLeft = (offsetParentPosition.left - bodyPosition.left - offsetParent.scrollLeft);\n      offsetTop = (offsetParentPosition.top - bodyPosition.top - offsetParent.scrollTop);\n    }\n    hints.style.left = (left - offsetLeft) + \"px\";\n    hints.style.top = (top - offsetTop) + \"px\";\n\n    // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor.\n    var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth);\n    var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight);\n    container.appendChild(hints);\n    var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH;\n    var scrolls = hints.scrollHeight > hints.clientHeight + 1\n    var startScroll = cm.getScrollInfo();\n\n    if (overlapY > 0) {\n      var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top);\n      if (curTop - height > 0) { // Fits above cursor\n        hints.style.top = (top = pos.top - height - offsetTop) + \"px\";\n        below = false;\n      } else if (height > winH) {\n        hints.style.height = (winH - 5) + \"px\";\n        hints.style.top = (top = pos.bottom - box.top - offsetTop) + \"px\";\n        var cursor = cm.getCursor();\n        if (data.from.ch != cursor.ch) {\n          pos = cm.cursorCoords(cursor);\n          hints.style.left = (left = pos.left - offsetLeft) + \"px\";\n          box = hints.getBoundingClientRect();\n        }\n      }\n    }\n    var overlapX = box.right - winW;\n    if (overlapX > 0) {\n      if (box.right - box.left > winW) {\n        hints.style.width = (winW - 5) + \"px\";\n        overlapX -= (box.right - box.left) - winW;\n      }\n      hints.style.left = (left = pos.left - overlapX - offsetLeft) + \"px\";\n    }\n    if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling)\n      node.style.paddingRight = cm.display.nativeBarWidth + \"px\"\n\n    cm.addKeyMap(this.keyMap = buildKeyMap(completion, {\n      moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); },\n      setFocus: function(n) { widget.changeActive(n); },\n      menuSize: function() { return widget.screenAmount(); },\n      length: completions.length,\n      close: function() { completion.close(); },\n      pick: function() { widget.pick(); },\n      data: data\n    }));\n\n    if (completion.options.closeOnUnfocus) {\n      var closingOnBlur;\n      cm.on(\"blur\", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); });\n      cm.on(\"focus\", this.onFocus = function() { clearTimeout(closingOnBlur); });\n    }\n\n    cm.on(\"scroll\", this.onScroll = function() {\n      var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();\n      var newTop = top + startScroll.top - curScroll.top;\n      var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop);\n      if (!below) point += hints.offsetHeight;\n      if (point <= editor.top || point >= editor.bottom) return completion.close();\n      hints.style.top = newTop + \"px\";\n      hints.style.left = (left + startScroll.left - curScroll.left) + \"px\";\n    });\n\n    CodeMirror.on(hints, \"dblclick\", function(e) {\n      var t = getHintElement(hints, e.target || e.srcElement);\n      if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();}\n    });\n\n    CodeMirror.on(hints, \"click\", function(e) {\n      var t = getHintElement(hints, e.target || e.srcElement);\n      if (t && t.hintId != null) {\n        widget.changeActive(t.hintId);\n        if (completion.options.completeOnSingleClick) widget.pick();\n      }\n    });\n\n    CodeMirror.on(hints, \"mousedown\", function() {\n      setTimeout(function(){cm.focus();}, 20);\n    });\n    this.scrollToActive()\n\n    CodeMirror.signal(data, \"select\", completions[this.selectedHint], hints.childNodes[this.selectedHint]);\n    return true;\n  }\n\n  Widget.prototype = {\n    close: function() {\n      if (this.completion.widget != this) return;\n      this.completion.widget = null;\n      this.hints.parentNode.removeChild(this.hints);\n      this.completion.cm.removeKeyMap(this.keyMap);\n\n      var cm = this.completion.cm;\n      if (this.completion.options.closeOnUnfocus) {\n        cm.off(\"blur\", this.onBlur);\n        cm.off(\"focus\", this.onFocus);\n      }\n      cm.off(\"scroll\", this.onScroll);\n    },\n\n    disable: function() {\n      this.completion.cm.removeKeyMap(this.keyMap);\n      var widget = this;\n      this.keyMap = {Enter: function() { widget.picked = true; }};\n      this.completion.cm.addKeyMap(this.keyMap);\n    },\n\n    pick: function() {\n      this.completion.pick(this.data, this.selectedHint);\n    },\n\n    changeActive: function(i, avoidWrap) {\n      if (i >= this.data.list.length)\n        i = avoidWrap ? this.data.list.length - 1 : 0;\n      else if (i < 0)\n        i = avoidWrap ? 0  : this.data.list.length - 1;\n      if (this.selectedHint == i) return;\n      var node = this.hints.childNodes[this.selectedHint];\n      if (node) node.className = node.className.replace(\" \" + ACTIVE_HINT_ELEMENT_CLASS, \"\");\n      node = this.hints.childNodes[this.selectedHint = i];\n      node.className += \" \" + ACTIVE_HINT_ELEMENT_CLASS;\n      this.scrollToActive()\n      CodeMirror.signal(this.data, \"select\", this.data.list[this.selectedHint], node);\n    },\n\n    scrollToActive: function() {\n      var node = this.hints.childNodes[this.selectedHint]\n      if (node.offsetTop < this.hints.scrollTop)\n        this.hints.scrollTop = node.offsetTop - 3;\n      else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight)\n        this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3;\n    },\n\n    screenAmount: function() {\n      return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;\n    }\n  };\n\n  function applicableHelpers(cm, helpers) {\n    if (!cm.somethingSelected()) return helpers\n    var result = []\n    for (var i = 0; i < helpers.length; i++)\n      if (helpers[i].supportsSelection) result.push(helpers[i])\n    return result\n  }\n\n  function fetchHints(hint, cm, options, callback) {\n    if (hint.async) {\n      hint(cm, callback, options)\n    } else {\n      var result = hint(cm, options)\n      if (result && result.then) result.then(callback)\n      else callback(result)\n    }\n  }\n\n  function resolveAutoHints(cm, pos) {\n    var helpers = cm.getHelpers(pos, \"hint\"), words\n    if (helpers.length) {\n      var resolved = function(cm, callback, options) {\n        var app = applicableHelpers(cm, helpers);\n        function run(i) {\n          if (i == app.length) return callback(null)\n          fetchHints(app[i], cm, options, function(result) {\n            if (result && result.list.length > 0) callback(result)\n            else run(i + 1)\n          })\n        }\n        run(0)\n      }\n      resolved.async = true\n      resolved.supportsSelection = true\n      return resolved\n    } else if (words = cm.getHelper(cm.getCursor(), \"hintWords\")) {\n      return function(cm) { return CodeMirror.hint.fromList(cm, {words: words}) }\n    } else if (CodeMirror.hint.anyword) {\n      return function(cm, options) { return CodeMirror.hint.anyword(cm, options) }\n    } else {\n      return function() {}\n    }\n  }\n\n  CodeMirror.registerHelper(\"hint\", \"auto\", {\n    resolve: resolveAutoHints\n  });\n\n  CodeMirror.registerHelper(\"hint\", \"fromList\", function(cm, options) {\n    var cur = cm.getCursor(), token = cm.getTokenAt(cur)\n    var term, from = CodeMirror.Pos(cur.line, token.start), to = cur\n    if (token.start < cur.ch && /\\w/.test(token.string.charAt(cur.ch - token.start - 1))) {\n      term = token.string.substr(0, cur.ch - token.start)\n    } else {\n      term = \"\"\n      from = cur\n    }\n    var found = [];\n    for (var i = 0; i < options.words.length; i++) {\n      var word = options.words[i];\n      if (word.slice(0, term.length) == term)\n        found.push(word);\n    }\n\n    if (found.length) return {list: found, from: from, to: to};\n  });\n\n  CodeMirror.commands.autocomplete = CodeMirror.showHint;\n\n  var defaultOptions = {\n    hint: CodeMirror.hint.auto,\n    completeSingle: true,\n    alignWithWord: true,\n    closeCharacters: /[\\s()\\[\\]{};:>,]/,\n    closeOnUnfocus: true,\n    completeOnSingleClick: true,\n    container: null,\n    customKeys: null,\n    extraKeys: null\n  };\n\n  CodeMirror.defineOption(\"hintOptions\", null);\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// Utility function that allows modes to be combined. The mode given\n// as the base argument takes care of most of the normal mode\n// functionality, but a second (typically simple) mode is used, which\n// can override the style of text. Both modes get to parse all of the\n// text, but when both assign a non-null style to a piece of code, the\n// overlay wins, unless the combine argument was true and not overridden,\n// or state.overlay.combineTokens was true, in which case the styles are\n// combined.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.overlayMode = function(base, overlay, combine) {\n  return {\n    startState: function() {\n      return {\n        base: CodeMirror.startState(base),\n        overlay: CodeMirror.startState(overlay),\n        basePos: 0, baseCur: null,\n        overlayPos: 0, overlayCur: null,\n        streamSeen: null\n      };\n    },\n    copyState: function(state) {\n      return {\n        base: CodeMirror.copyState(base, state.base),\n        overlay: CodeMirror.copyState(overlay, state.overlay),\n        basePos: state.basePos, baseCur: null,\n        overlayPos: state.overlayPos, overlayCur: null\n      };\n    },\n\n    token: function(stream, state) {\n      if (stream != state.streamSeen ||\n          Math.min(state.basePos, state.overlayPos) < stream.start) {\n        state.streamSeen = stream;\n        state.basePos = state.overlayPos = stream.start;\n      }\n\n      if (stream.start == state.basePos) {\n        state.baseCur = base.token(stream, state.base);\n        state.basePos = stream.pos;\n      }\n      if (stream.start == state.overlayPos) {\n        stream.pos = stream.start;\n        state.overlayCur = overlay.token(stream, state.overlay);\n        state.overlayPos = stream.pos;\n      }\n      stream.pos = Math.min(state.basePos, state.overlayPos);\n\n      // state.overlay.combineTokens always takes precedence over combine,\n      // unless set to null\n      if (state.overlayCur == null) return state.baseCur;\n      else if (state.baseCur != null &&\n               state.overlay.combineTokens ||\n               combine && state.overlay.combineTokens == null)\n        return state.baseCur + \" \" + state.overlayCur;\n      else return state.overlayCur;\n    },\n\n    indent: base.indent && function(state, textAfter, line) {\n      return base.indent(state.base, textAfter, line);\n    },\n    electricChars: base.electricChars,\n\n    innerMode: function(state) { return {state: state.base, mode: base}; },\n\n    blankLine: function(state) {\n      var baseToken, overlayToken;\n      if (base.blankLine) baseToken = base.blankLine(state.base);\n      if (overlay.blankLine) overlayToken = overlay.blankLine(state.overlay);\n\n      return overlayToken == null ?\n        baseToken :\n        (combine && baseToken != null ? baseToken + \" \" + overlayToken : overlayToken);\n    }\n  };\n};\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n/**\n * Link to the project's GitHub page:\n * https://github.com/pickhardt/coffeescript-codemirror-mode\n */\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"coffeescript\", function(conf, parserConf) {\n  var ERRORCLASS = \"error\";\n\n  function wordRegexp(words) {\n    return new RegExp(\"^((\" + words.join(\")|(\") + \"))\\\\b\");\n  }\n\n  var operators = /^(?:->|=>|\\+[+=]?|-[\\-=]?|\\*[\\*=]?|\\/[\\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\\|=?|\\^=?|\\~|!|\\?|(or|and|\\|\\||&&|\\?)=)/;\n  var delimiters = /^(?:[()\\[\\]{},:`=;]|\\.\\.?\\.?)/;\n  var identifiers = /^[_A-Za-z$][_A-Za-z$0-9]*/;\n  var atProp = /^@[_A-Za-z$][_A-Za-z$0-9]*/;\n\n  var wordOperators = wordRegexp([\"and\", \"or\", \"not\",\n                                  \"is\", \"isnt\", \"in\",\n                                  \"instanceof\", \"typeof\"]);\n  var indentKeywords = [\"for\", \"while\", \"loop\", \"if\", \"unless\", \"else\",\n                        \"switch\", \"try\", \"catch\", \"finally\", \"class\"];\n  var commonKeywords = [\"break\", \"by\", \"continue\", \"debugger\", \"delete\",\n                        \"do\", \"in\", \"of\", \"new\", \"return\", \"then\",\n                        \"this\", \"@\", \"throw\", \"when\", \"until\", \"extends\"];\n\n  var keywords = wordRegexp(indentKeywords.concat(commonKeywords));\n\n  indentKeywords = wordRegexp(indentKeywords);\n\n\n  var stringPrefixes = /^('{3}|\\\"{3}|['\\\"])/;\n  var regexPrefixes = /^(\\/{3}|\\/)/;\n  var commonConstants = [\"Infinity\", \"NaN\", \"undefined\", \"null\", \"true\", \"false\", \"on\", \"off\", \"yes\", \"no\"];\n  var constants = wordRegexp(commonConstants);\n\n  // Tokenizers\n  function tokenBase(stream, state) {\n    // Handle scope changes\n    if (stream.sol()) {\n      if (state.scope.align === null) state.scope.align = false;\n      var scopeOffset = state.scope.offset;\n      if (stream.eatSpace()) {\n        var lineOffset = stream.indentation();\n        if (lineOffset > scopeOffset && state.scope.type == \"coffee\") {\n          return \"indent\";\n        } else if (lineOffset < scopeOffset) {\n          return \"dedent\";\n        }\n        return null;\n      } else {\n        if (scopeOffset > 0) {\n          dedent(stream, state);\n        }\n      }\n    }\n    if (stream.eatSpace()) {\n      return null;\n    }\n\n    var ch = stream.peek();\n\n    // Handle docco title comment (single line)\n    if (stream.match(\"####\")) {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n\n    // Handle multi line comments\n    if (stream.match(\"###\")) {\n      state.tokenize = longComment;\n      return state.tokenize(stream, state);\n    }\n\n    // Single line comment\n    if (ch === \"#\") {\n      stream.skipToEnd();\n      return \"comment\";\n    }\n\n    // Handle number literals\n    if (stream.match(/^-?[0-9\\.]/, false)) {\n      var floatLiteral = false;\n      // Floats\n      if (stream.match(/^-?\\d*\\.\\d+(e[\\+\\-]?\\d+)?/i)) {\n        floatLiteral = true;\n      }\n      if (stream.match(/^-?\\d+\\.\\d*/)) {\n        floatLiteral = true;\n      }\n      if (stream.match(/^-?\\.\\d+/)) {\n        floatLiteral = true;\n      }\n\n      if (floatLiteral) {\n        // prevent from getting extra . on 1..\n        if (stream.peek() == \".\"){\n          stream.backUp(1);\n        }\n        return \"number\";\n      }\n      // Integers\n      var intLiteral = false;\n      // Hex\n      if (stream.match(/^-?0x[0-9a-f]+/i)) {\n        intLiteral = true;\n      }\n      // Decimal\n      if (stream.match(/^-?[1-9]\\d*(e[\\+\\-]?\\d+)?/)) {\n        intLiteral = true;\n      }\n      // Zero by itself with no other piece of number.\n      if (stream.match(/^-?0(?![\\dx])/i)) {\n        intLiteral = true;\n      }\n      if (intLiteral) {\n        return \"number\";\n      }\n    }\n\n    // Handle strings\n    if (stream.match(stringPrefixes)) {\n      state.tokenize = tokenFactory(stream.current(), false, \"string\");\n      return state.tokenize(stream, state);\n    }\n    // Handle regex literals\n    if (stream.match(regexPrefixes)) {\n      if (stream.current() != \"/\" || stream.match(/^.*\\//, false)) { // prevent highlight of division\n        state.tokenize = tokenFactory(stream.current(), true, \"string-2\");\n        return state.tokenize(stream, state);\n      } else {\n        stream.backUp(1);\n      }\n    }\n\n\n\n    // Handle operators and delimiters\n    if (stream.match(operators) || stream.match(wordOperators)) {\n      return \"operator\";\n    }\n    if (stream.match(delimiters)) {\n      return \"punctuation\";\n    }\n\n    if (stream.match(constants)) {\n      return \"atom\";\n    }\n\n    if (stream.match(atProp) || state.prop && stream.match(identifiers)) {\n      return \"property\";\n    }\n\n    if (stream.match(keywords)) {\n      return \"keyword\";\n    }\n\n    if (stream.match(identifiers)) {\n      return \"variable\";\n    }\n\n    // Handle non-detected items\n    stream.next();\n    return ERRORCLASS;\n  }\n\n  function tokenFactory(delimiter, singleline, outclass) {\n    return function(stream, state) {\n      while (!stream.eol()) {\n        stream.eatWhile(/[^'\"\\/\\\\]/);\n        if (stream.eat(\"\\\\\")) {\n          stream.next();\n          if (singleline && stream.eol()) {\n            return outclass;\n          }\n        } else if (stream.match(delimiter)) {\n          state.tokenize = tokenBase;\n          return outclass;\n        } else {\n          stream.eat(/['\"\\/]/);\n        }\n      }\n      if (singleline) {\n        if (parserConf.singleLineStringErrors) {\n          outclass = ERRORCLASS;\n        } else {\n          state.tokenize = tokenBase;\n        }\n      }\n      return outclass;\n    };\n  }\n\n  function longComment(stream, state) {\n    while (!stream.eol()) {\n      stream.eatWhile(/[^#]/);\n      if (stream.match(\"###\")) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      stream.eatWhile(\"#\");\n    }\n    return \"comment\";\n  }\n\n  function indent(stream, state, type) {\n    type = type || \"coffee\";\n    var offset = 0, align = false, alignOffset = null;\n    for (var scope = state.scope; scope; scope = scope.prev) {\n      if (scope.type === \"coffee\" || scope.type == \"}\") {\n        offset = scope.offset + conf.indentUnit;\n        break;\n      }\n    }\n    if (type !== \"coffee\") {\n      align = null;\n      alignOffset = stream.column() + stream.current().length;\n    } else if (state.scope.align) {\n      state.scope.align = false;\n    }\n    state.scope = {\n      offset: offset,\n      type: type,\n      prev: state.scope,\n      align: align,\n      alignOffset: alignOffset\n    };\n  }\n\n  function dedent(stream, state) {\n    if (!state.scope.prev) return;\n    if (state.scope.type === \"coffee\") {\n      var _indent = stream.indentation();\n      var matched = false;\n      for (var scope = state.scope; scope; scope = scope.prev) {\n        if (_indent === scope.offset) {\n          matched = true;\n          break;\n        }\n      }\n      if (!matched) {\n        return true;\n      }\n      while (state.scope.prev && state.scope.offset !== _indent) {\n        state.scope = state.scope.prev;\n      }\n      return false;\n    } else {\n      state.scope = state.scope.prev;\n      return false;\n    }\n  }\n\n  function tokenLexer(stream, state) {\n    var style = state.tokenize(stream, state);\n    var current = stream.current();\n\n    // Handle scope changes.\n    if (current === \"return\") {\n      state.dedent = true;\n    }\n    if (((current === \"->\" || current === \"=>\") && stream.eol())\n        || style === \"indent\") {\n      indent(stream, state);\n    }\n    var delimiter_index = \"[({\".indexOf(current);\n    if (delimiter_index !== -1) {\n      indent(stream, state, \"])}\".slice(delimiter_index, delimiter_index+1));\n    }\n    if (indentKeywords.exec(current)){\n      indent(stream, state);\n    }\n    if (current == \"then\"){\n      dedent(stream, state);\n    }\n\n\n    if (style === \"dedent\") {\n      if (dedent(stream, state)) {\n        return ERRORCLASS;\n      }\n    }\n    delimiter_index = \"])}\".indexOf(current);\n    if (delimiter_index !== -1) {\n      while (state.scope.type == \"coffee\" && state.scope.prev)\n        state.scope = state.scope.prev;\n      if (state.scope.type == current)\n        state.scope = state.scope.prev;\n    }\n    if (state.dedent && stream.eol()) {\n      if (state.scope.type == \"coffee\" && state.scope.prev)\n        state.scope = state.scope.prev;\n      state.dedent = false;\n    }\n\n    return style;\n  }\n\n  var external = {\n    startState: function(basecolumn) {\n      return {\n        tokenize: tokenBase,\n        scope: {offset:basecolumn || 0, type:\"coffee\", prev: null, align: false},\n        prop: false,\n        dedent: 0\n      };\n    },\n\n    token: function(stream, state) {\n      var fillAlign = state.scope.align === null && state.scope;\n      if (fillAlign && stream.sol()) fillAlign.align = false;\n\n      var style = tokenLexer(stream, state);\n      if (style && style != \"comment\") {\n        if (fillAlign) fillAlign.align = true;\n        state.prop = style == \"punctuation\" && stream.current() == \".\"\n      }\n\n      return style;\n    },\n\n    indent: function(state, text) {\n      if (state.tokenize != tokenBase) return 0;\n      var scope = state.scope;\n      var closer = text && \"])}\".indexOf(text.charAt(0)) > -1;\n      if (closer) while (scope.type == \"coffee\" && scope.prev) scope = scope.prev;\n      var closes = closer && scope.type === text.charAt(0);\n      if (scope.align)\n        return scope.alignOffset - (closes ? 1 : 0);\n      else\n        return (closes ? scope.prev : scope).offset;\n    },\n\n    lineComment: \"#\",\n    fold: \"indent\"\n  };\n  return external;\n});\n\n// IANA registered media type\n// https://www.iana.org/assignments/media-types/\nCodeMirror.defineMIME(\"application/vnd.coffeescript\", \"coffeescript\");\n\nCodeMirror.defineMIME(\"text/x-coffeescript\", \"coffeescript\");\nCodeMirror.defineMIME(\"text/coffeescript\", \"coffeescript\");\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"))\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod)\n  else // Plain browser env\n    mod(CodeMirror)\n})(function(CodeMirror) {\n  \"use strict\"\n  var Pos = CodeMirror.Pos\n\n  function regexpFlags(regexp) {\n    var flags = regexp.flags\n    return flags != null ? flags : (regexp.ignoreCase ? \"i\" : \"\")\n      + (regexp.global ? \"g\" : \"\")\n      + (regexp.multiline ? \"m\" : \"\")\n  }\n\n  function ensureFlags(regexp, flags) {\n    var current = regexpFlags(regexp), target = current\n    for (var i = 0; i < flags.length; i++) if (target.indexOf(flags.charAt(i)) == -1)\n      target += flags.charAt(i)\n    return current == target ? regexp : new RegExp(regexp.source, target)\n  }\n\n  function maybeMultiline(regexp) {\n    return /\\\\s|\\\\n|\\n|\\\\W|\\\\D|\\[\\^/.test(regexp.source)\n  }\n\n  function searchRegexpForward(doc, regexp, start) {\n    regexp = ensureFlags(regexp, \"g\")\n    for (var line = start.line, ch = start.ch, last = doc.lastLine(); line <= last; line++, ch = 0) {\n      regexp.lastIndex = ch\n      var string = doc.getLine(line), match = regexp.exec(string)\n      if (match)\n        return {from: Pos(line, match.index),\n                to: Pos(line, match.index + match[0].length),\n                match: match}\n    }\n  }\n\n  function searchRegexpForwardMultiline(doc, regexp, start) {\n    if (!maybeMultiline(regexp)) return searchRegexpForward(doc, regexp, start)\n\n    regexp = ensureFlags(regexp, \"gm\")\n    var string, chunk = 1\n    for (var line = start.line, last = doc.lastLine(); line <= last;) {\n      // This grows the search buffer in exponentially-sized chunks\n      // between matches, so that nearby matches are fast and don't\n      // require concatenating the whole document (in case we're\n      // searching for something that has tons of matches), but at the\n      // same time, the amount of retries is limited.\n      for (var i = 0; i < chunk; i++) {\n        if (line > last) break\n        var curLine = doc.getLine(line++)\n        string = string == null ? curLine : string + \"\\n\" + curLine\n      }\n      chunk = chunk * 2\n      regexp.lastIndex = start.ch\n      var match = regexp.exec(string)\n      if (match) {\n        var before = string.slice(0, match.index).split(\"\\n\"), inside = match[0].split(\"\\n\")\n        var startLine = start.line + before.length - 1, startCh = before[before.length - 1].length\n        return {from: Pos(startLine, startCh),\n                to: Pos(startLine + inside.length - 1,\n                        inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n                match: match}\n      }\n    }\n  }\n\n  function lastMatchIn(string, regexp, endMargin) {\n    var match, from = 0\n    while (from <= string.length) {\n      regexp.lastIndex = from\n      var newMatch = regexp.exec(string)\n      if (!newMatch) break\n      var end = newMatch.index + newMatch[0].length\n      if (end > string.length - endMargin) break\n      if (!match || end > match.index + match[0].length)\n        match = newMatch\n      from = newMatch.index + 1\n    }\n    return match\n  }\n\n  function searchRegexpBackward(doc, regexp, start) {\n    regexp = ensureFlags(regexp, \"g\")\n    for (var line = start.line, ch = start.ch, first = doc.firstLine(); line >= first; line--, ch = -1) {\n      var string = doc.getLine(line)\n      var match = lastMatchIn(string, regexp, ch < 0 ? 0 : string.length - ch)\n      if (match)\n        return {from: Pos(line, match.index),\n                to: Pos(line, match.index + match[0].length),\n                match: match}\n    }\n  }\n\n  function searchRegexpBackwardMultiline(doc, regexp, start) {\n    if (!maybeMultiline(regexp)) return searchRegexpBackward(doc, regexp, start)\n    regexp = ensureFlags(regexp, \"gm\")\n    var string, chunkSize = 1, endMargin = doc.getLine(start.line).length - start.ch\n    for (var line = start.line, first = doc.firstLine(); line >= first;) {\n      for (var i = 0; i < chunkSize && line >= first; i++) {\n        var curLine = doc.getLine(line--)\n        string = string == null ? curLine : curLine + \"\\n\" + string\n      }\n      chunkSize *= 2\n\n      var match = lastMatchIn(string, regexp, endMargin)\n      if (match) {\n        var before = string.slice(0, match.index).split(\"\\n\"), inside = match[0].split(\"\\n\")\n        var startLine = line + before.length, startCh = before[before.length - 1].length\n        return {from: Pos(startLine, startCh),\n                to: Pos(startLine + inside.length - 1,\n                        inside.length == 1 ? startCh + inside[0].length : inside[inside.length - 1].length),\n                match: match}\n      }\n    }\n  }\n\n  var doFold, noFold\n  if (String.prototype.normalize) {\n    doFold = function(str) { return str.normalize(\"NFD\").toLowerCase() }\n    noFold = function(str) { return str.normalize(\"NFD\") }\n  } else {\n    doFold = function(str) { return str.toLowerCase() }\n    noFold = function(str) { return str }\n  }\n\n  // Maps a position in a case-folded line back to a position in the original line\n  // (compensating for codepoints increasing in number during folding)\n  function adjustPos(orig, folded, pos, foldFunc) {\n    if (orig.length == folded.length) return pos\n    for (var min = 0, max = pos + Math.max(0, orig.length - folded.length);;) {\n      if (min == max) return min\n      var mid = (min + max) >> 1\n      var len = foldFunc(orig.slice(0, mid)).length\n      if (len == pos) return mid\n      else if (len > pos) max = mid\n      else min = mid + 1\n    }\n  }\n\n  function searchStringForward(doc, query, start, caseFold) {\n    // Empty string would match anything and never progress, so we\n    // define it to match nothing instead.\n    if (!query.length) return null\n    var fold = caseFold ? doFold : noFold\n    var lines = fold(query).split(/\\r|\\n\\r?/)\n\n    search: for (var line = start.line, ch = start.ch, last = doc.lastLine() + 1 - lines.length; line <= last; line++, ch = 0) {\n      var orig = doc.getLine(line).slice(ch), string = fold(orig)\n      if (lines.length == 1) {\n        var found = string.indexOf(lines[0])\n        if (found == -1) continue search\n        var start = adjustPos(orig, string, found, fold) + ch\n        return {from: Pos(line, adjustPos(orig, string, found, fold) + ch),\n                to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold) + ch)}\n      } else {\n        var cutFrom = string.length - lines[0].length\n        if (string.slice(cutFrom) != lines[0]) continue search\n        for (var i = 1; i < lines.length - 1; i++)\n          if (fold(doc.getLine(line + i)) != lines[i]) continue search\n        var end = doc.getLine(line + lines.length - 1), endString = fold(end), lastLine = lines[lines.length - 1]\n        if (endString.slice(0, lastLine.length) != lastLine) continue search\n        return {from: Pos(line, adjustPos(orig, string, cutFrom, fold) + ch),\n                to: Pos(line + lines.length - 1, adjustPos(end, endString, lastLine.length, fold))}\n      }\n    }\n  }\n\n  function searchStringBackward(doc, query, start, caseFold) {\n    if (!query.length) return null\n    var fold = caseFold ? doFold : noFold\n    var lines = fold(query).split(/\\r|\\n\\r?/)\n\n    search: for (var line = start.line, ch = start.ch, first = doc.firstLine() - 1 + lines.length; line >= first; line--, ch = -1) {\n      var orig = doc.getLine(line)\n      if (ch > -1) orig = orig.slice(0, ch)\n      var string = fold(orig)\n      if (lines.length == 1) {\n        var found = string.lastIndexOf(lines[0])\n        if (found == -1) continue search\n        return {from: Pos(line, adjustPos(orig, string, found, fold)),\n                to: Pos(line, adjustPos(orig, string, found + lines[0].length, fold))}\n      } else {\n        var lastLine = lines[lines.length - 1]\n        if (string.slice(0, lastLine.length) != lastLine) continue search\n        for (var i = 1, start = line - lines.length + 1; i < lines.length - 1; i++)\n          if (fold(doc.getLine(start + i)) != lines[i]) continue search\n        var top = doc.getLine(line + 1 - lines.length), topString = fold(top)\n        if (topString.slice(topString.length - lines[0].length) != lines[0]) continue search\n        return {from: Pos(line + 1 - lines.length, adjustPos(top, topString, top.length - lines[0].length, fold)),\n                to: Pos(line, adjustPos(orig, string, lastLine.length, fold))}\n      }\n    }\n  }\n\n  function SearchCursor(doc, query, pos, options) {\n    this.atOccurrence = false\n    this.doc = doc\n    pos = pos ? doc.clipPos(pos) : Pos(0, 0)\n    this.pos = {from: pos, to: pos}\n\n    var caseFold\n    if (typeof options == \"object\") {\n      caseFold = options.caseFold\n    } else { // Backwards compat for when caseFold was the 4th argument\n      caseFold = options\n      options = null\n    }\n\n    if (typeof query == \"string\") {\n      if (caseFold == null) caseFold = false\n      this.matches = function(reverse, pos) {\n        return (reverse ? searchStringBackward : searchStringForward)(doc, query, pos, caseFold)\n      }\n    } else {\n      query = ensureFlags(query, \"gm\")\n      if (!options || options.multiline !== false)\n        this.matches = function(reverse, pos) {\n          return (reverse ? searchRegexpBackwardMultiline : searchRegexpForwardMultiline)(doc, query, pos)\n        }\n      else\n        this.matches = function(reverse, pos) {\n          return (reverse ? searchRegexpBackward : searchRegexpForward)(doc, query, pos)\n        }\n    }\n  }\n\n  SearchCursor.prototype = {\n    findNext: function() {return this.find(false)},\n    findPrevious: function() {return this.find(true)},\n\n    find: function(reverse) {\n      var result = this.matches(reverse, this.doc.clipPos(reverse ? this.pos.from : this.pos.to))\n\n      // Implements weird auto-growing behavior on null-matches for\n      // backwards-compatiblity with the vim code (unfortunately)\n      while (result && CodeMirror.cmpPos(result.from, result.to) == 0) {\n        if (reverse) {\n          if (result.from.ch) result.from = Pos(result.from.line, result.from.ch - 1)\n          else if (result.from.line == this.doc.firstLine()) result = null\n          else result = this.matches(reverse, this.doc.clipPos(Pos(result.from.line - 1)))\n        } else {\n          if (result.to.ch < this.doc.getLine(result.to.line).length) result.to = Pos(result.to.line, result.to.ch + 1)\n          else if (result.to.line == this.doc.lastLine()) result = null\n          else result = this.matches(reverse, Pos(result.to.line + 1, 0))\n        }\n      }\n\n      if (result) {\n        this.pos = result\n        this.atOccurrence = true\n        return this.pos.match || true\n      } else {\n        var end = Pos(reverse ? this.doc.firstLine() : this.doc.lastLine() + 1, 0)\n        this.pos = {from: end, to: end}\n        return this.atOccurrence = false\n      }\n    },\n\n    from: function() {if (this.atOccurrence) return this.pos.from},\n    to: function() {if (this.atOccurrence) return this.pos.to},\n\n    replace: function(newText, origin) {\n      if (!this.atOccurrence) return\n      var lines = CodeMirror.splitLines(newText)\n      this.doc.replaceRange(lines, this.pos.from, this.pos.to, origin)\n      this.pos.to = Pos(this.pos.from.line + lines.length - 1,\n                        lines[lines.length - 1].length + (lines.length == 1 ? this.pos.from.ch : 0))\n    }\n  }\n\n  CodeMirror.defineExtension(\"getSearchCursor\", function(query, pos, caseFold) {\n    return new SearchCursor(this.doc, query, pos, caseFold)\n  })\n  CodeMirror.defineDocExtension(\"getSearchCursor\", function(query, pos, caseFold) {\n    return new SearchCursor(this, query, pos, caseFold)\n  })\n\n  CodeMirror.defineExtension(\"selectMatches\", function(query, caseFold) {\n    var ranges = []\n    var cur = this.getSearchCursor(query, this.getCursor(\"from\"), caseFold)\n    while (cur.findNext()) {\n      if (CodeMirror.cmpPos(cur.to(), this.getCursor(\"to\")) > 0) break\n      ranges.push({anchor: cur.from(), head: cur.to()})\n    }\n    if (ranges.length)\n      this.setSelections(ranges, 0)\n  })\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n  autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n                    'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n                    'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n                    'track': true, 'wbr': true, 'menuitem': true},\n  implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n                     'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n                     'th': true, 'tr': true},\n  contextGrabbers: {\n    'dd': {'dd': true, 'dt': true},\n    'dt': {'dd': true, 'dt': true},\n    'li': {'li': true},\n    'option': {'option': true, 'optgroup': true},\n    'optgroup': {'optgroup': true},\n    'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n          'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n          'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n          'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n          'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n    'rp': {'rp': true, 'rt': true},\n    'rt': {'rp': true, 'rt': true},\n    'tbody': {'tbody': true, 'tfoot': true},\n    'td': {'td': true, 'th': true},\n    'tfoot': {'tbody': true},\n    'th': {'td': true, 'th': true},\n    'thead': {'tbody': true, 'tfoot': true},\n    'tr': {'tr': true}\n  },\n  doNotIndent: {\"pre\": true},\n  allowUnquoted: true,\n  allowMissing: true,\n  caseFold: true\n}\n\nvar xmlConfig = {\n  autoSelfClosers: {},\n  implicitlyClosed: {},\n  contextGrabbers: {},\n  doNotIndent: {},\n  allowUnquoted: false,\n  allowMissing: false,\n  allowMissingTagName: false,\n  caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n  var indentUnit = editorConf.indentUnit\n  var config = {}\n  var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n  for (var prop in defaults) config[prop] = defaults[prop]\n  for (var prop in config_) config[prop] = config_[prop]\n\n  // Return variables for tokenizers\n  var type, setStyle;\n\n  function inText(stream, state) {\n    function chain(parser) {\n      state.tokenize = parser;\n      return parser(stream, state);\n    }\n\n    var ch = stream.next();\n    if (ch == \"<\") {\n      if (stream.eat(\"!\")) {\n        if (stream.eat(\"[\")) {\n          if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n          else return null;\n        } else if (stream.match(\"--\")) {\n          return chain(inBlock(\"comment\", \"-->\"));\n        } else if (stream.match(\"DOCTYPE\", true, true)) {\n          stream.eatWhile(/[\\w\\._\\-]/);\n          return chain(doctype(1));\n        } else {\n          return null;\n        }\n      } else if (stream.eat(\"?\")) {\n        stream.eatWhile(/[\\w\\._\\-]/);\n        state.tokenize = inBlock(\"meta\", \"?>\");\n        return \"meta\";\n      } else {\n        type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n        state.tokenize = inTag;\n        return \"tag bracket\";\n      }\n    } else if (ch == \"&\") {\n      var ok;\n      if (stream.eat(\"#\")) {\n        if (stream.eat(\"x\")) {\n          ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n        } else {\n          ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n        }\n      } else {\n        ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n      }\n      return ok ? \"atom\" : \"error\";\n    } else {\n      stream.eatWhile(/[^&<]/);\n      return null;\n    }\n  }\n  inText.isInText = true;\n\n  function inTag(stream, state) {\n    var ch = stream.next();\n    if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n      state.tokenize = inText;\n      type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n      return \"tag bracket\";\n    } else if (ch == \"=\") {\n      type = \"equals\";\n      return null;\n    } else if (ch == \"<\") {\n      state.tokenize = inText;\n      state.state = baseState;\n      state.tagName = state.tagStart = null;\n      var next = state.tokenize(stream, state);\n      return next ? next + \" tag error\" : \"tag error\";\n    } else if (/[\\'\\\"]/.test(ch)) {\n      state.tokenize = inAttribute(ch);\n      state.stringStartCol = stream.column();\n      return state.tokenize(stream, state);\n    } else {\n      stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n      return \"word\";\n    }\n  }\n\n  function inAttribute(quote) {\n    var closure = function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.next() == quote) {\n          state.tokenize = inTag;\n          break;\n        }\n      }\n      return \"string\";\n    };\n    closure.isInAttribute = true;\n    return closure;\n  }\n\n  function inBlock(style, terminator) {\n    return function(stream, state) {\n      while (!stream.eol()) {\n        if (stream.match(terminator)) {\n          state.tokenize = inText;\n          break;\n        }\n        stream.next();\n      }\n      return style;\n    }\n  }\n\n  function doctype(depth) {\n    return function(stream, state) {\n      var ch;\n      while ((ch = stream.next()) != null) {\n        if (ch == \"<\") {\n          state.tokenize = doctype(depth + 1);\n          return state.tokenize(stream, state);\n        } else if (ch == \">\") {\n          if (depth == 1) {\n            state.tokenize = inText;\n            break;\n          } else {\n            state.tokenize = doctype(depth - 1);\n            return state.tokenize(stream, state);\n          }\n        }\n      }\n      return \"meta\";\n    };\n  }\n\n  function Context(state, tagName, startOfLine) {\n    this.prev = state.context;\n    this.tagName = tagName;\n    this.indent = state.indented;\n    this.startOfLine = startOfLine;\n    if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n      this.noIndent = true;\n  }\n  function popContext(state) {\n    if (state.context) state.context = state.context.prev;\n  }\n  function maybePopContext(state, nextTagName) {\n    var parentTagName;\n    while (true) {\n      if (!state.context) {\n        return;\n      }\n      parentTagName = state.context.tagName;\n      if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||\n          !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n        return;\n      }\n      popContext(state);\n    }\n  }\n\n  function baseState(type, stream, state) {\n    if (type == \"openTag\") {\n      state.tagStart = stream.column();\n      return tagNameState;\n    } else if (type == \"closeTag\") {\n      return closeTagNameState;\n    } else {\n      return baseState;\n    }\n  }\n  function tagNameState(type, stream, state) {\n    if (type == \"word\") {\n      state.tagName = stream.current();\n      setStyle = \"tag\";\n      return attrState;\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return attrState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return tagNameState;\n    }\n  }\n  function closeTagNameState(type, stream, state) {\n    if (type == \"word\") {\n      var tagName = stream.current();\n      if (state.context && state.context.tagName != tagName &&\n          config.implicitlyClosed.hasOwnProperty(state.context.tagName))\n        popContext(state);\n      if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n        setStyle = \"tag\";\n        return closeState;\n      } else {\n        setStyle = \"tag error\";\n        return closeStateErr;\n      }\n    } else if (config.allowMissingTagName && type == \"endTag\") {\n      setStyle = \"tag bracket\";\n      return closeState(type, stream, state);\n    } else {\n      setStyle = \"error\";\n      return closeStateErr;\n    }\n  }\n\n  function closeState(type, _stream, state) {\n    if (type != \"endTag\") {\n      setStyle = \"error\";\n      return closeState;\n    }\n    popContext(state);\n    return baseState;\n  }\n  function closeStateErr(type, stream, state) {\n    setStyle = \"error\";\n    return closeState(type, stream, state);\n  }\n\n  function attrState(type, _stream, state) {\n    if (type == \"word\") {\n      setStyle = \"attribute\";\n      return attrEqState;\n    } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n      var tagName = state.tagName, tagStart = state.tagStart;\n      state.tagName = state.tagStart = null;\n      if (type == \"selfcloseTag\" ||\n          config.autoSelfClosers.hasOwnProperty(tagName)) {\n        maybePopContext(state, tagName);\n      } else {\n        maybePopContext(state, tagName);\n        state.context = new Context(state, tagName, tagStart == state.indented);\n      }\n      return baseState;\n    }\n    setStyle = \"error\";\n    return attrState;\n  }\n  function attrEqState(type, stream, state) {\n    if (type == \"equals\") return attrValueState;\n    if (!config.allowMissing) setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrValueState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n    setStyle = \"error\";\n    return attrState(type, stream, state);\n  }\n  function attrContinuedState(type, stream, state) {\n    if (type == \"string\") return attrContinuedState;\n    return attrState(type, stream, state);\n  }\n\n  return {\n    startState: function(baseIndent) {\n      var state = {tokenize: inText,\n                   state: baseState,\n                   indented: baseIndent || 0,\n                   tagName: null, tagStart: null,\n                   context: null}\n      if (baseIndent != null) state.baseIndent = baseIndent\n      return state\n    },\n\n    token: function(stream, state) {\n      if (!state.tagName && stream.sol())\n        state.indented = stream.indentation();\n\n      if (stream.eatSpace()) return null;\n      type = null;\n      var style = state.tokenize(stream, state);\n      if ((style || type) && style != \"comment\") {\n        setStyle = null;\n        state.state = state.state(type || style, stream, state);\n        if (setStyle)\n          style = setStyle == \"error\" ? style + \" error\" : setStyle;\n      }\n      return style;\n    },\n\n    indent: function(state, textAfter, fullLine) {\n      var context = state.context;\n      // Indent multi-line strings (e.g. css).\n      if (state.tokenize.isInAttribute) {\n        if (state.tagStart == state.indented)\n          return state.stringStartCol + 1;\n        else\n          return state.indented + indentUnit;\n      }\n      if (context && context.noIndent) return CodeMirror.Pass;\n      if (state.tokenize != inTag && state.tokenize != inText)\n        return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n      // Indent the starts of attribute names.\n      if (state.tagName) {\n        if (config.multilineTagIndentPastTag !== false)\n          return state.tagStart + state.tagName.length + 2;\n        else\n          return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n      }\n      if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n      var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n      if (tagAfter && tagAfter[1]) { // Closing tag spotted\n        while (context) {\n          if (context.tagName == tagAfter[2]) {\n            context = context.prev;\n            break;\n          } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {\n            context = context.prev;\n          } else {\n            break;\n          }\n        }\n      } else if (tagAfter) { // Opening tag spotted\n        while (context) {\n          var grabbers = config.contextGrabbers[context.tagName];\n          if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))\n            context = context.prev;\n          else\n            break;\n        }\n      }\n      while (context && context.prev && !context.startOfLine)\n        context = context.prev;\n      if (context) return context.indent + indentUnit;\n      else return state.baseIndent || 0;\n    },\n\n    electricInput: /<\\/[\\s\\w:]+>$/,\n    blockCommentStart: \"<!--\",\n    blockCommentEnd: \"-->\",\n\n    configuration: config.htmlMode ? \"html\" : \"xml\",\n    helperType: config.htmlMode ? \"html\" : \"xml\",\n\n    skipAttribute: function(state) {\n      if (state.state == attrValueState)\n        state.state = attrState\n    },\n\n    xmlCurrentTag: function(state) {\n      return state.tagName ? {name: state.tagName, close: state.type == \"closeTag\"} : null\n    },\n\n    xmlCurrentContext: function(state) {\n      var context = []\n      for (var cx = state.context; cx; cx = cx.prev)\n        if (cx.tagName) context.push(cx.tagName)\n      return context.reverse()\n    }\n  };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n  CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../javascript/javascript\"), require(\"../css/css\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../xml/xml\", \"../javascript/javascript\", \"../css/css\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var defaultTags = {\n    script: [\n      [\"lang\", /(javascript|babel)/i, \"javascript\"],\n      [\"type\", /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, \"javascript\"],\n      [\"type\", /./, \"text/plain\"],\n      [null, null, \"javascript\"]\n    ],\n    style:  [\n      [\"lang\", /^css$/i, \"css\"],\n      [\"type\", /^(text\\/)?(x-)?(stylesheet|css)$/i, \"css\"],\n      [\"type\", /./, \"text/plain\"],\n      [null, null, \"css\"]\n    ]\n  };\n\n  function maybeBackup(stream, pat, style) {\n    var cur = stream.current(), close = cur.search(pat);\n    if (close > -1) {\n      stream.backUp(cur.length - close);\n    } else if (cur.match(/<\\/?$/)) {\n      stream.backUp(cur.length);\n      if (!stream.match(pat, false)) stream.match(cur);\n    }\n    return style;\n  }\n\n  var attrRegexpCache = {};\n  function getAttrRegexp(attr) {\n    var regexp = attrRegexpCache[attr];\n    if (regexp) return regexp;\n    return attrRegexpCache[attr] = new RegExp(\"\\\\s+\" + attr + \"\\\\s*=\\\\s*('|\\\")?([^'\\\"]+)('|\\\")?\\\\s*\");\n  }\n\n  function getAttrValue(text, attr) {\n    var match = text.match(getAttrRegexp(attr))\n    return match ? /^\\s*(.*?)\\s*$/.exec(match[2])[1] : \"\"\n  }\n\n  function getTagRegexp(tagName, anchored) {\n    return new RegExp((anchored ? \"^\" : \"\") + \"<\\/\\s*\" + tagName + \"\\s*>\", \"i\");\n  }\n\n  function addTags(from, to) {\n    for (var tag in from) {\n      var dest = to[tag] || (to[tag] = []);\n      var source = from[tag];\n      for (var i = source.length - 1; i >= 0; i--)\n        dest.unshift(source[i])\n    }\n  }\n\n  function findMatchingMode(tagInfo, tagText) {\n    for (var i = 0; i < tagInfo.length; i++) {\n      var spec = tagInfo[i];\n      if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2];\n    }\n  }\n\n  CodeMirror.defineMode(\"htmlmixed\", function (config, parserConfig) {\n    var htmlMode = CodeMirror.getMode(config, {\n      name: \"xml\",\n      htmlMode: true,\n      multilineTagIndentFactor: parserConfig.multilineTagIndentFactor,\n      multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag\n    });\n\n    var tags = {};\n    var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes;\n    addTags(defaultTags, tags);\n    if (configTags) addTags(configTags, tags);\n    if (configScript) for (var i = configScript.length - 1; i >= 0; i--)\n      tags.script.unshift([\"type\", configScript[i].matches, configScript[i].mode])\n\n    function html(stream, state) {\n      var style = htmlMode.token(stream, state.htmlState), tag = /\\btag\\b/.test(style), tagName\n      if (tag && !/[<>\\s\\/]/.test(stream.current()) &&\n          (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) &&\n          tags.hasOwnProperty(tagName)) {\n        state.inTag = tagName + \" \"\n      } else if (state.inTag && tag && />$/.test(stream.current())) {\n        var inTag = /^([\\S]+) (.*)/.exec(state.inTag)\n        state.inTag = null\n        var modeSpec = stream.current() == \">\" && findMatchingMode(tags[inTag[1]], inTag[2])\n        var mode = CodeMirror.getMode(config, modeSpec)\n        var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false);\n        state.token = function (stream, state) {\n          if (stream.match(endTagA, false)) {\n            state.token = html;\n            state.localState = state.localMode = null;\n            return null;\n          }\n          return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState));\n        };\n        state.localMode = mode;\n        state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, \"\", \"\"));\n      } else if (state.inTag) {\n        state.inTag += stream.current()\n        if (stream.eol()) state.inTag += \" \"\n      }\n      return style;\n    };\n\n    return {\n      startState: function () {\n        var state = CodeMirror.startState(htmlMode);\n        return {token: html, inTag: null, localMode: null, localState: null, htmlState: state};\n      },\n\n      copyState: function (state) {\n        var local;\n        if (state.localState) {\n          local = CodeMirror.copyState(state.localMode, state.localState);\n        }\n        return {token: state.token, inTag: state.inTag,\n                localMode: state.localMode, localState: local,\n                htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};\n      },\n\n      token: function (stream, state) {\n        return state.token(stream, state);\n      },\n\n      indent: function (state, textAfter, line) {\n        if (!state.localMode || /^\\s*<\\//.test(textAfter))\n          return htmlMode.indent(state.htmlState, textAfter, line);\n        else if (state.localMode.indent)\n          return state.localMode.indent(state.localState, textAfter, line);\n        else\n          return CodeMirror.Pass;\n      },\n\n      innerMode: function (state) {\n        return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode};\n      }\n    };\n  }, \"xml\", \"javascript\", \"css\");\n\n  CodeMirror.defineMIME(\"text/html\", \"htmlmixed\");\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"interface-code codemirror-custom-styles\"},[_c('codemirror',{ref:\"codemirrorEl\",attrs:{\"options\":_vm.altOptions ? _vm.altOptions : _vm.cmOptions,\"value\":_vm.stringValue},on:{\"input\":_vm.onInput}}),(_vm.options.template)?_c('button',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.$t('interfaces.code.fill_template')),expression:\"$t('interfaces.code.fill_template')\"}],on:{\"click\":_vm.fillTemplate}},[_c('v-icon',{attrs:{\"name\":\"playlist_add\"}})],1):_vm._e(),(_vm.language)?_c('small',{staticClass:\"line-count type-note\"},[_vm._v(\" \"+_vm._s(_vm.$tc('interfaces.code.loc', _vm.lineCount, { count: _vm.lineCount, lang: _vm.language }))+\" \")]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n\t<div class=\"interface-code codemirror-custom-styles\">\n\t\t<codemirror\n\t\t\tref=\"codemirrorEl\"\n\t\t\t:options=\"altOptions ? altOptions : cmOptions\"\n\t\t\t:value=\"stringValue\"\n\t\t\t@input=\"onInput\"\n\t\t></codemirror>\n\n\t\t<button\n\t\t\tv-if=\"options.template\"\n\t\t\tv-tooltip=\"$t('interfaces.code.fill_template')\"\n\t\t\t@click=\"fillTemplate\"\n\t\t>\n\t\t\t<v-icon name=\"playlist_add\" />\n\t\t</button>\n\n\t\t<small v-if=\"language\" class=\"line-count type-note\">\n\t\t\t{{\n\t\t\t\t$tc('interfaces.code.loc', lineCount, {\n\t\t\t\t\tcount: lineCount,\n\t\t\t\t\tlang: language\n\t\t\t\t})\n\t\t\t}}\n\t\t</small>\n\t</div>\n</template>\n\n<script>\nimport { codemirror } from 'vue-codemirror';\n\nimport 'codemirror/lib/codemirror.css';\n\nimport 'codemirror/mode/vue/vue.js';\nimport 'codemirror/mode/javascript/javascript.js';\nimport 'codemirror/mode/php/php.js';\n\nimport 'codemirror/addon/selection/active-line.js';\nimport 'codemirror/addon/selection/mark-selection.js';\nimport 'codemirror/addon/search/searchcursor.js';\nimport 'codemirror/addon/hint/show-hint.js';\nimport 'codemirror/addon/hint/show-hint.css';\nimport 'codemirror/addon/hint/javascript-hint.js';\nimport 'codemirror/addon/selection/active-line.js';\nimport 'codemirror/addon/scroll/annotatescrollbar.js';\nimport 'codemirror/addon/search/matchesonscrollbar.js';\nimport 'codemirror/addon/search/searchcursor.js';\nimport 'codemirror/addon/search/match-highlighter.js';\nimport 'codemirror/addon/edit/matchbrackets.js';\nimport 'codemirror/addon/comment/comment.js';\nimport 'codemirror/addon/dialog/dialog.js';\nimport 'codemirror/addon/dialog/dialog.css';\nimport 'codemirror/addon/search/searchcursor.js';\nimport 'codemirror/addon/search/search.js';\n\nimport 'codemirror/addon/display/autorefresh.js';\n\nimport 'codemirror/keymap/sublime.js';\n\nimport mixin from '@directus/extension-toolkit/mixins/interface';\n\nimport { isObject, isArray } from 'lodash';\n\nexport default {\n\tname: 'InterfaceCode',\n\tcomponents: {\n\t\tcodemirror\n\t},\n\tmixins: [mixin],\n\tprops: {\n\t\taltOptions: {\n\t\t\ttype: Object\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tlineCount: 0,\n\n\t\t\tdefaultOptions: {\n\t\t\t\ttabSize: 4,\n\t\t\t\tautoRefresh: true,\n\t\t\t\tindentUnit: 4,\n\t\t\t\tstyleActiveLine: true,\n\t\t\t\tstyleSelectedText: true,\n\t\t\t\tline: true,\n\t\t\t\thighlightSelectionMatches: { showToken: /\\w/, annotateScrollbar: true },\n\t\t\t\thintOptions: {\n\t\t\t\t\tcompleteSingle: true\n\t\t\t\t},\n\t\t\t\tmatchBrackets: true,\n\t\t\t\tshowCursorWhenSelecting: true,\n\t\t\t\ttheme: 'default',\n\t\t\t\textraKeys: { Ctrl: 'autocomplete' }\n\t\t\t}\n\t\t};\n\t},\n\tcomputed: {\n\t\tavailableTypes() {\n\t\t\treturn {\n\t\t\t\t'text/plain': 'Plain Text',\n\t\t\t\t'text/javascript': 'JavaScript',\n\t\t\t\t'application/json': 'JSON',\n\t\t\t\t'text/x-vue': 'Vue',\n\t\t\t\t'application/x-httpd-php': 'PHP'\n\t\t\t};\n\t\t},\n\t\tlanguage() {\n\t\t\treturn this.availableTypes[this.options.language];\n\t\t},\n\t\tstringValue() {\n\t\t\tif (this.value == null) return null;\n\n\t\t\tif (typeof this.value === 'object') {\n\t\t\t\treturn JSON.stringify(this.value, null, 4);\n\t\t\t}\n\n\t\t\treturn this.value;\n\t\t},\n\t\tmode() {\n\t\t\t// There is no dedicated mode for JSON in codemirror. Switch to JS mode when JSON is selected\n\t\t\treturn this.options.language === 'application/json'\n\t\t\t\t? 'text/javascript'\n\t\t\t\t: this.options.language;\n\t\t},\n\t\tcmOptions() {\n\t\t\treturn Object.assign({}, this.defaultOptions, {\n\t\t\t\tlineNumbers: this.options.lineNumber,\n\t\t\t\treadOnly: this.readonly ? 'nocursor' : false,\n\t\t\t\tmode: this.mode\n\t\t\t});\n\t\t}\n\t},\n\tmounted() {\n\t\tconst { codemirror } = this.$refs.codemirrorEl;\n\t\tthis.lineCount = codemirror.lineCount();\n\t},\n\tmethods: {\n\t\tonInput(value) {\n\t\t\tconst { codemirror } = this.$refs.codemirrorEl;\n\n\t\t\tif (this.lineCount !== codemirror.lineCount()) {\n\t\t\t\tthis.lineCount = codemirror.lineCount();\n\t\t\t}\n\n\t\t\tif (this.options.language === 'application/json') {\n\t\t\t\ttry {\n\t\t\t\t\tthis.$emit('input', JSON.parse(value));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// silently ignore saving value if it's not valid json\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.$emit('input', value);\n\t\t\t}\n\t\t},\n\t\tfillTemplate() {\n\t\t\tif (isObject(this.options.template) || isArray(this.options.template)) {\n\t\t\t\treturn this.$emit('input', JSON.stringify(this.options.template, null, 4));\n\t\t\t}\n\n\t\t\tif (this.options.language === 'application/json') {\n\t\t\t\ttry {\n\t\t\t\t\tthis.$emit('input', JSON.parse(this.options.template));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// silently ignore saving value if it's not valid json\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.$emit('input', this.options.template);\n\t\t\t}\n\t\t}\n\t}\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.interface-code {\n\tposition: relative;\n\twidth: 100%;\n\tmax-width: var(--width-x-large);\n\t// border: var(--input-border-width) solid var(--input-border-color);\n\t// border-radius: var(--border-radius);\n\tfont-size: var(--input-font-size);\n\n\t&:focus {\n\t\tborder-color: var(--blue-grey-800);\n\t}\n}\n\nsmall {\n\tposition: absolute;\n\tright: 0;\n\tbottom: -20px;\n\tfont-style: italic;\n\ttext-align: right;\n}\n\nbutton {\n\tposition: absolute;\n\ttop: 10px;\n\tright: 10px;\n\tuser-select: none;\n\tcolor: var(--blue-grey-300);\n\tcursor: pointer;\n\ttransition: color var(--fast) var(--transition-out);\n\tz-index: 10;\n\n\t&:hover {\n\t\ttransition: none;\n\t\tcolor: var(--blue-grey-600);\n\t}\n}\n</style>\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./input.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./input.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./input.vue?vue&type=template&id=657450cc&scoped=true&\"\nimport script from \"./input.vue?vue&type=script&lang=js&\"\nexport * from \"./input.vue?vue&type=script&lang=js&\"\nimport style0 from \"./input.vue?vue&type=style&index=0&id=657450cc&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"657450cc\",\n  null\n  \n)\n\nexport default component.exports","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../../addon/mode/simple\"), require(\"../../addon/mode/multiplex\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../../addon/mode/simple\", \"../../addon/mode/multiplex\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineSimpleMode(\"handlebars-tags\", {\n    start: [\n      { regex: /\\{\\{\\{/, push: \"handlebars_raw\", token: \"tag\" },\n      { regex: /\\{\\{!--/, push: \"dash_comment\", token: \"comment\" },\n      { regex: /\\{\\{!/,   push: \"comment\", token: \"comment\" },\n      { regex: /\\{\\{/,    push: \"handlebars\", token: \"tag\" }\n    ],\n    handlebars_raw: [\n      { regex: /\\}\\}\\}/, pop: true, token: \"tag\" },\n    ],\n    handlebars: [\n      { regex: /\\}\\}/, pop: true, token: \"tag\" },\n\n      // Double and single quotes\n      { regex: /\"(?:[^\\\\\"]|\\\\.)*\"?/, token: \"string\" },\n      { regex: /'(?:[^\\\\']|\\\\.)*'?/, token: \"string\" },\n\n      // Handlebars keywords\n      { regex: />|[#\\/]([A-Za-z_]\\w*)/, token: \"keyword\" },\n      { regex: /(?:else|this)\\b/, token: \"keyword\" },\n\n      // Numeral\n      { regex: /\\d+/i, token: \"number\" },\n\n      // Atoms like = and .\n      { regex: /=|~|@|true|false/, token: \"atom\" },\n\n      // Paths\n      { regex: /(?:\\.\\.\\/)*(?:[A-Za-z_][\\w\\.]*)+/, token: \"variable-2\" }\n    ],\n    dash_comment: [\n      { regex: /--\\}\\}/, pop: true, token: \"comment\" },\n\n      // Commented code\n      { regex: /./, token: \"comment\"}\n    ],\n    comment: [\n      { regex: /\\}\\}/, pop: true, token: \"comment\" },\n      { regex: /./, token: \"comment\" }\n    ],\n    meta: {\n      blockCommentStart: \"{{--\",\n      blockCommentEnd: \"--}}\"\n    }\n  });\n\n  CodeMirror.defineMode(\"handlebars\", function(config, parserConfig) {\n    var handlebars = CodeMirror.getMode(config, \"handlebars-tags\");\n    if (!parserConfig || !parserConfig.base) return handlebars;\n    return CodeMirror.multiplexingMode(\n      CodeMirror.getMode(config, parserConfig.base),\n      {open: \"{{\", close: /\\}\\}\\}?/, mode: handlebars, parseDelimiters: true}\n    );\n  });\n\n  CodeMirror.defineMIME(\"text/x-handlebars-template\", \"handlebars\");\n});\n","// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.multiplexingMode = function(outer /*, others */) {\n  // Others should be {open, close, mode [, delimStyle] [, innerStyle]} objects\n  var others = Array.prototype.slice.call(arguments, 1);\n\n  function indexOf(string, pattern, from, returnEnd) {\n    if (typeof pattern == \"string\") {\n      var found = string.indexOf(pattern, from);\n      return returnEnd && found > -1 ? found + pattern.length : found;\n    }\n    var m = pattern.exec(from ? string.slice(from) : string);\n    return m ? m.index + from + (returnEnd ? m[0].length : 0) : -1;\n  }\n\n  return {\n    startState: function() {\n      return {\n        outer: CodeMirror.startState(outer),\n        innerActive: null,\n        inner: null\n      };\n    },\n\n    copyState: function(state) {\n      return {\n        outer: CodeMirror.copyState(outer, state.outer),\n        innerActive: state.innerActive,\n        inner: state.innerActive && CodeMirror.copyState(state.innerActive.mode, state.inner)\n      };\n    },\n\n    token: function(stream, state) {\n      if (!state.innerActive) {\n        var cutOff = Infinity, oldContent = stream.string;\n        for (var i = 0; i < others.length; ++i) {\n          var other = others[i];\n          var found = indexOf(oldContent, other.open, stream.pos);\n          if (found == stream.pos) {\n            if (!other.parseDelimiters) stream.match(other.open);\n            state.innerActive = other;\n\n            // Get the outer indent, making sure to handle CodeMirror.Pass\n            var outerIndent = 0;\n            if (outer.indent) {\n              var possibleOuterIndent = outer.indent(state.outer, \"\", \"\");\n              if (possibleOuterIndent !== CodeMirror.Pass) outerIndent = possibleOuterIndent;\n            }\n\n            state.inner = CodeMirror.startState(other.mode, outerIndent);\n            return other.delimStyle && (other.delimStyle + \" \" + other.delimStyle + \"-open\");\n          } else if (found != -1 && found < cutOff) {\n            cutOff = found;\n          }\n        }\n        if (cutOff != Infinity) stream.string = oldContent.slice(0, cutOff);\n        var outerToken = outer.token(stream, state.outer);\n        if (cutOff != Infinity) stream.string = oldContent;\n        return outerToken;\n      } else {\n        var curInner = state.innerActive, oldContent = stream.string;\n        if (!curInner.close && stream.sol()) {\n          state.innerActive = state.inner = null;\n          return this.token(stream, state);\n        }\n        var found = curInner.close ? indexOf(oldContent, curInner.close, stream.pos, curInner.parseDelimiters) : -1;\n        if (found == stream.pos && !curInner.parseDelimiters) {\n          stream.match(curInner.close);\n          state.innerActive = state.inner = null;\n          return curInner.delimStyle && (curInner.delimStyle + \" \" + curInner.delimStyle + \"-close\");\n        }\n        if (found > -1) stream.string = oldContent.slice(0, found);\n        var innerToken = curInner.mode.token(stream, state.inner);\n        if (found > -1) stream.string = oldContent;\n\n        if (found == stream.pos && curInner.parseDelimiters)\n          state.innerActive = state.inner = null;\n\n        if (curInner.innerStyle) {\n          if (innerToken) innerToken = innerToken + \" \" + curInner.innerStyle;\n          else innerToken = curInner.innerStyle;\n        }\n\n        return innerToken;\n      }\n    },\n\n    indent: function(state, textAfter, line) {\n      var mode = state.innerActive ? state.innerActive.mode : outer;\n      if (!mode.indent) return CodeMirror.Pass;\n      return mode.indent(state.innerActive ? state.inner : state.outer, textAfter, line);\n    },\n\n    blankLine: function(state) {\n      var mode = state.innerActive ? state.innerActive.mode : outer;\n      if (mode.blankLine) {\n        mode.blankLine(state.innerActive ? state.inner : state.outer);\n      }\n      if (!state.innerActive) {\n        for (var i = 0; i < others.length; ++i) {\n          var other = others[i];\n          if (other.open === \"\\n\") {\n            state.innerActive = other;\n            state.inner = CodeMirror.startState(other.mode, mode.indent ? mode.indent(state.outer, \"\", \"\") : 0);\n          }\n        }\n      } else if (state.innerActive.close === \"\\n\") {\n        state.innerActive = state.inner = null;\n      }\n    },\n\n    electricChars: outer.electricChars,\n\n    innerMode: function(state) {\n      return state.inner ? {state: state.inner, mode: state.innerActive.mode} : {state: state.outer, mode: outer};\n    }\n  };\n};\n\n});\n"],"sourceRoot":""}