[
  {
    "path": "JsBox/app.js",
    "content": "var express = require('express');\nvar path = require('path');\nvar favicon = require('serve-favicon');\nvar logger = require('morgan');\nvar cookieParser = require('cookie-parser');\nvar bodyParser = require('body-parser');\nvar cors = require('cors');\n\nvar index = require('./routes/index');\nvar users = require('./routes/users');\n\nvar app = express();\n\n// view engine setup\napp.set('views', path.join(__dirname, 'views'));\napp.set('view engine', 'jade');\n\n// uncomment after placing your favicon in /public\n//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));\napp.use(logger('dev'));\napp.use(bodyParser.json());\napp.use(bodyParser.urlencoded({ extended: false }));\napp.use(cookieParser());\napp.use(express.static(path.join(__dirname, 'public')));\napp.use(cors());\n\n//var corsOptions = {\n//  origin: 'http://example.com',\n//  optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204\n//}\n//\n//app.use('/', corsOptions, index);\n\napp.use('/api', index);\napp.use('/users', users);\n\n// catch 404 and forward to error handler\napp.use(function(req, res, next) {\n  var err = new Error('Not Found');\n  err.status = 404;\n  next(err);\n});\n\n// error handler\napp.use(function(err, req, res, next) {\n  // set locals, only providing error in development\n  res.locals.message = err.message;\n  res.locals.error = req.app.get('env') === 'development' ? err : {};\n\n  // render the error page\n  res.status(err.status || 500);\n  res.render('error');\n});\n\nmodule.exports = app;\n\n\n//https://github.com/expressjs/cors\n"
  },
  {
    "path": "JsBox/bin/www",
    "content": "#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar app = require('../app');\nvar debug = require('debug')('code-editor:server');\nvar http = require('http');\n\n/**\n * Get port from environment and store in Express.\n */\n\nvar port = normalizePort(process.env.PORT || '3005');\napp.set('port', port);\n\n/**\n * Create HTTP server.\n */\n\nvar server = http.createServer(app);\n\n/**\n * Listen on provided port, on all network interfaces.\n */\n\nserver.listen(port);\nserver.on('error', onError);\nserver.on('listening', onListening);\n\n/**\n * Normalize a port into a number, string, or false.\n */\n\nfunction normalizePort(val) {\n  var port = parseInt(val, 10);\n\n  if (isNaN(port)) {\n    // named pipe\n    return val;\n  }\n\n  if (port >= 0) {\n    // port number\n    return port;\n  }\n\n  return false;\n}\n\n/**\n * Event listener for HTTP server \"error\" event.\n */\n\nfunction onError(error) {\n  if (error.syscall !== 'listen') {\n    throw error;\n  }\n\n  var bind = typeof port === 'string'\n    ? 'Pipe ' + port\n    : 'Port ' + port;\n\n  // handle specific listen errors with friendly messages\n  switch (error.code) {\n    case 'EACCES':\n      console.error(bind + ' requires elevated privileges');\n      process.exit(1);\n      break;\n    case 'EADDRINUSE':\n      console.error(bind + ' is already in use');\n      process.exit(1);\n      break;\n    default:\n      throw error;\n  }\n}\n\n/**\n * Event listener for HTTP server \"listening\" event.\n */\n\nfunction onListening() {\n  var addr = server.address();\n  var bind = typeof addr === 'string'\n    ? 'pipe ' + addr\n    : 'port ' + addr.port;\n  debug('Listening on ' + bind);\n}\n"
  },
  {
    "path": "JsBox/file/code/javascript/online/11111111111",
    "content": "function test (a) {\n  var sss = a\n  console.log(sss)\n}\nconsole.log('ssss')"
  },
  {
    "path": "JsBox/file/code/javascript/online/11111111111111111",
    "content": "function test (a) {\n  var sss = a\n}\n"
  },
  {
    "path": "JsBox/file/code/javascript/temp/11111111111111111",
    "content": "function test (a) {var sss = a}\n"
  },
  {
    "path": "JsBox/npm-debug.log",
    "content": "0 info it worked if it ends with ok\n1 verbose cli [ 'D:\\\\Program Files\\\\nodejs\\\\node.exe',\n1 verbose cli   'D:\\\\Program Files\\\\nodejs\\\\node_modules\\\\npm\\\\bin\\\\npm-cli.js',\n1 verbose cli   'start' ]\n2 info using npm@3.10.8\n3 info using node@v6.8.1\n4 verbose run-script [ 'prestart', 'start', 'poststart' ]\n5 info lifecycle code-editor@0.0.0~prestart: code-editor@0.0.0\n6 silly lifecycle code-editor@0.0.0~prestart: no script for prestart, continuing\n7 info lifecycle code-editor@0.0.0~start: code-editor@0.0.0\n8 verbose lifecycle code-editor@0.0.0~start: unsafe-perm in lifecycle true\n9 verbose lifecycle code-editor@0.0.0~start: PATH: D:\\Program Files\\nodejs\\node_modules\\npm\\bin\\node-gyp-bin;E:\\web_workspace\\vue-os\\code-editor\\node_modules\\.bin;C:\\Python\\Scripts;C:\\Python;E:\\sdk\\sdk;D:\\Program Files\\gradle-2.4\\bin;D:\\Program Files\\nodejs\\node_global\\;C:\\Program Files\\Java\\jdk1.8.0_05\\bin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;D:\\Program Files\\nodejs\\;D:\\Program Files\\Git\\cmd;D:\\phpStudy\\php\\php-5.4.45;C:\\ProgramData\\ComposerSetup\\bin;C:\\Python\\Lib\\site-packages;C:\\Python\\Lib\\site-packages\\pytesser;C:\\Users\\Administrator\\AppData\\Roaming\\npm;C:\\Users\\Administrator\\AppData\\Roaming\\Composer\\vendor\\bin\n10 verbose lifecycle code-editor@0.0.0~start: CWD: E:\\web_workspace\\vue-os\\code-editor\n11 silly lifecycle code-editor@0.0.0~start: Args: [ '/d /s /c', 'node ./bin/www' ]\n12 silly lifecycle code-editor@0.0.0~start: Returned: code: 3221225786  signal: null\n13 info lifecycle code-editor@0.0.0~start: Failed to exec start script\n14 verbose stack Error: code-editor@0.0.0 start: `node ./bin/www`\n14 verbose stack Exit status 3221225786\n14 verbose stack     at EventEmitter.<anonymous> (D:\\Program Files\\nodejs\\node_modules\\npm\\lib\\utils\\lifecycle.js:255:16)\n14 verbose stack     at emitTwo (events.js:106:13)\n14 verbose stack     at EventEmitter.emit (events.js:191:7)\n14 verbose stack     at ChildProcess.<anonymous> (D:\\Program Files\\nodejs\\node_modules\\npm\\lib\\utils\\spawn.js:40:14)\n14 verbose stack     at emitTwo (events.js:106:13)\n14 verbose stack     at ChildProcess.emit (events.js:191:7)\n14 verbose stack     at maybeClose (internal/child_process.js:877:16)\n14 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)\n15 verbose pkgid code-editor@0.0.0\n16 verbose cwd E:\\web_workspace\\vue-os\\code-editor\n17 error Windows_NT 6.1.7601\n18 error argv \"D:\\\\Program Files\\\\nodejs\\\\node.exe\" \"D:\\\\Program Files\\\\nodejs\\\\node_modules\\\\npm\\\\bin\\\\npm-cli.js\" \"start\"\n19 error node v6.8.1\n20 error npm  v3.10.8\n21 error code ELIFECYCLE\n22 error code-editor@0.0.0 start: `node ./bin/www`\n22 error Exit status 3221225786\n23 error Failed at the code-editor@0.0.0 start script 'node ./bin/www'.\n23 error Make sure you have the latest version of node.js and npm installed.\n23 error If you do, this is most likely a problem with the code-editor package,\n23 error not with npm itself.\n23 error Tell the author that this fails on your system:\n23 error     node ./bin/www\n23 error You can get information on how to open an issue for this project with:\n23 error     npm bugs code-editor\n23 error Or if that isn't available, you can get their info via:\n23 error     npm owner ls code-editor\n23 error There is likely additional logging output above.\n24 verbose exit [ 1, true ]\n"
  },
  {
    "path": "JsBox/package.json",
    "content": "{\n  \"name\": \"code-editor\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"start\": \"node ./bin/www\"\n  },\n  \"dependencies\": {\n    \"body-parser\": \"~1.15.2\",\n    \"cookie-parser\": \"~1.4.3\",\n    \"cors\": \"^2.8.3\",\n    \"crypto\": \"0.0.3\",\n    \"debug\": \"~2.2.0\",\n    \"express\": \"~4.14.0\",\n    \"fs\": \"0.0.1-security\",\n    \"jade\": \"~1.11.0\",\n    \"morgan\": \"~1.7.0\",\n    \"path\": \"^0.12.7\",\n    \"serve-favicon\": \"~2.3.0\"\n  }\n}\n"
  },
  {
    "path": "JsBox/public/index.html",
    "content": "<!DOCTYPE html><html><head><meta charset=utf-8><title>JsBox</title><link href=/static/css/app.972c3691a3c5c7a0053a4ffcac57f2cf.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.67d95f4f2bac744a9e68.js></script><script type=text/javascript src=/static/js/vendor.66ac5a22f7db90579483.js></script><script type=text/javascript src=/static/js/app.24d437c721cf4e8832ad.js></script></body></html>"
  },
  {
    "path": "JsBox/public/static/css/app.972c3691a3c5c7a0053a4ffcac57f2cf.css",
    "content": "/*! normalize.css v6.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}body,html{margin:0;height:100%}#app{font-family:Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50;height:100%}.CodeMirror{font-family:monospace;height:300px;color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:\"\"}span.CodeMirror-selectedtext{background:none}.cm-s-blackboard.CodeMirror{background:#0c1021;color:#f8f8f8}.cm-s-blackboard div.CodeMirror-selected{background:#253b76}.cm-s-blackboard .CodeMirror-line::selection,.cm-s-blackboard .CodeMirror-line>span::selection,.cm-s-blackboard .CodeMirror-line>span>span::selection{background:rgba(37,59,118,.99)}.cm-s-blackboard .CodeMirror-line::-moz-selection,.cm-s-blackboard .CodeMirror-line>span::-moz-selection,.cm-s-blackboard .CodeMirror-line>span>span::-moz-selection{background:rgba(37,59,118,.99)}.cm-s-blackboard .CodeMirror-gutters{background:#0c1021;border-right:0}.cm-s-blackboard .CodeMirror-guttermarker{color:#fbde2d}.cm-s-blackboard .CodeMirror-guttermarker-subtle,.cm-s-blackboard .CodeMirror-linenumber{color:#888}.cm-s-blackboard .CodeMirror-cursor{border-left:1px solid #a7a7a7}.cm-s-blackboard .cm-keyword{color:#fbde2d}.cm-s-blackboard .cm-atom,.cm-s-blackboard .cm-number{color:#d8fa3c}.cm-s-blackboard .cm-def{color:#8da6ce}.cm-s-blackboard .cm-variable{color:#ff6400}.cm-s-blackboard .cm-operator{color:#fbde2d}.cm-s-blackboard .cm-comment{color:#aeaeae}.cm-s-blackboard .cm-string,.cm-s-blackboard .cm-string-2{color:#61ce3c}.cm-s-blackboard .cm-meta{color:#d8fa3c}.cm-s-blackboard .cm-attribute,.cm-s-blackboard .cm-builtin,.cm-s-blackboard .cm-tag{color:#8da6ce}.cm-s-blackboard .cm-header{color:#ff6400}.cm-s-blackboard .cm-hr{color:#aeaeae}.cm-s-blackboard .cm-link{color:#8da6ce}.cm-s-blackboard .cm-error{background:#9d1e15;color:#f8f8f8}.cm-s-blackboard .CodeMirror-activeline-background{background:#3c3636}.cm-s-blackboard .CodeMirror-matchingbracket{outline:1px solid grey;color:#fff!important}.container-home{height:100%;background-color:#0c1021}aside{position:fixed;width:260px;left:0;top:0;height:100%;box-sizing:border-box;background-color:#333;border-right:1px solid #565656;z-index:10;transition:-webkit-transform .5s;transition:transform .5s;transition:transform .5s,-webkit-transform .5s;will-change:transform}.btn-toggle{position:absolute;width:25px;height:60px;right:-26px;background-color:#222;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);border-top-right-radius:5px;border-bottom-right-radius:5px;border-top:1px solid #565656;border-right:1px solid #565656;border-bottom:1px solid #565656;border-left:none;box-shadow:1px 0 5px #111;background-position:50%;background-size:70%;background-repeat:no-repeat;outline:none;cursor:pointer}.btn-toggle.close{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABeElEQVRYR8WXzXGDMBCFVxL3OBWkhWhmOcfuIB0kpbiT2BUkqSDJGTE4HaQEXAAos4zwYBA/AiTryrLvkxj2PTFYuNI0fQWAB875UUr5N9QuSZIt5/ypLMufOI6/qZYt0VdKHQDgxfT4RMTnvn4EqrV+M89zRLxfBNASp169AC1xqj0j4mY2gEX8VwixlVLm7ROwiZva0yyANcWdAdYWdwLwIT4ZwJf4JACf4qMAvsUHAUKI9wKEErcChBTvAIQWvwK4hfgFgGySMfbVmOO9s51qlFI08+9M/bk5213dtbJjpRTZ6Hv9stb6FEXRzmYuWZZtiqIg368BciEE1Vbm4roueaD9CYYgLA43G+IqkNwCopOIQkNYI1lIiN5MGApiMJSGgBhNxb4hRgHMnGjGb1jzF50E4BNiMoAvCCcAHxDOAGtDzAKwQQDAERHpotpZNu9YfDe0QLhcTgERq83PPoF6m0mS7Bljj0KI/ZglG9unUzog4gf1+AcfOPQw+frYtwAAAABJRU5ErkJggg==)}.btn-toggle.open{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABZklEQVRYR8XX0W2DMBAG4DsWaLpBN0gkH+/tBG0naDJBR6g6QjdIN+gG4Z2T3BE6QvJui8oSIFBsYxNskBAWBv+f/MBxCO3BzC8A8A4AX0T00923XaWUO631ByL+CiE+fc9OzeEA0HRjRDwIIY6ul5nZAJ/b+SMRHaaCXPNDwBkA7kIQzGxwb4NFZyN6QLutVQhCSrnRWptnt7cieoBZaA3ECLAG4gqQG2EF5EQ4AbkQXkAOxCQgNSIIkBIRDEiFiAKkQEQDlkbMAjgQZyK6d5RvW+14NWX/VsAJADZt6IWIuvHIYYqXUuqEiLtuommap7Isq1mAtmgNw8H1D2ELB4BvItobTDRgyfBowNLhUYAU4cGAVOFBgJThk4DU4V5AjnAnIFe4FZAz/AqQO3wEWCN8BGDmmNZs2Buadfpvu60a+u5Ze8PI5nR2+GgH6rp+BABzVqZM+tRSygel1L4oij9fFx2yG/+hreUwIjdu5wAAAABJRU5ErkJggg==)}.title{padding:10px 0;background-color:#111;color:#999;text-align:center;font-size:20px;font-weight:bolder}.item-project,.list-project{list-style-type:none;padding:0;margin:0}.item-project{position:relative;padding:0 10px;color:#999;word-wrap:break-word;word-break:break-all;cursor:pointer;font-size:16px;height:40px;line-height:40px}.item-project.current,.item-project:hover{background-color:#222}.btn-share{position:absolute;display:block;right:0;top:0;padding:10px;height:20px;visibility:hidden}.btn-share:hover{height:26px;padding:7px;background-color:#2a2a2a}.item-project.current .btn-share,.item-project:hover .btn-share{visibility:visible}.btn-add{position:absolute;left:0;bottom:0;width:100%;height:40px;border:none;border-top:1.5px solid #222;background-color:transparent;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAwklEQVRoQ+2YwRHCIBBF/1ZgSkkH2g0tsdVEO7AUrQCHK8mF2TUHfVyT/A2Pxw6D6QvD3e+SrkP0o5Ryyy5n2YE9jwlMUGUFjmChEApNEEChICy6EAqhUJAACgUB0oVQCIWCBFAoCNBqrVswY/e5ma2SluHBq7X2TK/l7i079Mw8YwJn4j6o9RMr0G/RskffxJch9C0pfxNn/zk3c5NEOY1ylJhUZnwdhVAIhYIEUCgIkC6EQigUJIBCQYB0IRT6d4U+WS7pax6rujcAAAAASUVORK5CYII=);background-repeat:no-repeat;background-size:26px;background-position:50%;cursor:pointer;outline:none}.btn-add:hover{background-color:#222}.box-editor{width:100%;height:100%;position:relative;padding-left:260px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;box-sizing:border-box;transition:padding-left .5s;will-change:padding-left}.box-code{font-size:16px;overflow:hidden;-ms-flex-negative:0;flex-shrink:0}.box-code>.CodeMirror{height:100%}.box-control{height:50px;background-color:#333;border-top:1px solid #565656;border-bottom:1px solid #565656;cursor:move;-ms-flex-negative:0;flex-shrink:0}.box-control button{height:30px;width:80px;margin:10px 0 10px 10px;box-sizing:border-box;border:1px solid #565656;background-color:#222;color:#777;cursor:pointer;outline:none}.box-control .box-right{float:right;margin-right:30px}.box-control button:active{background-color:#111;color:#565656}.text-title{box-sizing:border-box;outline:none;padding:5px;font-size:16px;width:400px;color:#aaa;overflow:hidden}.link-site,.text-title{height:32px;margin:9px;font-family:微软雅黑}.link-site{display:inline-block;line-height:32px;color:#0c1021;font-size:18px;font-weight:bolder;cursor:pointer;text-decoration:none;visibility:hidden}.link-site:hover{text-decoration:underline}.box-console{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;background-color:#0c1021;overflow:auto}.item-console,.list-console{margin:0;padding:0;list-style-type:none;font-size:14px;color:#8da6ce}.list-console{padding:10px 0}.item-console{padding:3px;word-wrap:break-word;word-break:break-all}.item-console:hover{background-color:#222}.item-console label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.container-home.noAside aside{-webkit-transform:translateX(-260px);transform:translateX(-260px)}.container-home.noAside .box-editor{padding-left:0}.CodeMirror pre{font:16px/1.5 Helvetica,Arial,sans-serif!important}@media screen and (max-width:1000px){aside{display:none}.box-editor{padding-left:0}.btn-save{display:none}.link-site{visibility:visible}.box-control .box-right{margin-right:10px}}.pop-save[data-v-2cb7954a]{width:400px;padding:20px;font:16px/1.5 Arial,Microsoft YaHei,\\\\9ED1\\4F53,\\\\5B8B\\4F53,sans-serif}.hint[data-v-2cb7954a]{color:#888;font-size:14px}input.form-control[data-v-2cb7954a]{width:100%;font:16px/1.2 Arial,Microsoft YaHei,\\\\9ED1\\4F53,\\\\5B8B\\4F53,sans-serif;padding:10px;border:1px solid #1e525c;outline:none;box-sizing:border-box;margin-top:15px;background-color:#161a2e;color:#fff}input.form-control[data-v-2cb7954a]:focus{border-color:#29afc9;box-shadow:0 0 5px rgba(41,175,201,.5)}.btn-group[data-v-2cb7954a]{text-align:right;margin-top:20px}.btn[data-v-2cb7954a]{height:35px;width:100px;margin:20px 0 10px 10px;box-sizing:border-box;border:1px solid #777;background-color:#0c1021;color:#777;cursor:pointer;outline:none}.btn[data-v-2cb7954a]:active{background-color:#222}.error[data-v-2cb7954a]{font-size:12px;color:red;font-weight:bolder;margin:5px 0;text-align:center}.item-verify[data-v-2cb7954a],.list-verify[data-v-2cb7954a]{list-style-type:none;padding:0;margin:0;box-sizing:border-box}.item-verify[data-v-2cb7954a]{margin:5px;float:left;width:190px;text-align:center;border:1px solid #1e525c;padding:6px;font-size:14px;color:#aaa;cursor:pointer}.item-verify.current[data-v-2cb7954a]{border-color:#29afc9;color:#29afc9}.pop-mask{position:fixed;z-index:1000;width:100%;height:100%;left:0;top:0}.pop-window{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#0c1021;border:1px solid #565656;box-shadow:0 0 5px #777;padding-top:30px}.btn-close{position:absolute;color:#999;font-size:24px;padding:5px 10px;right:0;top:0;cursor:pointer}.pop-success[data-v-29434224]{width:300px;font-family:微软雅黑;text-align:center;padding-bottom:20px}.success[data-v-29434224]{font-size:22px;color:#ccc;padding-left:20px;padding-right:20px}.btn-positive[data-v-29434224]{height:35px;width:100px;margin:20px 0 10px 10px;box-sizing:border-box;border:1px solid #777;background-color:#0c1021;color:#777;cursor:pointer;outline:none}.btn-positive[data-v-29434224]:active{background-color:#222}.pop-share[data-v-3785a81e]{width:400px;font-family:微软雅黑;text-align:center;padding:10px}.hint[data-v-3785a81e]{color:#888;font-size:14px}.box-code[data-v-3785a81e]{width:380px;max-width:380px;height:150px;border:1px solid #777;background-color:transparent;outline:none;padding:5px;box-sizing:border-box;color:#ccc}.btn-positive[data-v-3785a81e]{height:35px;width:100px;margin:10px 0 10px 10px;box-sizing:border-box;border:1px solid #777;background-color:#0c1021;color:#777;cursor:pointer;outline:none}.btn-positive[data-v-3785a81e]:active{background-color:#222}.error[data-v-3785a81e]{font-size:12px;color:red;font-weight:bolder;margin:5px 0;text-align:center}"
  },
  {
    "path": "JsBox/public/static/js/app.24d437c721cf4e8832ad.js",
    "content": "webpackJsonp([1],[function(e,t,i){\"use strict\";function n(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function r(e,t,i){t||(t={});for(var n in e)!e.hasOwnProperty(n)||!1===i&&t.hasOwnProperty(n)||(t[n]=e[n]);return t}function o(e,t,i,n,r){null==t&&-1==(t=e.search(/[^\\s\\u00a0]/))&&(t=e.length);for(var o=n||0,a=r||0;;){var l=e.indexOf(\"\\t\",o);if(l<0||l>=t)return a+(t-o);a+=l-o,a+=i-a%i,o=l+1}}function a(e,t){for(var i=0;i<e.length;++i)if(e[i]==t)return i;return-1}function l(e,t,i){for(var n=0,r=0;;){var o=e.indexOf(\"\\t\",n);-1==o&&(o=e.length);var a=o-n;if(o==e.length||r+a>=t)return n+Math.min(a,t-r);if(r+=o-n,r+=i-r%i,n=o+1,r>=t)return n}}function s(e){for(;N.length<=e;)N.push(c(N)+\" \");return N[e]}function c(e){return e[e.length-1]}function u(e,t){for(var i=[],n=0;n<e.length;n++)i[n]=t(e[n],n);return i}function f(e,t,i){for(var n=0,r=i(t);n<e.length&&i(e[n])<=r;)n++;e.splice(n,0,t)}function d(){}function h(e,t){var i=void 0;return x.a?i=x()(e):(d.prototype=e,i=new d),t&&r(t,i),i}function p(e){return/\\w/.test(e)||e>\"\"&&(e.toUpperCase()!=e.toLowerCase()||W.test(e))}function v(e,t){return t?!!(t.source.indexOf(\"\\\\w\")>-1&&p(e))||t.test(e):p(e)}function g(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}function m(e){return e.charCodeAt(0)>=768&&E.test(e)}function b(e,t,i){for(;(i<0?t>0:t<e.length)&&m(e.charAt(t));)t+=i;return t}function y(e,t,i){for(;;){if(Math.abs(t-i)<=1)return e(t)?t:i;var n=Math.floor((t+i)/2);e(n)?i=n:t=n}}var w=i(157),x=i.n(w),C=i(16),k=i.n(C),S=i(17),L=i.n(S);t.n=n,t.p=r,t.b=o,i.d(t,\"o\",function(){return M}),t.a=a,i.d(t,\"i\",function(){return T}),i.d(t,\"e\",function(){return _}),i.d(t,\"h\",function(){return A}),i.d(t,\"t\",function(){return O}),i.d(t,\"q\",function(){return D}),t.c=l,t.m=s,t.f=c,t.g=u,t.u=f,t.r=h,t.d=p,t.v=v,t.s=g,t.j=m,t.l=b,t.k=y;var M=function(){function e(){k()(this,e),this.id=null}return L()(e,[{key:\"set\",value:function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)}}]),e}(),T=30,_={toString:function(){return\"CodeMirror.Pass\"}},A={scroll:!1},O={origin:\"*mouse\"},D={origin:\"+move\"},N=[\"\"],W=/[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/,E=/[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/},function(e,t,i){\"use strict\";function n(e){return new RegExp(\"(^|\\\\s)\"+e+\"(?:$|\\\\s)\\\\s*\")}function r(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function o(e,t){return r(e).appendChild(t)}function a(e,t,i,n){var r=document.createElement(e);if(i&&(r.className=i),n&&(r.style.cssText=n),\"string\"==typeof t)r.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)r.appendChild(t[o]);return r}function l(e,t,i,n){var r=a(e,t,i,n);return r.setAttribute(\"role\",\"presentation\"),r}function s(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function c(){var e=void 0;try{e=document.activeElement}catch(t){e=document.body||null}for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e}function u(e,t){var i=e.className;n(t).test(i)||(e.className+=(i?\" \":\"\")+t)}function f(e,t){for(var i=e.split(\" \"),r=0;r<i.length;r++)i[r]&&!n(i[r]).test(t)&&(t+=\" \"+i[r]);return t}var d=i(5);t.l=n,i.d(t,\"c\",function(){return h}),t.g=r,t.d=o,t.e=a,t.h=l,i.d(t,\"f\",function(){return p}),t.b=s,t.j=c,t.a=u,t.i=f,i.d(t,\"k\",function(){return v});var h=function(e,t){var i=e.className,r=n(t).exec(i);if(r){var o=i.slice(r.index+r[0].length);e.className=i.slice(0,r.index)+(o?r[1]+o:\"\")}},p=void 0;p=document.createRange?function(e,t,i,n){var r=document.createRange();return r.setEnd(n||e,i),r.setStart(e,t),r}:function(e,t,i){var n=document.body.createTextRange();try{n.moveToElementText(e.parentNode)}catch(e){return n}return n.collapse(!0),n.moveEnd(\"character\",i),n.moveStart(\"character\",t),n};var v=function(e){e.select()};d.a?v=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:d.b&&(v=function(e){try{e.select()}catch(e){}})},function(e,t,i){\"use strict\";function n(e,t){return e._handlers&&e._handlers[t]||b}function r(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1);else if(e.detachEvent)e.detachEvent(\"on\"+t,n);else{var r=e._handlers,o=r&&r[t];if(o){var a=i.i(m.a)(o,n);a>-1&&(r[t]=o.slice(0,a).concat(o.slice(a+1)))}}}function o(e,t){var i=n(e,t);if(i.length)for(var r=Array.prototype.slice.call(arguments,2),o=0;o<i.length;++o)i[o].apply(null,r)}function a(e,t,i){return\"string\"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),o(e,i||t.type,e,t),d(t)||t.codemirrorIgnore}function l(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),r=0;r<t.length;++r)-1==i.i(m.a)(n,t[r])&&n.push(t[r])}function s(e,t){return n(e,t).length>0}function c(e){e.prototype.on=function(e,t){y(this,e,t)},e.prototype.off=function(e,t){r(this,e,t)}}function u(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function f(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function d(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function h(e){u(e),f(e)}function p(e){return e.target||e.srcElement}function v(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),g.c&&e.ctrlKey&&1==t&&(t=3),t}var g=i(5),m=i(0);i.d(t,\"c\",function(){return y}),t.l=n,t.b=r,t.d=o,t.k=a,t.i=l,t.h=s,t.a=c,t.e=u,t.f=f,t.n=d,t.g=h,t.j=p,t.m=v;var b=[],y=function(e,t,i){if(e.addEventListener)e.addEventListener(t,i,!1);else if(e.attachEvent)e.attachEvent(\"on\"+t,i);else{var n=e._handlers||(e._handlers={});n[t]=(n[t]||b).concat(i)}}},function(e,t,i){\"use strict\";function n(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!(this instanceof n))return new n(e,t,i);this.line=e,this.ch=t,this.sticky=i}function r(e,t){return e.line-t.line||e.ch-t.ch}function o(e,t){return e.sticky==t.sticky&&0==r(e,t)}function a(e){return n(e.line,e.ch)}function l(e,t){return r(e,t)<0?t:e}function s(e,t){return r(e,t)<0?e:t}function c(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function u(e,t){if(t.line<e.first)return n(e.first,0);var r=e.first+e.size-1;return t.line>r?n(r,i.i(h.d)(e,r).text.length):f(t,i.i(h.d)(e,t.line).text.length)}function f(e,t){var i=e.ch;return null==i||i>t?n(e.line,t):i<0?n(e.line,0):e}function d(e,t){for(var i=[],n=0;n<t.length;n++)i[n]=u(e,t[n]);return i}var h=i(4);t.a=n,t.b=r,t.f=o,t.e=a,t.h=l,t.g=s,t.d=c,t.c=u,t.i=d},function(e,t,i){\"use strict\";function n(e,t){if((t-=e.first)<0||t>=e.size)throw new Error(\"There is no line \"+(t+e.first)+\" in the document.\");for(var i=e;!i.lines;)for(var n=0;;++n){var r=i.children[n],o=r.chunkSize();if(t<o){i=r;break}t-=o}return i.lines[t]}function r(e,t,i){var n=[],r=t.line;return e.iter(t.line,i.line+1,function(e){var o=e.text;r==i.line&&(o=o.slice(0,i.ch)),r==t.line&&(o=o.slice(t.ch)),n.push(o),++r}),n}function o(e,t,i){var n=[];return e.iter(t,i,function(e){n.push(e.text)}),n}function a(e,t){var i=t-e.height;if(i)for(var n=e;n;n=n.parent)n.height+=i}function l(e){if(null==e.parent)return null;for(var t=e.parent,n=i.i(f.a)(t.lines,e),r=t.parent;r;t=r,r=r.parent)for(var o=0;r.children[o]!=t;++o)n+=r.children[o].chunkSize();return n+t.first}function s(e,t){var i=e.first;e:do{for(var n=0;n<e.children.length;++n){var r=e.children[n],o=r.height;if(t<o){e=r;continue e}t-=o,i+=r.chunkSize()}return i}while(!e.lines);for(var a=0;a<e.lines.length;++a){var l=e.lines[a],s=l.height;if(t<s)break;t-=s}return i+a}function c(e,t){return t>=e.first&&t<e.first+e.size}function u(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}var f=i(0);t.d=n,t.e=r,t.h=o,t.b=a,t.a=l,t.f=s,t.c=c,t.g=u},function(e,t,i){\"use strict\";i.d(t,\"i\",function(){return o}),i.d(t,\"b\",function(){return c}),i.d(t,\"d\",function(){return u}),i.d(t,\"g\",function(){return f}),i.d(t,\"e\",function(){return h}),i.d(t,\"k\",function(){return p}),i.d(t,\"j\",function(){return v}),i.d(t,\"l\",function(){return g}),i.d(t,\"h\",function(){return m}),i.d(t,\"a\",function(){return b}),i.d(t,\"f\",function(){return y}),i.d(t,\"n\",function(){return w}),i.d(t,\"c\",function(){return x}),i.d(t,\"p\",function(){return C}),i.d(t,\"q\",function(){return k}),i.d(t,\"m\",function(){return L}),i.d(t,\"o\",function(){return M});var n=navigator.userAgent,r=navigator.platform,o=/gecko\\/\\d/i.test(n),a=/MSIE \\d/.test(n),l=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(n),s=/Edge\\/(\\d+)/.exec(n),c=a||l||s,u=c&&(a?document.documentMode||6:+(s||l)[1]),f=!s&&/WebKit\\//.test(n),d=f&&/Qt\\/\\d+\\.\\d+/.test(n),h=!s&&/Chrome\\//.test(n),p=/Opera\\//.test(n),v=/Apple Computer/.test(navigator.vendor),g=/Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(n),m=/PhantomJS/.test(n),b=!s&&/AppleWebKit/.test(n)&&/Mobile\\/\\w+/.test(n),y=/Android/.test(n),w=b||y||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(n),x=b||/Mac/.test(r),C=/\\bCrOS\\b/.test(n),k=/win/i.test(r),S=p&&n.match(/Version\\/(\\d*\\.\\d*)/);S&&(S=Number(S[1])),S&&S>=15&&(p=!1,f=!0);var L=x&&(d||p&&(null==S||S<12.11)),M=o||c&&u>=9},function(e,t,i){\"use strict\";function n(e){return e.lineSpace.offsetTop}function r(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function o(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=i.i(X.d)(e.measure,i.i(X.e)(\"pre\",\"x\")),n=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,r={left:parseInt(n.paddingLeft),right:parseInt(n.paddingRight)};return isNaN(r.left)||isNaN(r.right)||(e.cachedPaddingH=r),r}function a(e){return J.i-e.display.nativeBarWidth}function l(e){return e.display.scroller.clientWidth-a(e)-e.display.barWidth}function s(e){return e.display.scroller.clientHeight-a(e)-e.display.barHeight}function c(e,t,i){var n=e.options.lineWrapping,r=n&&l(e);if(!t.measure.heights||n&&t.measure.width!=r){var o=t.measure.heights=[];if(n){t.measure.width=r;for(var a=t.text.firstChild.getClientRects(),s=0;s<a.length-1;s++){var c=a[s],u=a[s+1];Math.abs(c.bottom-u.bottom)>2&&o.push((c.bottom+u.top)/2-i.top)}}o.push(i.bottom-i.top)}}function u(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var r=0;r<e.rest.length;r++)if(e.rest[r]==t)return{map:e.measure.maps[r],cache:e.measure.caches[r]};for(var o=0;o<e.rest.length;o++)if(i.i(q.a)(e.rest[o])>n)return{map:e.measure.maps[o],cache:e.measure.caches[o],before:!0}}function f(e,t){t=i.i(K.e)(t);var n=i.i(q.a)(t),r=e.display.externalMeasured=new U.c(e.doc,t,n);r.lineN=n;var o=r.built=i.i(U.d)(e,r);return r.text=o.pre,i.i(X.d)(e.display.lineMeasure,o.pre),r}function d(e,t,i,n){return v(e,p(e,t),i,n)}function h(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[j(e,t)];var i=e.display.externalMeasured;return i&&t>=i.lineN&&t<i.lineN+i.size?i:void 0}function p(e,t){var n=i.i(q.a)(t),r=h(e,n);r&&!r.text?r=null:r&&r.changes&&(i.i(ee.a)(e,r,n,I(e)),e.curOp.forceUpdate=!0),r||(r=f(e,t));var o=u(r,t,n);return{line:t,view:r,rect:null,map:o.map,cache:o.cache,before:o.before,hasHeights:!1}}function v(e,t,i,n,r){t.before&&(i=-1);var o=i+(n||\"\"),a=void 0;return t.cache.hasOwnProperty(o)?a=t.cache[o]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(c(e,t.view,t.rect),t.hasHeights=!0),a=b(e,t,i,n),a.bogus||(t.cache[o]=a)),{left:a.left,right:a.right,top:r?a.rtop:a.top,bottom:r?a.rbottom:a.bottom}}function g(e,t,i){for(var n=void 0,r=void 0,o=void 0,a=void 0,l=void 0,s=void 0,c=0;c<e.length;c+=3)if(l=e[c],s=e[c+1],t<l?(r=0,o=1,a=\"left\"):t<s?(r=t-l,o=r+1):(c==e.length-3||t==s&&e[c+3]>t)&&(o=s-l,r=o-1,t>=s&&(a=\"right\")),null!=r){if(n=e[c+2],l==s&&i==(n.insertLeft?\"left\":\"right\")&&(a=i),\"left\"==i&&0==r)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)n=e[2+(c-=3)],a=\"left\";if(\"right\"==i&&r==s-l)for(;c<e.length-3&&e[c+3]==e[c+4]&&!e[c+5].insertLeft;)n=e[(c+=3)+2],a=\"right\";break}return{node:n,start:r,end:o,collapse:a,coverStart:l,coverEnd:s}}function m(e,t){var i=ie;if(\"left\"==t)for(var n=0;n<e.length&&(i=e[n]).left==i.right;n++);else for(var r=e.length-1;r>=0&&(i=e[r]).left==i.right;r--);return i}function b(e,t,n,r){var o=g(t.map,n,r),a=o.node,l=o.start,s=o.end,c=o.collapse,u=void 0;if(3==a.nodeType){for(var f=0;f<4;f++){for(;l&&i.i(J.j)(t.line.text.charAt(o.coverStart+l));)--l;for(;o.coverStart+s<o.coverEnd&&i.i(J.j)(t.line.text.charAt(o.coverStart+s));)++s;if(u=$.b&&$.d<9&&0==l&&s==o.coverEnd-o.coverStart?a.parentNode.getBoundingClientRect():m(i.i(X.f)(a,l,s).getClientRects(),r),u.left||u.right||0==l)break;s=l,l-=1,c=\"right\"}$.b&&$.d<11&&(u=y(e.display.measure,u))}else{l>0&&(c=r=\"right\");var d=void 0;u=e.options.lineWrapping&&(d=a.getClientRects()).length>1?d[\"right\"==r?d.length-1:0]:a.getBoundingClientRect()}if($.b&&$.d<9&&!l&&(!u||!u.left&&!u.right)){var h=a.parentNode.getClientRects()[0];u=h?{left:h.left,right:h.left+P(e.display),top:h.top,bottom:h.bottom}:ie}for(var p=u.top-t.rect.top,v=u.bottom-t.rect.top,b=(p+v)/2,w=t.view.measure.heights,x=0;x<w.length-1&&!(b<w[x]);x++);var C=x?w[x-1]:0,k=w[x],S={left:(\"right\"==c?u.right:u.left)-t.rect.left,right:(\"left\"==c?u.left:u.right)-t.rect.left,top:C,bottom:k};return u.left||u.right||(S.bogus=!0),e.options.singleCursorHeightPerLine||(S.rtop=p,S.rbottom=v),S}function y(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!i.i(Z.b)(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}function w(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function x(e){e.display.externalMeasure=null,i.i(X.g)(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)w(e.display.view[t])}function C(e){x(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function k(){return $.e&&$.f?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function S(){return $.e&&$.f?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function L(e,t,r,o,a){if(!a&&t.widgets)for(var l=0;l<t.widgets.length;++l)if(t.widgets[l].above){var s=i.i(te.a)(t.widgets[l]);r.top+=s,r.bottom+=s}if(\"line\"==o)return r;o||(o=\"local\");var c=i.i(K.a)(t);if(\"local\"==o?c+=n(e.display):c-=e.display.viewOffset,\"page\"==o||\"window\"==o){var u=e.display.lineSpace.getBoundingClientRect();c+=u.top+(\"window\"==o?0:S());var f=u.left+(\"window\"==o?0:k());r.left+=f,r.right+=f}return r.top+=c,r.bottom+=c,r}function M(e,t,i){if(\"div\"==i)return t;var n=t.left,r=t.top;if(\"page\"==i)n-=k(),r-=S();else if(\"local\"==i||!i){var o=e.display.sizer.getBoundingClientRect();n+=o.left,r+=o.top}var a=e.display.lineSpace.getBoundingClientRect();return{left:n-a.left,top:r-a.top}}function T(e,t,n,r,o){return r||(r=i.i(q.d)(e.doc,t.line)),L(e,r,d(e,r,t.ch,o),n)}function _(e,t,n,r,o,a){function l(t,i){var l=v(e,o,t,i?\"right\":\"left\",a);return i?l.left=l.right:l.right=l.left,L(e,r,l,n)}function s(e,t,i){var n=c[t],r=n.level%2!=0;return l(i?e-1:e,r!=i)}r=r||i.i(q.d)(e.doc,t.line),o||(o=p(e,r));var c=i.i(Y.a)(r,e.doc.direction),u=t.ch,f=t.sticky;if(u>=r.text.length?(u=r.text.length,f=\"before\"):u<=0&&(u=0,f=\"after\"),!c)return l(\"before\"==f?u-1:u,\"before\"==f);var d=i.i(Y.b)(c,u,f),h=Y.c,g=s(u,d,\"before\"==f);return null!=h&&(g.other=s(u,h,\"before\"!=f)),g}function A(e,t){var r=0;t=i.i(G.c)(e.doc,t),e.options.lineWrapping||(r=P(e.display)*t.ch);var o=i.i(q.d)(e.doc,t.line),a=i.i(K.a)(o)+n(e.display);return{left:r,right:r,top:a,bottom:a+o.height}}function O(e,t,n,r,o){var a=i.i(G.a)(e,t,n);return a.xRel=o,r&&(a.outside=!0),a}function D(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return O(r.first,0,null,!0,-1);var o=i.i(q.f)(r,n),a=r.first+r.size-1;if(o>a)return O(r.first+r.size-1,i.i(q.d)(r,a).text.length,null,!0,1);t<0&&(t=0);for(var l=i.i(q.d)(r,o);;){var s=E(e,l,o,t,n),c=i.i(K.h)(l),u=c&&c.find(0,!0);if(!c||!(s.ch>u.from.ch||s.ch==u.from.ch&&s.xRel>0))return s;o=i.i(q.a)(l=u.to.line)}}function N(e,t,n,r){var o=function(i){return L(e,t,v(e,n,i),\"line\")},a=t.text.length,l=i.i(J.k)(function(e){return o(e-1).bottom<=r},a,0);return a=i.i(J.k)(function(e){return o(e).top>r},l,a),{begin:l,end:a}}function W(e,t,i,n){return N(e,t,i,L(e,t,v(e,i,n),\"line\").top)}function E(e,t,n,r,o){o-=i.i(K.a)(t);var a=0,l=t.text.length,s=p(e,t),c=void 0;if(i.i(Y.a)(t,e.doc.direction)){if(e.options.lineWrapping){var u=N(e,t,s,o);a=u.begin,l=u.end}c=new G.a(n,a);var f=_(e,c,\"line\",t,s).left,d=f<r?1:-1,h=void 0,g=f-r,m=void 0;do{if(h=g,m=c,null==(c=i.i(V.a)(e,t,c,d))||c.ch<a||l<=(\"before\"==c.sticky?c.ch-1:c.ch)){c=m;break}g=_(e,c,\"line\",t,s).left-r}while(d<0!=g<0&&Math.abs(g)<=Math.abs(h));if(Math.abs(g)>Math.abs(h)){if(g<0==h<0)throw new Error(\"Broke out of infinite loop in coordsCharInner\");c=m}}else{var b=i.i(J.k)(function(i){var n=L(e,t,v(e,s,i),\"line\");return n.top>o?(l=Math.min(i,l),!0):!(n.bottom<=o)&&(n.left>r||!(n.right<r)&&r-n.left<n.right-r)},a,l);b=i.i(J.l)(t.text,b,1),c=new G.a(n,b,b==l?\"before\":\"after\")}var y=_(e,c,\"line\",t,s);return(o<y.top||y.bottom<o)&&(c.outside=!0),c.xRel=r<y.left?-1:r>y.right?1:0,c}function H(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==ne){ne=i.i(X.e)(\"pre\");for(var t=0;t<49;++t)ne.appendChild(document.createTextNode(\"x\")),ne.appendChild(i.i(X.e)(\"br\"));ne.appendChild(document.createTextNode(\"x\"))}i.i(X.d)(e.measure,ne);var n=ne.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),i.i(X.g)(e.measure),n||1}function P(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=i.i(X.e)(\"span\",\"xxxxxxxxxx\"),n=i.i(X.e)(\"pre\",[t]);i.i(X.d)(e.measure,n);var r=t.getBoundingClientRect(),o=(r.right-r.left)/10;return o>2&&(e.cachedCharWidth=o),o||10}function I(e){for(var t=e.display,i={},n={},r=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a)i[e.options.gutters[a]]=o.offsetLeft+o.clientLeft+r,n[e.options.gutters[a]]=o.clientWidth;return{fixedPos:R(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:i,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function R(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function z(e){var t=H(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/P(e.display)-3);return function(o){if(i.i(K.b)(e.doc,o))return 0;var a=0;if(o.widgets)for(var l=0;l<o.widgets.length;l++)o.widgets[l].height&&(a+=o.widgets[l].height);return n?a+(Math.ceil(o.text.length/r)||1)*t:a+t}}function F(e){var t=e.doc,n=z(e);t.iter(function(e){var t=n(e);t!=e.height&&i.i(q.b)(e,t)})}function B(e,t,n,r){var a=e.display;if(!n&&\"true\"==i.i(Q.j)(t).getAttribute(\"cm-not-content\"))return null;var l=void 0,s=void 0,c=a.lineSpace.getBoundingClientRect();try{l=t.clientX-c.left,s=t.clientY-c.top}catch(t){return null}var u=D(e,l,s),f=void 0;if(r&&1==u.xRel&&(f=i.i(q.d)(e.doc,u.line).text).length==u.ch){var d=i.i(J.b)(f,f.length,e.options.tabSize)-f.length;u=i.i(G.a)(u.line,Math.max(0,Math.round((l-o(e.display).left)/P(e.display))-d))}return u}function j(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var i=e.display.view,n=0;n<i.length;n++)if((t-=i[n].size)<0)return n}var V=i(64),U=i(21),G=i(3),K=i(7),q=i(4),Y=i(32),$=i(5),X=i(1),Q=i(2),Z=i(24),J=i(0),ee=i(89),te=i(22);t.f=n,t.k=r,t.p=o,t.g=a,t.l=l,t.j=s,t.v=u,t.s=d,t.t=h,t.c=p,t.d=v,t.w=g,t.u=w,t.D=x,t.y=C,t.B=L,t.z=M,t.q=T,t.h=_,t.m=A,t.A=D,t.e=W,t.i=H,t.C=P,t.o=I,t.n=R,t.a=z,t.b=F,t.x=B,t.r=j;var ie={left:0,right:0,top:0,bottom:0},ne=void 0},function(e,t,i){\"use strict\";function n(e,t,i){this.marker=e,this.from=t,this.to=i}function r(e,t){if(e)for(var i=0;i<e.length;++i){var n=e[i];if(n.marker==t)return n}}function o(e,t){for(var i=void 0,n=0;n<e.length;++n)e[n]!=t&&(i||(i=[])).push(e[n]);return i}function a(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}function l(e,t,i){var r=void 0;if(e)for(var o=0;o<e.length;++o){var a=e[o],l=a.marker,s=null==a.from||(l.inclusiveLeft?a.from<=t:a.from<t);if(s||a.from==t&&\"bookmark\"==l.type&&(!i||!a.marker.insertLeft)){var c=null==a.to||(l.inclusiveRight?a.to>=t:a.to>t);(r||(r=[])).push(new n(l,a.from,c?null:a.to))}}return r}function s(e,t,i){var r=void 0;if(e)for(var o=0;o<e.length;++o){var a=e[o],l=a.marker,s=null==a.to||(l.inclusiveRight?a.to>=t:a.to>t);if(s||a.from==t&&\"bookmark\"==l.type&&(!i||a.marker.insertLeft)){var c=null==a.from||(l.inclusiveLeft?a.from<=t:a.from<t);(r||(r=[])).push(new n(l,c?null:a.from-t,null==a.to?null:a.to-t))}}return r}function c(e,t){if(t.full)return null;var o=i.i(E.c)(e,t.from.line)&&i.i(E.d)(e,t.from.line).markedSpans,a=i.i(E.c)(e,t.to.line)&&i.i(E.d)(e,t.to.line).markedSpans;if(!o&&!a)return null;var c=t.from.ch,f=t.to.ch,d=0==i.i(N.b)(t.from,t.to),h=l(o,c,d),p=s(a,f,d),v=1==t.text.length,g=i.i(D.f)(t.text).length+(v?c:0);if(h)for(var m=0;m<h.length;++m){var b=h[m];if(null==b.to){var y=r(p,b.marker);y?v&&(b.to=null==y.to?null:y.to+g):b.to=c}}if(p)for(var w=0;w<p.length;++w){var x=p[w];if(null!=x.to&&(x.to+=g),null==x.from){var C=r(h,x.marker);C||(x.from=g,v&&(h||(h=[])).push(x))}else x.from+=g,v&&(h||(h=[])).push(x)}h&&(h=u(h)),p&&p!=h&&(p=u(p));var k=[h];if(!v){var S=t.text.length-2,L=void 0;if(S>0&&h)for(var M=0;M<h.length;++M)null==h[M].to&&(L||(L=[])).push(new n(h[M].marker,null,null));for(var T=0;T<S;++T)k.push(L);k.push(p)}return k}function u(e){for(var t=0;t<e.length;++t){var i=e[t];null!=i.from&&i.from==i.to&&!1!==i.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function f(e,t,n){var r=null;if(e.iter(t.line,n.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||r&&-1!=i.i(D.a)(r,n)||(r||(r=[])).push(n)}}),!r)return null;for(var o=[{from:t,to:n}],a=0;a<r.length;++a)for(var l=r[a],s=l.find(0),c=0;c<o.length;++c){var u=o[c];if(!(i.i(N.b)(u.to,s.from)<0||i.i(N.b)(u.from,s.to)>0)){var f=[c,1],d=i.i(N.b)(u.from,s.from),h=i.i(N.b)(u.to,s.to);(d<0||!l.inclusiveLeft&&!d)&&f.push({from:u.from,to:s.from}),(h>0||!l.inclusiveRight&&!h)&&f.push({from:s.to,to:u.to}),o.splice.apply(o,f),c+=f.length-3}}return o}function d(e){var t=e.markedSpans;if(t){for(var i=0;i<t.length;++i)t[i].marker.detachLine(e);e.markedSpans=null}}function h(e,t){if(t){for(var i=0;i<t.length;++i)t[i].marker.attachLine(e);e.markedSpans=t}}function p(e){return e.inclusiveLeft?-1:0}function v(e){return e.inclusiveRight?1:0}function g(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;var r=e.find(),o=t.find(),a=i.i(N.b)(r.from,o.from)||p(e)-p(t);if(a)return-a;var l=i.i(N.b)(r.to,o.to)||v(e)-v(t);return l||t.id-e.id}function m(e,t){var i=W.a&&e.markedSpans,n=void 0;if(i)for(var r,o=0;o<i.length;++o)r=i[o],r.marker.collapsed&&null==(t?r.from:r.to)&&(!n||g(n,r.marker)<0)&&(n=r.marker);return n}function b(e){return m(e,!0)}function y(e){return m(e,!1)}function w(e,t,n,r,o){var a=i.i(E.d)(e,t),l=W.a&&a.markedSpans;if(l)for(var s=0;s<l.length;++s){var c=l[s];if(c.marker.collapsed){var u=c.marker.find(0),f=i.i(N.b)(u.from,n)||p(c.marker)-p(o),d=i.i(N.b)(u.to,r)||v(c.marker)-v(o);if(!(f>=0&&d<=0||f<=0&&d>=0)&&(f<=0&&(c.marker.inclusiveRight&&o.inclusiveLeft?i.i(N.b)(u.to,n)>=0:i.i(N.b)(u.to,n)>0)||f>=0&&(c.marker.inclusiveRight&&o.inclusiveLeft?i.i(N.b)(u.from,r)<=0:i.i(N.b)(u.from,r)<0)))return!0}}}function x(e){for(var t=void 0;t=b(e);)e=t.find(-1,!0).line;return e}function C(e){for(var t=void 0;t=y(e);)e=t.find(1,!0).line;return e}function k(e){for(var t=void 0,i=void 0;t=y(e);)e=t.find(1,!0).line,(i||(i=[])).push(e);return i}function S(e,t){var n=i.i(E.d)(e,t),r=x(n);return n==r?t:i.i(E.a)(r)}function L(e,t){if(t>e.lastLine())return t;var n=i.i(E.d)(e,t),r=void 0;if(!M(e,n))return t;for(;r=y(n);)n=r.find(1,!0).line;return i.i(E.a)(n)+1}function M(e,t){var i=W.a&&t.markedSpans;if(i)for(var n,r=0;r<i.length;++r)if(n=i[r],n.marker.collapsed){if(null==n.from)return!0;if(!n.marker.widgetNode&&0==n.from&&n.marker.inclusiveLeft&&T(e,t,n))return!0}}function T(e,t,i){if(null==i.to){var n=i.marker.find(1,!0);return T(e,n.line,r(n.line.markedSpans,i.marker))}if(i.marker.inclusiveRight&&i.to==t.text.length)return!0;for(var o,a=0;a<t.markedSpans.length;++a)if(o=t.markedSpans[a],o.marker.collapsed&&!o.marker.widgetNode&&o.from==i.to&&(null==o.to||o.to!=i.from)&&(o.marker.inclusiveLeft||i.marker.inclusiveRight)&&T(e,t,o))return!0}function _(e){e=x(e);for(var t=0,i=e.parent,n=0;n<i.lines.length;++n){var r=i.lines[n];if(r==e)break;t+=r.height}for(var o=i.parent;o;i=o,o=i.parent)for(var a=0;a<o.children.length;++a){var l=o.children[a];if(l==i)break;t+=l.height}return t}function A(e){if(0==e.height)return 0;for(var t=e.text.length,i=void 0,n=e;i=b(n);){var r=i.find(0,!0);n=r.from.line,t+=r.from.ch-r.to.ch}for(n=e;i=y(n);){var o=i.find(0,!0);t-=n.text.length-o.from.ch,n=o.to.line,t+=n.text.length-o.to.ch}return t}function O(e){var t=e.display,n=e.doc;t.maxLine=i.i(E.d)(n,n.first),t.maxLineLength=A(t.maxLine),t.maxLineChanged=!0,n.iter(function(e){var i=A(e);i>t.maxLineLength&&(t.maxLineLength=i,t.maxLine=e)})}var D=i(0),N=i(3),W=i(39),E=i(4);t.s=n,t.o=r,t.p=o,t.r=a,t.d=c,t.c=f,t.j=d,t.i=h,t.k=g,t.h=y,t.q=w,t.e=x,t.t=C,t.l=k,t.m=S,t.n=L,t.b=M,t.a=_,t.f=A,t.g=O},function(e,t,i){\"use strict\";function n(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++_},i.i(w.b)(e.curOp)}function r(e){var t=e.curOp;i.i(w.c)(t,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;o(e)})}function o(e){for(var t=e.ops,i=0;i<t.length;i++)a(t[i]);for(var n=0;n<t.length;n++)l(t[n]);for(var r=0;r<t.length;r++)s(t[r]);for(var o=0;o<t.length;o++)c(t[o]);for(var f=0;f<t.length;f++)u(t[f])}function a(e){var t=e.cm,n=t.display;i.i(M.c)(t),e.updateMaxLine&&i.i(g.g)(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<n.viewFrom||e.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new M.d(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function l(e){e.updatedDisplay=e.mustUpdate&&i.i(M.e)(e.cm,e.update)}function s(e){var t=e.cm,n=t.display;e.updatedDisplay&&i.i(T.b)(t),e.barMeasure=i.i(C.b)(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=i.i(m.s)(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+i.i(m.g)(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-i.i(m.l)(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection(e.focus))}function c(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+\"px\",e.maxScrollLeft<t.doc.scrollLeft&&i.i(k.c)(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var n=e.focus&&e.focus==i.i(y.j)()&&(!document.hasFocus||document.hasFocus());e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,n),(e.updatedDisplay||e.startHeight!=t.doc.height)&&i.i(C.c)(t,e.barMeasure),e.updatedDisplay&&i.i(M.f)(t,e.barMeasure),e.selectionChanged&&i.i(S.b)(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),n&&i.i(x.a)(e.cm)}function u(e){var t=e.cm,n=t.display,r=t.doc;if(e.updatedDisplay&&i.i(M.g)(t,e.update),null==n.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(n.wheelStartX=n.wheelStartY=null),null==e.scrollTop||n.scroller.scrollTop==e.scrollTop&&!e.forceScroll||(r.scrollTop=Math.max(0,Math.min(n.scroller.scrollHeight-n.scroller.clientHeight,e.scrollTop)),n.scrollbars.setScrollTop(r.scrollTop),n.scroller.scrollTop=r.scrollTop),null!=e.scrollLeft&&i.i(k.c)(t,e.scrollLeft,!0,!0),e.scrollToPos){var o=i.i(L.c)(t,i.i(v.c)(r,e.scrollToPos.from),i.i(v.c)(r,e.scrollToPos.to),e.scrollToPos.margin);i.i(L.d)(t,o)}var a=e.maybeHiddenMarkers,l=e.maybeUnhiddenMarkers;if(a)for(var s=0;s<a.length;++s)a[s].lines.length||i.i(b.d)(a[s],\"hide\");if(l)for(var c=0;c<l.length;++c)l[c].lines.length&&i.i(b.d)(l[c],\"unhide\");n.wrapper.offsetHeight&&(r.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&i.i(b.d)(t,\"changes\",t,e.changeObjs),e.update&&e.update.finish()}function f(e,t){if(e.curOp)return t();n(e);try{return t()}finally{r(e)}}function d(e,t){return function(){if(e.curOp)return t.apply(e,arguments);n(e);try{return t.apply(e,arguments)}finally{r(e)}}}function h(e){return function(){if(this.curOp)return e.apply(this,arguments);n(this);try{return e.apply(this,arguments)}finally{r(this)}}}function p(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);n(t);try{return e.apply(this,arguments)}finally{r(t)}}}var v=i(3),g=i(7),m=i(6),b=i(2),y=i(1),w=i(15),x=i(35),C=i(37),k=i(36),S=i(20),L=i(19),M=i(38),T=i(49);t.c=n,t.d=r,t.a=f,t.b=d,t.f=h,t.e=p;var _=0},function(e,t,i){\"use strict\";function n(e,t){var n=e[t];e.sort(function(e,t){return i.i(c.b)(e.from(),t.from())}),t=i.i(u.a)(e,n);for(var r=1;r<e.length;r++){var o=e[r],a=e[r-1];if(i.i(c.b)(a.to(),o.from())>=0){var l=i.i(c.g)(a.from(),o.from()),s=i.i(c.h)(a.to(),o.to()),h=a.empty()?o.from()==o.head:a.from()==a.head;r<=t&&--t,e.splice(--r,2,new d(h?s:l,h?l:s))}}return new f(e,t)}function r(e,t){return new f([new d(e,t||e)],0)}var o=i(16),a=i.n(o),l=i(17),s=i.n(l),c=i(3),u=i(0);i.d(t,\"a\",function(){return f}),i.d(t,\"b\",function(){return d}),t.c=n,t.d=r;var f=function(){function e(t,i){a()(this,e),this.ranges=t,this.primIndex=i}return s()(e,[{key:\"primary\",value:function(){return this.ranges[this.primIndex]}},{key:\"equals\",value:function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],r=e.ranges[t];if(!i.i(c.f)(n.anchor,r.anchor)||!i.i(c.f)(n.head,r.head))return!1}return!0}},{key:\"deepCopy\",value:function(){for(var t=[],n=0;n<this.ranges.length;n++)t[n]=new d(i.i(c.e)(this.ranges[n].anchor),i.i(c.e)(this.ranges[n].head));return new e(t,this.primIndex)}},{key:\"somethingSelected\",value:function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1}},{key:\"contains\",value:function(e,t){t||(t=e);for(var n=0;n<this.ranges.length;n++){var r=this.ranges[n];if(i.i(c.b)(t,r.from())>=0&&i.i(c.b)(e,r.to())<=0)return n}return-1}}]),e}(),d=function(){function e(t,i){a()(this,e),this.anchor=t,this.head=i}return s()(e,[{key:\"from\",value:function(){return i.i(c.g)(this.anchor,this.head)}},{key:\"to\",value:function(){return i.i(c.h)(this.anchor,this.head)}},{key:\"empty\",value:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}}]),e}()},,,,,function(e,t,i){\"use strict\";function n(e,t,n,r){if(e.cm&&e.cm.display.shift||e.extend){var o=t.anchor;if(r){var a=i.i(x.b)(n,o)<0;a!=i.i(x.b)(r,o)<0?(o=n,n=r):a!=i.i(x.b)(n,r)<0&&(n=r)}return new M.b(o,n)}return new M.b(r||n,n)}function r(e,t,i,r){u(e,new M.a([n(e,e.sel.primary(),t,i)],0),r)}function o(e,t,r){for(var o=[],a=0;a<e.sel.ranges.length;a++)o[a]=n(e,e.sel.ranges[a],t[a],null);u(e,i.i(M.c)(o,e.sel.primIndex),r)}function a(e,t,n,r){var o=e.sel.ranges.slice(0);o[t]=n,u(e,i.i(M.c)(o,e.sel.primIndex),r)}function l(e,t,n,r){u(e,i.i(M.d)(t,n),r)}function s(e,t,n){var r={ranges:t.ranges,update:function(t){this.ranges=[];for(var n=0;n<t.length;n++)this.ranges[n]=new M.b(i.i(x.c)(e,t[n].anchor),i.i(x.c)(e,t[n].head))},origin:n&&n.origin};return i.i(k.d)(e,\"beforeSelectionChange\",e,r),e.cm&&i.i(k.d)(e.cm,\"beforeSelectionChange\",e.cm,r),r.ranges!=t.ranges?i.i(M.c)(r.ranges,r.ranges.length-1):t}function c(e,t,n){var r=e.history.done,o=i.i(S.f)(r);o&&o.ranges?(r[r.length-1]=t,f(e,t,n)):u(e,t,n)}function u(e,t,n){f(e,t,n),i.i(L.e)(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function f(e,t,n){(i.i(k.h)(e,\"beforeSelectionChange\")||e.cm&&i.i(k.h)(e.cm,\"beforeSelectionChange\"))&&(t=s(e,t,n)),d(e,p(e,t,n&&n.bias||(i.i(x.b)(t.primary().head,e.sel.primary().head)<0?-1:1),!0)),n&&!1===n.scroll||!e.cm||i.i(w.b)(e.cm)}function d(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,i.i(k.i)(e.cm)),i.i(y.a)(e,\"cursorActivity\",e))}function h(e){d(e,p(e,e.sel,null,!1),S.h)}function p(e,t,n,r){for(var o=void 0,a=0;a<t.ranges.length;a++){var l=t.ranges[a],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[a],c=g(e,l.anchor,s&&s.anchor,n,r),u=g(e,l.head,s&&s.head,n,r);(o||c!=l.anchor||u!=l.head)&&(o||(o=t.ranges.slice(0,a)),o[a]=new M.b(c,u))}return o?i.i(M.c)(o,t.primIndex):t}function v(e,t,n,r,o){var a=i.i(C.d)(e,t.line);if(a.markedSpans)for(var l=0;l<a.markedSpans.length;++l){var s=a.markedSpans[l],c=s.marker;if((null==s.from||(c.inclusiveLeft?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(c.inclusiveRight?s.to>=t.ch:s.to>t.ch))){if(o&&(i.i(k.d)(c,\"beforeCursorEnter\"),c.explicitlyCleared)){if(a.markedSpans){--l;continue}break}if(!c.atomic)continue;if(n){var u=c.find(r<0?1:-1),f=void 0;if((r<0?c.inclusiveRight:c.inclusiveLeft)&&(u=m(e,u,-r,u&&u.line==t.line?a:null)),u&&u.line==t.line&&(f=i.i(x.b)(u,n))&&(r<0?f<0:f>0))return v(e,u,t,r,o)}var d=c.find(r<0?-1:1);return(r<0?c.inclusiveLeft:c.inclusiveRight)&&(d=m(e,d,r,d.line==t.line?a:null)),d?v(e,d,t,r,o):null}}return t}function g(e,t,n,r,o){var a=r||1,l=v(e,t,n,a,o)||!o&&v(e,t,n,a,!0)||v(e,t,n,-a,o)||!o&&v(e,t,n,-a,!0);return l||(e.cantEdit=!0,i.i(x.a)(e.first,0))}function m(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?i.i(x.c)(e,i.i(x.a)(t.line-1)):null:n>0&&t.ch==(r||i.i(C.d)(e,t.line)).text.length?t.line<e.first+e.size-1?i.i(x.a)(t.line+1,0):null:new x.a(t.line,t.ch+n)}function b(e){e.setSelection(i.i(x.a)(e.firstLine(),0),i.i(x.a)(e.lastLine()),S.h)}var y=i(15),w=i(19),x=i(3),C=i(4),k=i(2),S=i(0),L=i(53),M=i(9);t.j=n,t.g=r,t.h=o,t.e=a,t.f=l,t.i=c,t.a=u,t.b=f,t.c=h,t.k=g,t.d=b},function(e,t,i){\"use strict\";function n(e){c?c.ops.push(e):e.ownsGroup=c={ops:[e],delayedCallbacks:[]}}function r(e){var t=e.delayedCallbacks,i=0;do{for(;i<t.length;i++)t[i].call(null);for(var n=0;n<e.ops.length;n++){var r=e.ops[n];if(r.cursorActivityHandlers)for(;r.cursorActivityCalled<r.cursorActivityHandlers.length;)r.cursorActivityHandlers[r.cursorActivityCalled++].call(null,r.cm)}}while(i<t.length)}function o(e,t){var i=e.ownsGroup;if(i)try{r(i)}finally{c=null,t(i)}}function a(e,t){var n=i.i(s.l)(e,t);if(n.length){var r=Array.prototype.slice.call(arguments,2),o=void 0;c?o=c.delayedCallbacks:u?o=u:(o=u=[],setTimeout(l,0));for(var a=0;a<n.length;++a)!function(e){o.push(function(){return n[e].apply(null,r)})}(a)}}function l(){var e=u;u=null;for(var t=0;t<e.length;++t)e[t]()}var s=i(2);t.b=n,t.c=o,t.a=a;var c=null,u=null},,,function(e,t,i){\"use strict\";function n(e,t,n,r){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size),r||(r=0);var l=e.display;if(r&&n<l.viewTo&&(null==l.updateLineNumbers||l.updateLineNumbers>t)&&(l.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=l.viewTo)u.a&&i.i(f.m)(e.doc,t)<l.viewTo&&o(e);else if(n<=l.viewFrom)u.a&&i.i(f.n)(e.doc,n+r)>l.viewFrom?o(e):(l.viewFrom+=r,l.viewTo+=r);else if(t<=l.viewFrom&&n>=l.viewTo)o(e);else if(t<=l.viewFrom){var s=a(e,n,n+r,1);s?(l.view=l.view.slice(s.index),l.viewFrom=s.lineN,l.viewTo+=r):o(e)}else if(n>=l.viewTo){var d=a(e,t,t,-1);d?(l.view=l.view.slice(0,d.index),l.viewTo=d.lineN):o(e)}else{var h=a(e,t,t,-1),p=a(e,n,n+r,1);h&&p?(l.view=l.view.slice(0,h.index).concat(i.i(c.e)(e,h.lineN,p.lineN)).concat(l.view.slice(p.index)),l.viewTo+=r):o(e)}var v=l.externalMeasured;v&&(n<v.lineN?v.lineN+=r:t<v.lineN+v.size&&(l.externalMeasured=null))}function r(e,t,n){e.curOp.viewChanged=!0;var r=e.display,o=e.display.externalMeasured;if(o&&t>=o.lineN&&t<o.lineN+o.size&&(r.externalMeasured=null),!(t<r.viewFrom||t>=r.viewTo)){var a=r.view[i.i(d.r)(e,t)];if(null!=a.node){var l=a.changes||(a.changes=[]);-1==i.i(h.a)(l,n)&&l.push(n)}}}function o(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function a(e,t,n,r){var o=i.i(d.r)(e,t),a=void 0,l=e.display.view;if(!u.a||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var s=e.display.viewFrom,c=0;c<o;c++)s+=l[c].size;if(s!=t){if(r>0){if(o==l.length-1)return null;a=s+l[o].size-t,o++}else a=s-t;t+=a,n+=a}for(;i.i(f.m)(e.doc,n)!=n;){if(o==(r<0?0:l.length-1))return null;n+=r*l[o-(r<0?1:0)].size,o+=r}return{index:o,lineN:n}}function l(e,t,n){var r=e.display;0==r.view.length||t>=r.viewTo||n<=r.viewFrom?(r.view=i.i(c.e)(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=i.i(c.e)(e,t,r.viewFrom).concat(r.view):r.viewFrom<t&&(r.view=r.view.slice(i.i(d.r)(e,t))),r.viewFrom=t,r.viewTo<n?r.view=r.view.concat(i.i(c.e)(e,r.viewTo,n)):r.viewTo>n&&(r.view=r.view.slice(0,i.i(d.r)(e,n)))),r.viewTo=n}function s(e){for(var t=e.display.view,i=0,n=0;n<t.length;n++){var r=t[n];r.hidden||r.node&&!r.changes||++i}return i}var c=i(21),u=i(39),f=i(7),d=i(6),h=i(0);t.b=n,t.a=r,t.c=o,t.e=l,t.d=s},function(e,t,i){\"use strict\";function n(e,t){if(!i.i(p.k)(e,\"scrollCursorIntoView\")){var n=e.display,r=n.sizer.getBoundingClientRect(),o=null;if(t.top+r.top<0?o=!0:t.bottom+r.top>(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!d.h){var a=i.i(h.e)(\"div\",\"​\",null,\"position: absolute;\\n                         top: \"+(t.top-n.viewOffset-i.i(f.f)(e.display))+\"px;\\n                         height: \"+(t.bottom-t.top+i.i(f.g)(e)+n.barHeight)+\"px;\\n                         left: \"+t.left+\"px; width: \"+Math.max(2,t.right-t.left)+\"px;\");e.display.lineSpace.appendChild(a),a.scrollIntoView(o),e.display.lineSpace.removeChild(a)}}}function r(e,t,n,r){null==r&&(r=0);for(var o=void 0,l=0;l<5;l++){var s=!1,c=i.i(f.h)(e,t),u=n&&n!=t?i.i(f.h)(e,n):c;o={left:Math.min(c.left,u.left),top:Math.min(c.top,u.top)-r,right:Math.max(c.left,u.left),bottom:Math.max(c.bottom,u.bottom)+r};var d=a(e,o),h=e.doc.scrollTop,p=e.doc.scrollLeft;if(null!=d.scrollTop&&(i.i(v.b)(e,d.scrollTop),Math.abs(e.doc.scrollTop-h)>1&&(s=!0)),null!=d.scrollLeft&&(i.i(v.c)(e,d.scrollLeft),Math.abs(e.doc.scrollLeft-p)>1&&(s=!0)),!s)break}return o}function o(e,t){var n=a(e,t);null!=n.scrollTop&&i.i(v.b)(e,n.scrollTop),null!=n.scrollLeft&&i.i(v.c)(e,n.scrollLeft)}function a(e,t){var n=e.display,r=i.i(f.i)(e.display);t.top<0&&(t.top=0);var o=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,a=i.i(f.j)(e),l={};t.bottom-t.top>a&&(t.bottom=t.top+a);var s=e.doc.height+i.i(f.k)(n),c=t.top<r,u=t.bottom>s-r;if(t.top<o)l.scrollTop=c?0:t.top;else if(t.bottom>o+a){var d=Math.min(t.top,(u?s:t.bottom)-a);d!=o&&(l.scrollTop=d)}var h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft,p=i.i(f.l)(e)-(e.options.fixedGutter?n.gutters.offsetWidth:0),v=t.right-t.left>p;return v&&(t.right=t.left+p),t.left<10?l.scrollLeft=0:t.left<h?l.scrollLeft=Math.max(0,t.left-(v?0:10)):t.right>p+h-3&&(l.scrollLeft=t.right+(v?0:10)-p),l}function l(e,t,i){null==t&&null==i||c(e),null!=t&&(e.curOp.scrollLeft=(null==e.curOp.scrollLeft?e.doc.scrollLeft:e.curOp.scrollLeft)+t),null!=i&&(e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+i)}function s(e){c(e);var t=e.getCursor(),n=t,r=t;e.options.lineWrapping||(n=t.ch?i.i(u.a)(t.line,t.ch-1):t,r=i.i(u.a)(t.line,t.ch+1)),e.curOp.scrollToPos={from:n,to:r,margin:e.options.cursorScrollMargin}}function c(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;var n=i.i(f.m)(e,t.from),r=i.i(f.m)(e,t.to),o=a(e,{left:Math.min(n.left,r.left),top:Math.min(n.top,r.top)-t.margin,right:Math.max(n.right,r.right),bottom:Math.max(n.bottom,r.bottom)+t.margin});e.scrollTo(o.scrollLeft,o.scrollTop)}}var u=i(3),f=i(6),d=i(5),h=i(1),p=i(2),v=i(36);t.d=n,t.c=r,t.e=o,t.g=a,t.a=l,t.b=s,t.f=c},function(e,t,i){\"use strict\";function n(e){e.display.input.showSelection(e.display.input.prepareSelection())}function r(e,t){for(var i=e.doc,n={},r=n.cursors=document.createDocumentFragment(),l=n.selection=document.createDocumentFragment(),s=0;s<i.sel.ranges.length;s++)if(!1!==t||s!=i.sel.primIndex){var c=i.sel.ranges[s];if(!(c.from().line>=e.display.viewTo||c.to().line<e.display.viewFrom)){var u=c.empty();(u||e.options.showCursorWhenSelecting)&&o(e,c.head,r),u||a(e,c,l)}}return n}function o(e,t,n){var r=i.i(f.h)(e,t,\"div\",null,null,!e.options.singleCursorHeightPerLine),o=n.appendChild(i.i(h.e)(\"div\",\" \",\"CodeMirror-cursor\"));if(o.style.left=r.left+\"px\",o.style.top=r.top+\"px\",o.style.height=Math.max(0,r.bottom-r.top)*e.options.cursorHeight+\"px\",r.other){var a=n.appendChild(i.i(h.e)(\"div\",\" \",\"CodeMirror-cursor CodeMirror-secondarycursor\"));a.style.display=\"\",a.style.left=r.other.left+\"px\",a.style.top=r.other.top+\"px\",a.style.height=.85*(r.other.bottom-r.other.top)+\"px\"}}function a(e,t,n){function r(e,t,n,r){t<0&&(t=0),t=Math.round(t),r=Math.round(r),p.appendChild(i.i(h.e)(\"div\",null,\"CodeMirror-selected\",\"position: absolute; left: \"+e+\"px;\\n                             top: \"+t+\"px; width: \"+(null==n?m-e:n)+\"px;\\n                             height: \"+(r-t)+\"px\"))}function o(t,n,o){function a(n,r){return i.i(f.q)(e,i.i(s.a)(t,n),\"div\",c,r)}var c=i.i(u.d)(l,t),h=c.text.length,p=void 0,v=void 0;return i.i(d.d)(i.i(d.a)(c,l.direction),n||0,null==o?h:o,function(e,t,i){var l=a(e,\"left\"),s=void 0,c=void 0,u=void 0;if(e==t)s=l,c=u=l.left;else{if(s=a(t-1,\"right\"),\"rtl\"==i){var f=l;l=s,s=f}c=l.left,u=s.right}null==n&&0==e&&(c=g),s.top-l.top>3&&(r(c,l.top,null,l.bottom),c=g,l.bottom<s.top&&r(c,l.bottom,null,s.top)),null==o&&t==h&&(u=m),(!p||l.top<p.top||l.top==p.top&&l.left<p.left)&&(p=l),(!v||s.bottom>v.bottom||s.bottom==v.bottom&&s.right>v.right)&&(v=s),c<g+1&&(c=g),r(c,s.top,u-c,s.bottom)}),{start:p,end:v}}var a=e.display,l=e.doc,p=document.createDocumentFragment(),v=i.i(f.p)(e.display),g=v.left,m=Math.max(a.sizerWidth,i.i(f.l)(e)-a.sizer.offsetLeft)-v.right,b=t.from(),y=t.to();if(b.line==y.line)o(b.line,b.ch,y.ch);else{var w=i.i(u.d)(l,b.line),x=i.i(u.d)(l,y.line),C=i.i(c.e)(w)==i.i(c.e)(x),k=o(b.line,b.ch,C?w.text.length+1:null).end,S=o(y.line,C?0:null,y.ch).start;C&&(k.top<S.top-2?(r(k.right,k.top,null,k.bottom),r(g,S.top,S.left,S.bottom)):r(k.right,k.top,S.left-k.right,k.bottom)),k.bottom<S.top&&r(g,k.bottom,null,S.top)}n.appendChild(p)}function l(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var i=!0;t.cursorDiv.style.visibility=\"\",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(i=!i)?\"\":\"hidden\"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility=\"hidden\")}}var s=i(3),c=i(7),u=i(4),f=i(6),d=i(32),h=i(1);t.a=n,t.c=r,t.d=o,t.b=l},function(e,t,i){\"use strict\";function n(e,t,n,r){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),i.i(M.j)(e),i.i(M.i)(e,n);var o=r?r(e):1;o!=e.height&&i.i(T.b)(e,o)}function r(e){e.parent=null,i.i(M.j)(e)}function o(e,t){if(!e||/^\\s*$/.test(e))return null;var i=t.addModeClass?O:A;return i[e]||(i[e]=e.replace(/\\S+/g,\"cm-$&\"))}function a(e,t){var n=i.i(x.h)(\"span\",null,null,w.g?\"padding-right: .1px\":null),r={pre:i.i(x.h)(\"pre\",[n],\"CodeMirror-line\"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:(w.b||w.g)&&e.getOption(\"lineWrapping\")};t.measure={};for(var o=0;o<=(t.rest?t.rest.length:0);o++){var a=o?t.rest[o-1]:t.line,l=void 0;r.pos=0,r.addToken=s,i.i(k.c)(e.display.measure)&&(l=i.i(y.a)(a,e.doc.direction))&&(r.addToken=u(r.addToken,l)),r.map=[];var c=t!=e.display.externalMeasured&&i.i(T.a)(a);d(a,r,i.i(L.a)(e,a,c)),a.styleClasses&&(a.styleClasses.bgClass&&(r.bgClass=i.i(x.i)(a.styleClasses.bgClass,r.bgClass||\"\")),a.styleClasses.textClass&&(r.textClass=i.i(x.i)(a.styleClasses.textClass,r.textClass||\"\"))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(i.i(k.d)(e.display.measure))),0==o?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(w.g){var f=r.content.lastChild;(/\\bcm-tab\\b/.test(f.className)||f.querySelector&&f.querySelector(\".cm-tab\"))&&(r.content.className=\"cm-tab-wrap-hack\")}return i.i(C.d)(e,\"renderLine\",e,t.line,r.pre),r.pre.className&&(r.textClass=i.i(x.i)(r.pre.className,r.textClass||\"\")),r}function l(e){var t=i.i(x.e)(\"span\",\"•\",\"cm-invalidchar\");return t.title=\"\\\\u\"+e.charCodeAt(0).toString(16),t.setAttribute(\"aria-label\",t.title),t}function s(e,t,n,r,o,a,l){if(t){var s=e.splitSpaces?c(t,e.trailingSpace):t,u=e.cm.state.specialChars,f=!1,d=void 0;if(u.test(t)){d=document.createDocumentFragment();for(var h=0;;){u.lastIndex=h;var p=u.exec(t),v=p?p.index-h:t.length-h;if(v){var g=document.createTextNode(s.slice(h,h+v));w.b&&w.d<9?d.appendChild(i.i(x.e)(\"span\",[g])):d.appendChild(g),e.map.push(e.pos,e.pos+v,g),e.col+=v,e.pos+=v}if(!p)break;h+=v+1;var m=void 0;if(\"\\t\"==p[0]){var b=e.cm.options.tabSize,y=b-e.col%b;m=d.appendChild(i.i(x.e)(\"span\",i.i(S.m)(y),\"cm-tab\")),m.setAttribute(\"role\",\"presentation\"),m.setAttribute(\"cm-text\",\"\\t\"),e.col+=y}else\"\\r\"==p[0]||\"\\n\"==p[0]?(m=d.appendChild(i.i(x.e)(\"span\",\"\\r\"==p[0]?\"␍\":\"␤\",\"cm-invalidchar\")),m.setAttribute(\"cm-text\",p[0]),e.col+=1):(m=e.cm.options.specialCharPlaceholder(p[0]),m.setAttribute(\"cm-text\",p[0]),w.b&&w.d<9?d.appendChild(i.i(x.e)(\"span\",[m])):d.appendChild(m),e.col+=1);e.map.push(e.pos,e.pos+1,m),e.pos++}}else e.col+=t.length,d=document.createTextNode(s),e.map.push(e.pos,e.pos+t.length,d),w.b&&w.d<9&&(f=!0),e.pos+=t.length;if(e.trailingSpace=32==s.charCodeAt(t.length-1),n||r||o||f||l){var C=n||\"\";r&&(C+=r),o&&(C+=o);var k=i.i(x.e)(\"span\",[d],C,l);return a&&(k.title=a),e.content.appendChild(k)}e.content.appendChild(d)}}function c(e,t){if(e.length>1&&!/  /.test(e))return e;for(var i=t,n=\"\",r=0;r<e.length;r++){var o=e.charAt(r);\" \"!=o||!i||r!=e.length-1&&32!=e.charCodeAt(r+1)||(o=\" \"),n+=o,i=\" \"==o}return n}function u(e,t){return function(i,n,r,o,a,l,s){r=r?r+\" cm-force-border\":\"cm-force-border\";for(var c=i.pos,u=c+n.length;;){for(var f=void 0,d=0;d<t.length&&(f=t[d],!(f.to>c&&f.from<=c));d++);if(f.to>=u)return e(i,n,r,o,a,l,s);e(i,n.slice(0,f.to-c),r,o,null,l,s),o=null,n=n.slice(f.to-c),c=f.to}}}function f(e,t,i,n){var r=!n&&i.widgetNode;r&&e.map.push(e.pos,e.pos+t,r),!n&&e.cm.display.input.needsContentAttribute&&(r||(r=e.content.appendChild(document.createElement(\"span\"))),r.setAttribute(\"cm-marker\",i.id)),r&&(e.cm.display.input.setUneditable(r),e.content.appendChild(r)),e.pos+=t,e.trailingSpace=!1}function d(e,t,n){var r=e.markedSpans,a=e.text,l=0;if(r)for(var s=a.length,c=0,u=1,d=\"\",h=void 0,p=void 0,v=0,g=void 0,m=void 0,b=void 0,y=void 0,w=void 0;;){if(v==c){g=m=b=y=p=\"\",w=null,v=1/0;for(var x=[],C=void 0,k=0;k<r.length;++k){var S=r[k],L=S.marker;\"bookmark\"==L.type&&S.from==c&&L.widgetNode?x.push(L):S.from<=c&&(null==S.to||S.to>c||L.collapsed&&S.to==c&&S.from==c)?(null!=S.to&&S.to!=c&&v>S.to&&(v=S.to,m=\"\"),L.className&&(g+=\" \"+L.className),L.css&&(p=(p?p+\";\":\"\")+L.css),L.startStyle&&S.from==c&&(b+=\" \"+L.startStyle),L.endStyle&&S.to==v&&(C||(C=[])).push(L.endStyle,S.to),L.title&&!y&&(y=L.title),L.collapsed&&(!w||i.i(M.k)(w.marker,L)<0)&&(w=S)):S.from>c&&v>S.from&&(v=S.from)}if(C)for(var T=0;T<C.length;T+=2)C[T+1]==v&&(m+=\" \"+C[T]);if(!w||w.from==c)for(var _=0;_<x.length;++_)f(t,0,x[_]);if(w&&(w.from||0)==c){if(f(t,(null==w.to?s+1:w.to)-c,w.marker,null==w.from),null==w.to)return;w.to==c&&(w=!1)}}if(c>=s)break;for(var A=Math.min(s,v);;){if(d){var O=c+d.length;if(!w){var D=O>A?d.slice(0,A-c):d;t.addToken(t,D,h?h+g:g,b,c+D.length==v?m:\"\",y,p)}if(O>=A){d=d.slice(A-c),c=A;break}c=O,b=\"\"}d=a.slice(l,l=n[u++]),h=o(n[u++],t.cm.options)}}else for(var N=1;N<n.length;N+=2)t.addToken(t,a.slice(l,l=n[N]),o(n[N+1],t.cm.options))}function h(e,t,n){this.line=t,this.rest=i.i(M.l)(t),this.size=this.rest?i.i(T.a)(i.i(S.f)(this.rest))-n+1:1,this.node=this.text=null,this.hidden=i.i(M.b)(e,t)}function p(e,t,n){for(var r=[],o=void 0,a=t;a<n;a=o){var l=new h(e.doc,i.i(T.d)(e.doc,a),a);o=a+l.size,r.push(l)}return r}var v=i(16),g=i.n(v),m=i(17),b=i.n(m),y=i(32),w=i(5),x=i(1),C=i(2),k=i(24),S=i(0),L=i(52),M=i(7),T=i(4);i.d(t,\"a\",function(){return _}),t.b=n,t.g=r,t.d=a,t.f=l,t.c=h,t.e=p;var _=function(){function e(t,n,r){g()(this,e),this.text=t,i.i(M.i)(this,n),this.height=r?r(this):1}return b()(e,[{key:\"lineNo\",value:function(){return i.i(T.a)(this)}}]),e}();i.i(C.a)(_);var A={},O={}},function(e,t,i){\"use strict\";function n(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!i.i(o.b)(document.body,e.node)){var n=\"position: relative;\";e.coverGutter&&(n+=\"margin-left: -\"+t.display.gutters.offsetWidth+\"px;\"),e.noHScroll&&(n+=\"width: \"+t.display.wrapper.clientWidth+\"px;\"),i.i(o.d)(t.display.measure,i.i(o.e)(\"div\",[e.node],null,n))}return e.height=e.node.parentNode.offsetHeight}function r(e,t){for(var n=i.i(a.j)(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&\"true\"==n.getAttribute(\"cm-ignore-events\")||n.parentNode==e.sizer&&n!=e.mover)return!0}var o=i(1),a=i(2);t.a=n,t.b=r},function(e,t,i){\"use strict\";function n(e,t,n){var r={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return r.canceled=!0}};return n&&(r.update=function(t,n,o,a){t&&(r.from=i.i(w.c)(e,t)),n&&(r.to=i.i(w.c)(e,n)),o&&(r.text=o),void 0!==a&&(r.origin=a)}),i.i(L.d)(e,\"beforeChange\",e,r),e.cm&&i.i(L.d)(e.cm,\"beforeChange\",e.cm,r),r.canceled?null:{from:r.from,to:r.to,text:r.text,origin:r.origin}}function r(e,t,a){if(e.cm){if(!e.cm.curOp)return i.i(b.b)(e.cm,r)(e,t,a);if(e.cm.state.suppressEdits)return}if(!(i.i(L.h)(e,\"beforeChange\")||e.cm&&i.i(L.h)(e.cm,\"beforeChange\"))||(t=n(e,t,!0))){var l=x.b&&!a&&i.i(C.c)(e,t.from,t.to);if(l)for(var s=l.length-1;s>=0;--s)o(e,{from:l[s].from,to:l[s].to,text:s?[\"\"]:t.text});else o(e,t)}}function o(e,t){if(1!=t.text.length||\"\"!=t.text[0]||0!=i.i(w.b)(t.from,t.to)){var n=i.i(_.b)(e,t);i.i(O.a)(e,t,n,e.cm?e.cm.curOp.id:NaN),s(e,t,n,i.i(C.d)(e,t));var r=[];i.i(A.a)(e,function(e,n){n||-1!=i.i(M.a)(r,e.history)||(h(e.history,t),r.push(e.history)),s(e,t,null,i.i(C.d)(e,t))})}}function a(e,t,r){if(!e.cm||!e.cm.state.suppressEdits||r){for(var o=e.history,a=void 0,l=e.sel,c=\"undo\"==t?o.done:o.undone,u=\"undo\"==t?o.undone:o.done,f=0;f<c.length&&(a=c[f],r?!a.ranges||a.equals(e.sel):a.ranges);f++);if(f!=c.length){for(o.lastOrigin=o.lastSelOrigin=null;a=c.pop(),a.ranges;){if(i.i(O.b)(a,u),r&&!a.equals(e.sel))return void i.i(N.a)(e,a,{clearRedo:!1});l=a}var d=[];i.i(O.b)(l,u),u.push({changes:d,generation:o.generation}),o.generation=a.generation||++o.maxGeneration;for(var p=i.i(L.h)(e,\"beforeChange\")||e.cm&&i.i(L.h)(e.cm,\"beforeChange\"),v=a.changes.length-1;v>=0;--v){var m=function(r){var o=a.changes[r];if(o.origin=t,p&&!n(e,o,!1))return c.length=0,{v:void 0};d.push(i.i(O.c)(e,o));var l=r?i.i(_.b)(e,o):i.i(M.f)(c);s(e,o,l,i.i(O.d)(e,o)),!r&&e.cm&&e.cm.scrollIntoView({from:o.from,to:i.i(_.a)(o)});var u=[];i.i(A.a)(e,function(e,t){t||-1!=i.i(M.a)(u,e.history)||(h(e.history,o),u.push(e.history)),s(e,o,null,i.i(O.d)(e,o))})}(v);if(\"object\"===(void 0===m?\"undefined\":g()(m)))return m.v}}}}function l(e,t){if(0!=t&&(e.first+=t,e.sel=new D.a(i.i(M.g)(e.sel.ranges,function(e){return new D.b(i.i(w.a)(e.anchor.line+t,e.anchor.ch),i.i(w.a)(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){i.i(y.b)(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;r<n.viewTo;r++)i.i(y.a)(e.cm,r,\"gutter\")}}function s(e,t,n,r){if(e.cm&&!e.cm.curOp)return i.i(b.b)(e.cm,s)(e,t,n,r);if(t.to.line<e.first)return void l(e,t.text.length-1-(t.to.line-t.from.line));if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var o=t.text.length-1-(e.first-t.from.line);l(e,o),t={from:i.i(w.a)(e.first,0),to:i.i(w.a)(t.to.line+o,t.to.ch),text:[i.i(M.f)(t.text)],origin:t.origin}}var a=e.lastLine();t.to.line>a&&(t={from:t.from,to:i.i(w.a)(a,i.i(k.d)(e,a).text.length),text:[t.text[0]],origin:t.origin}),t.removed=i.i(k.e)(e,t.from,t.to),n||(n=i.i(_.b)(e,t)),e.cm?c(e.cm,t,r):i.i(A.b)(e,t,r),i.i(N.b)(e,n,M.h)}}function c(e,t,n){var r=e.doc,o=e.display,a=t.from,l=t.to,s=!1,c=a.line;e.options.lineWrapping||(c=i.i(k.a)(i.i(C.e)(i.i(k.d)(r,a.line))),r.iter(c,l.line+1,function(e){if(e==o.maxLine)return s=!0,!0})),r.sel.contains(t.from,t.to)>-1&&i.i(L.i)(e),i.i(A.b)(r,t,n,i.i(S.a)(e)),e.options.lineWrapping||(r.iter(c,a.line+t.text.length,function(e){var t=i.i(C.f)(e);t>o.maxLineLength&&(o.maxLine=e,o.maxLineLength=t,o.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0)),r.frontier=Math.min(r.frontier,a.line),i.i(m.a)(e,400);var u=t.text.length-(l.line-a.line)-1;t.full?i.i(y.b)(e):a.line!=l.line||1!=t.text.length||i.i(A.c)(e.doc,t)?i.i(y.b)(e,a.line,l.line+1,u):i.i(y.a)(e,a.line,\"text\");var f=i.i(L.h)(e,\"changes\"),d=i.i(L.h)(e,\"change\");if(d||f){var h={from:a,to:l,text:t.text,removed:t.removed,origin:t.origin};d&&i.i(T.a)(e,\"change\",e,h),f&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(h)}e.display.selForContextMenu=null}function u(e,t,n,o,a){if(o||(o=n),i.i(w.b)(o,n)<0){var l=o;o=n,n=l}\"string\"==typeof t&&(t=e.splitLines(t)),r(e,{from:n,to:o,text:t,origin:a})}function f(e,t,i,n){i<e.line?e.line+=n:t<e.line&&(e.line=t,e.ch=0)}function d(e,t,n,r){for(var o=0;o<e.length;++o){var a=e[o],l=!0;if(a.ranges){a.copied||(a=e[o]=a.deepCopy(),a.copied=!0);for(var s=0;s<a.ranges.length;s++)f(a.ranges[s].anchor,t,n,r),f(a.ranges[s].head,t,n,r)}else{for(var c=0;c<a.changes.length;++c){var u=a.changes[c];if(n<u.from.line)u.from=i.i(w.a)(u.from.line+r,u.from.ch),u.to=i.i(w.a)(u.to.line+r,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,o+1),o=0)}}}function h(e,t){var i=t.from.line,n=t.to.line,r=t.text.length-(n-i)-1;d(e.done,i,n,r),d(e.undone,i,n,r)}function p(e,t,n,r){var o=t,a=t;return\"number\"==typeof t?a=i.i(k.d)(e,i.i(w.d)(e,t)):o=i.i(k.a)(t),null==o?null:(r(a,o)&&e.cm&&i.i(y.a)(e.cm,o,n),a)}var v=i(66),g=i.n(v),m=i(47),b=i(8),y=i(18),w=i(3),x=i(39),C=i(7),k=i(4),S=i(6),L=i(2),M=i(0),T=i(15),_=i(40),A=i(31),O=i(53),D=i(9),N=i(14);t.c=r,t.d=a,t.b=u,t.a=p},function(e,t,i){\"use strict\";function n(e){if(null==c){var t=i.i(a.e)(\"span\",\"​\");i.i(a.d)(e,i.i(a.e)(\"span\",[t,document.createTextNode(\"x\")])),0!=e.firstChild.offsetHeight&&(c=t.offsetWidth<=1&&t.offsetHeight>2&&!(l.b&&l.d<8))}var n=c?i.i(a.e)(\"span\",\"​\"):i.i(a.e)(\"span\",\" \",null,\"display: inline-block; width: 1px; margin-right: -1px\");return n.setAttribute(\"cm-text\",\"\"),n}function r(e){if(null!=u)return u;var t=i.i(a.d)(e,document.createTextNode(\"AخA\")),n=i.i(a.f)(t,0,1).getBoundingClientRect(),r=i.i(a.f)(t,1,2).getBoundingClientRect();return i.i(a.g)(e),!(!n||n.left==n.right)&&(u=r.right-n.right<3)}function o(e){if(null!=p)return p;var t=i.i(a.d)(e,i.i(a.e)(\"span\",\"x\")),n=t.getBoundingClientRect(),r=i.i(a.f)(t,0,1).getBoundingClientRect();return p=Math.abs(n.left-r.left)>1}var a=i(1),l=i(5);i.d(t,\"g\",function(){return s}),t.d=n,t.c=r,i.d(t,\"a\",function(){return f}),i.d(t,\"f\",function(){return d}),i.d(t,\"e\",function(){return h}),t.b=o;var s=function(){if(l.b&&l.d<9)return!1;var e=i.i(a.e)(\"div\");return\"draggable\"in e||\"dragDrop\"in e}(),c=void 0,u=void 0,f=3!=\"\\n\\nb\".split(/\\n/).length?function(e){for(var t=0,i=[],n=e.length;t<=n;){var r=e.indexOf(\"\\n\",t);-1==r&&(r=e.length);var o=e.slice(t,\"\\r\"==e.charAt(r-1)?r-1:r),a=o.indexOf(\"\\r\");-1!=a?(i.push(o.slice(0,a)),t+=a+1):(i.push(o),t=r+1)}return i}:function(e){return e.split(/\\r\\n?|\\n/)},d=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t=void 0;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints(\"StartToEnd\",t)},h=function(){var e=i.i(a.e)(\"div\");return\"oncopy\"in e||(e.setAttribute(\"oncopy\",\"return;\"),\"function\"==typeof e.oncopy)}(),p=null},,,,,,,function(e,t,i){\"use strict\";function n(e,t){return 0==t.from.ch&&0==t.to.ch&&\"\"==i.i(m.f)(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function r(e,t,r,o){function a(e){return r?r[e]:null}function l(e,n,r){i.i(d.b)(e,n,r,o),i.i(b.a)(e,\"change\",e,t)}function s(e,t){for(var i=[],n=e;n<t;++n)i.push(new d.a(f[n],a(n),o));return i}var c=t.from,u=t.to,f=t.text,h=i.i(p.d)(e,c.line),v=i.i(p.d)(e,u.line),g=i.i(m.f)(f),y=a(f.length-1),w=u.line-c.line;if(t.full)e.insert(0,s(0,f.length)),e.remove(f.length,e.size-f.length);else if(n(e,t)){var x=s(0,f.length-1);l(v,v.text,y),w&&e.remove(c.line,w),x.length&&e.insert(c.line,x)}else if(h==v)if(1==f.length)l(h,h.text.slice(0,c.ch)+g+h.text.slice(u.ch),y);else{var C=s(1,f.length-1);C.push(new d.a(g+h.text.slice(u.ch),y,o)),l(h,h.text.slice(0,c.ch)+f[0],a(0)),e.insert(c.line+1,C)}else if(1==f.length)l(h,h.text.slice(0,c.ch)+f[0]+v.text.slice(u.ch),a(0)),e.remove(c.line+1,w);else{l(h,h.text.slice(0,c.ch)+f[0],a(0)),l(v,g+v.text.slice(u.ch),y);var k=s(1,f.length-1);w>1&&e.remove(c.line+1,w-1),e.insert(c.line+1,k)}i.i(b.a)(e,\"change\",e,t)}function o(e,t,i){function n(e,r,o){if(e.linked)for(var a=0;a<e.linked.length;++a){var l=e.linked[a];if(l.doc!=r){var s=o&&l.sharedHist;i&&!s||(t(l.doc,s),n(l.doc,e,s))}}}n(e,null,!0)}function a(e,t){if(t.cm)throw new Error(\"This document is already in use.\");e.doc=t,t.cm=e,i.i(v.b)(e),i.i(c.a)(e),l(e),e.options.lineWrapping||i.i(h.g)(e),e.options.mode=t.modeOption,i.i(f.b)(e)}function l(e){(\"rtl\"==e.doc.direction?g.a:g.c)(e.display.lineDiv,\"CodeMirror-rtl\")}function s(e){i.i(u.a)(e,function(){l(e),i.i(f.b)(e)})}var c=i(88),u=i(8),f=i(18),d=i(21),h=i(7),p=i(4),v=i(6),g=i(1),m=i(0),b=i(15);t.c=n,t.b=r,t.a=o,t.e=a,t.d=s},function(e,t,i){\"use strict\";function n(e,t,i,n){if(!e)return n(t,i,\"ltr\");for(var r=!1,o=0;o<e.length;++o){var a=e[o];(a.from<i&&a.to>t||t==i&&a.to==t)&&(n(Math.max(a.from,t),Math.min(a.to,i),1==a.level?\"rtl\":\"ltr\"),r=!0)}r||n(t,i,\"ltr\")}function r(e,t,i){var n=void 0;l=null;for(var r=0;r<e.length;++r){var o=e[r];if(o.from<t&&o.to>t)return r;o.to==t&&(o.from!=o.to&&\"before\"==i?n=r:l=r),o.from==t&&(o.from!=o.to&&\"before\"!=i?n=r:l=r)}return null!=n?n:l}function o(e,t){var i=e.order;return null==i&&(i=e.order=s(e.text,t)),i}var a=i(0);t.d=n,i.d(t,\"c\",function(){return l}),t.b=r,t.a=o;var l=null,s=function(){function e(e){return e<=247?n.charAt(e):1424<=e&&e<=1524?\"R\":1536<=e&&e<=1785?r.charAt(e-1536):1774<=e&&e<=2220?\"r\":8192<=e&&e<=8203?\"w\":8204==e?\"b\":\"L\"}function t(e,t,i){this.level=e,this.from=t,this.to=i}var n=\"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\",r=\"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\",o=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/,l=/[stwN]/,s=/[LRr]/,c=/[Lb1n]/,u=/[1n]/;return function(n,r){var f=\"ltr\"==r?\"L\":\"R\";if(0==n.length||\"ltr\"==r&&!o.test(n))return!1;for(var d=n.length,h=[],p=0;p<d;++p)h.push(e(n.charCodeAt(p)));for(var v=0,g=f;v<d;++v){var m=h[v];\"m\"==m?h[v]=g:g=m}for(var b=0,y=f;b<d;++b){var w=h[b];\"1\"==w&&\"r\"==y?h[b]=\"n\":s.test(w)&&(y=w,\"r\"==w&&(h[b]=\"R\"))}for(var x=1,C=h[0];x<d-1;++x){var k=h[x];\"+\"==k&&\"1\"==C&&\"1\"==h[x+1]?h[x]=\"1\":\",\"!=k||C!=h[x+1]||\"1\"!=C&&\"n\"!=C||(h[x]=C),C=k}for(var S=0;S<d;++S){var L=h[S];if(\",\"==L)h[S]=\"N\";else if(\"%\"==L){var M=void 0;for(M=S+1;M<d&&\"%\"==h[M];++M);for(var T=S&&\"!\"==h[S-1]||M<d&&\"1\"==h[M]?\"1\":\"N\",_=S;_<M;++_)h[_]=T;S=M-1}}for(var A=0,O=f;A<d;++A){var D=h[A];\"L\"==O&&\"1\"==D?h[A]=\"L\":s.test(D)&&(O=D)}for(var N=0;N<d;++N)if(l.test(h[N])){var W=void 0;for(W=N+1;W<d&&l.test(h[W]);++W);for(var E=\"L\"==(N?h[N-1]:f),H=\"L\"==(W<d?h[W]:f),P=E==H?E?\"L\":\"R\":f,I=N;I<W;++I)h[I]=P;N=W-1}for(var R=[],z=void 0,F=0;F<d;)if(c.test(h[F])){var B=F;for(++F;F<d&&c.test(h[F]);++F);R.push(new t(0,B,F))}else{var j=F,V=R.length;for(++F;F<d&&\"L\"!=h[F];++F);for(var U=j;U<F;)if(u.test(h[U])){j<U&&R.splice(V,0,new t(1,j,U));var G=U;for(++U;U<F&&u.test(h[U]);++U);R.splice(V,0,new t(2,G,U)),j=U}else++U;j<F&&R.splice(V,0,new t(1,j,F))}return 1==R[0].level&&(z=n.match(/^\\s+/))&&(R[0].from=z[0].length,R.unshift(new t(0,0,z[0].length))),1==i.i(a.f)(R).level&&(z=n.match(/\\s+$/))&&(i.i(a.f)(R).to-=z[0].length,R.push(new t(0,d-z[0].length,d))),\"rtl\"==r?R.reverse():R}}()},,,function(e,t,i){\"use strict\";function n(e){e.state.focused||(e.display.input.focus(),o(e))}function r(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,a(e))},100)}function o(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),\"nocursor\"!=e.options.readOnly&&(e.state.focused||(i.i(u.d)(e,\"focus\",e,t),e.state.focused=!0,i.i(c.a)(e.display.wrapper,\"CodeMirror-focused\"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),s.g&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),i.i(l.b)(e))}function a(e,t){e.state.delayingBlurEvent||(e.state.focused&&(i.i(u.d)(e,\"blur\",e,t),e.state.focused=!1,i.i(c.c)(e.display.wrapper,\"CodeMirror-focused\")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}var l=i(20),s=i(5),c=i(1),u=i(2);t.a=n,t.d=r,t.b=o,t.c=a},function(e,t,i){\"use strict\";function n(e,t){Math.abs(e.doc.scrollTop-t)<2||(e.doc.scrollTop=t,s.i||i.i(d.a)(e,{top:t}),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t),e.display.scrollbars.setScrollTop(t),s.i&&i.i(d.a)(e),i.i(u.a)(e,100))}function r(e,t,n,r){(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),e.doc.scrollLeft=t,i.i(f.a)(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function o(e){var t=e.wheelDeltaX,i=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==i&&e.detail&&e.axis==e.VERTICAL_AXIS?i=e.detail:null==i&&(i=e.wheelDelta),{x:t,y:i}}function a(e){var t=o(e);return t.x*=p,t.y*=p,t}function l(e,t){var a=o(t),l=a.x,u=a.y,f=e.display,v=f.scroller,g=v.scrollWidth>v.clientWidth,m=v.scrollHeight>v.clientHeight;if(l&&g||u&&m){if(u&&s.c&&s.g)e:for(var b=t.target,y=f.view;b!=v;b=b.parentNode)for(var w=0;w<y.length;w++)if(y[w].node==b){e.display.currentWheelTarget=b;break e}if(l&&!s.i&&!s.k&&null!=p)return u&&m&&n(e,Math.max(0,Math.min(v.scrollTop+u*p,v.scrollHeight-v.clientHeight))),r(e,Math.max(0,Math.min(v.scrollLeft+l*p,v.scrollWidth-v.clientWidth))),(!u||u&&m)&&i.i(c.e)(t),void(f.wheelStartX=null);if(u&&null!=p){var x=u*p,C=e.doc.scrollTop,k=C+f.wrapper.clientHeight;x<0?C=Math.max(0,C+x-50):k=Math.min(e.doc.height,k+x+50),i.i(d.a)(e,{top:C,bottom:k})}h<20&&(null==f.wheelStartX?(f.wheelStartX=v.scrollLeft,f.wheelStartY=v.scrollTop,f.wheelDX=l,f.wheelDY=u,setTimeout(function(){if(null!=f.wheelStartX){var e=v.scrollLeft-f.wheelStartX,t=v.scrollTop-f.wheelStartY,i=t&&f.wheelDY&&t/f.wheelDY||e&&f.wheelDX&&e/f.wheelDX;f.wheelStartX=f.wheelStartY=null,i&&(p=(p*h+i)/(h+1),++h)}},200)):(f.wheelDX+=l,f.wheelDY+=u))}}var s=i(5),c=i(2),u=i(47),f=i(48),d=i(38);t.b=n,t.c=r,t.a=a,t.d=l;var h=0,p=null;s.b?p=-.53:s.i?p=15:s.e?p=-.7:s.j&&(p=-1/3)},function(e,t,i){\"use strict\";function n(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+i.i(h.k)(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+i.i(h.g)(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}function r(e,t){t||(t=n(e));var r=e.display.barWidth,a=e.display.barHeight;o(e,t);for(var l=0;l<4&&r!=e.display.barWidth||a!=e.display.barHeight;l++)r!=e.display.barWidth&&e.options.lineWrapping&&i.i(v.b)(e),o(e,n(e)),r=e.display.barWidth,a=e.display.barHeight}function o(e,t){var i=e.display,n=i.scrollbars.update(t);i.sizer.style.paddingRight=(i.barWidth=n.right)+\"px\",i.sizer.style.paddingBottom=(i.barHeight=n.bottom)+\"px\",i.heightForcer.style.borderBottom=n.bottom+\"px solid transparent\",n.right&&n.bottom?(i.scrollbarFiller.style.display=\"block\",i.scrollbarFiller.style.height=n.bottom+\"px\",i.scrollbarFiller.style.width=n.right+\"px\"):i.scrollbarFiller.style.display=\"\",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(i.gutterFiller.style.display=\"block\",i.gutterFiller.style.height=n.bottom+\"px\",i.gutterFiller.style.width=t.gutterWidth+\"px\"):i.gutterFiller.style.display=\"\"}function a(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&i.i(f.c)(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new w[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),i.i(d.c)(t,\"mousedown\",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute(\"cm-not-content\",\"true\")},function(t,n){\"horizontal\"==n?i.i(m.c)(e,t):i.i(m.b)(e,t)},e),e.display.scrollbars.addClass&&i.i(f.a)(e.display.wrapper,e.display.scrollbars.addClass)}var l=i(16),s=i.n(l),c=i(17),u=i.n(c),f=i(1),d=i(2),h=i(6),p=i(5),v=i(49),g=i(0),m=i(36);t.b=n,t.c=r,i.d(t,\"a\",function(){return w}),t.d=a;var b=function(){function e(t,n,r){s()(this,e),this.cm=r;var o=this.vert=i.i(f.e)(\"div\",[i.i(f.e)(\"div\",null,null,\"min-width: 1px\")],\"CodeMirror-vscrollbar\"),a=this.horiz=i.i(f.e)(\"div\",[i.i(f.e)(\"div\",null,null,\"height: 100%; min-height: 1px\")],\"CodeMirror-hscrollbar\");t(o),t(a),i.i(d.c)(o,\"scroll\",function(){o.clientHeight&&n(o.scrollTop,\"vertical\")}),i.i(d.c)(a,\"scroll\",function(){a.clientWidth&&n(a.scrollLeft,\"horizontal\")}),this.checkedZeroWidth=!1,p.b&&p.d<8&&(this.horiz.style.minHeight=this.vert.style.minWidth=\"18px\")}return u()(e,[{key:\"update\",value:function(e){var t=e.scrollWidth>e.clientWidth+1,i=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(i){this.vert.style.display=\"block\",this.vert.style.bottom=t?n+\"px\":\"0\";var r=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+r)+\"px\"}else this.vert.style.display=\"\",this.vert.firstChild.style.height=\"0\";if(t){this.horiz.style.display=\"block\",this.horiz.style.right=i?n+\"px\":\"0\",this.horiz.style.left=e.barLeft+\"px\";var o=e.viewWidth-e.barLeft-(i?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+\"px\"}else this.horiz.style.display=\"\",this.horiz.firstChild.style.width=\"0\";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:i?n:0,bottom:t?n:0}}},{key:\"setScrollLeft\",value:function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,\"horiz\")}},{key:\"setScrollTop\",value:function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,\"vert\")}},{key:\"zeroWidthHack\",value:function(){var e=p.c&&!p.l?\"12px\":\"18px\";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents=\"none\",this.disableHoriz=new g.o,this.disableVert=new g.o}},{key:\"enableZeroWidthBar\",value:function(e,t,i){function n(){var r=e.getBoundingClientRect();(\"vert\"==i?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1))!=e?e.style.pointerEvents=\"none\":t.set(1e3,n)}e.style.pointerEvents=\"auto\",t.set(1e3,n)}},{key:\"clear\",value:function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)}}]),e}(),y=function(){function e(){s()(this,e)}return u()(e,[{key:\"update\",value:function(){return{bottom:0,right:0}}},{key:\"setScrollLeft\",value:function(){}},{key:\"setScrollTop\",value:function(){}},{key:\"clear\",value:function(){}}]),e}(),w={native:b,null:y}},function(e,t,i){\"use strict\";function n(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=i.i(m.g)(e)+\"px\",t.sizer.style.marginBottom=-t.nativeBarWidth+\"px\",t.sizer.style.borderRightWidth=i.i(m.g)(e)+\"px\",t.scrollbarsClipped=!0)}function r(e,t){var n=e.display,r=e.doc;if(t.editorIsHidden)return i.i(_.c)(e),!1;if(!t.force&&t.visible.from>=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==i.i(_.d)(e))return!1;i.i(S.b)(e)&&(i.i(_.c)(e),t.dims=i.i(m.o)(e));var o=r.first+r.size,a=Math.max(t.visible.from-e.options.viewportMargin,r.first),s=Math.min(o,t.visible.to+e.options.viewportMargin);n.viewFrom<a&&a-n.viewFrom<20&&(a=Math.max(r.first,n.viewFrom)),n.viewTo>s&&n.viewTo-s<20&&(s=Math.min(o,n.viewTo)),p.a&&(a=i.i(v.m)(e.doc,a),s=i.i(v.n)(e.doc,s));var c=a!=n.viewFrom||s!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;i.i(_.e)(e,a,s),n.viewOffset=i.i(v.a)(i.i(g.d)(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+\"px\";var u=i.i(_.d)(e);if(!c&&0==u&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var f=i.i(y.j)();return u>4&&(n.lineDiv.style.display=\"none\"),l(e,n.updateLineNumbers,t.dims),u>4&&(n.lineDiv.style.display=\"\"),n.renderedView=n.view,f&&i.i(y.j)()!=f&&f.offsetHeight&&f.focus(),i.i(y.g)(n.cursorDiv),i.i(y.g)(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,c&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,i.i(k.a)(e,400)),n.updateLineNumbers=null,!0}function o(e,t){for(var n=t.viewport,o=!0;(o&&e.options.lineWrapping&&t.oldDisplayWidth!=i.i(m.l)(e)||(n&&null!=n.top&&(n={top:Math.min(e.doc.height+i.i(m.k)(e.display)-i.i(m.j)(e),n.top)}),t.visible=i.i(T.a)(e.display,e.doc,n),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&r(e,t);o=!1){i.i(T.b)(e);var a=i.i(L.b)(e);i.i(M.a)(e),i.i(L.c)(e,a),c(e,a)}t.signal(e,\"update\",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,\"viewportChange\",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function a(e,t){var n=new A(e,t);if(r(e,n)){i.i(T.b)(e),o(e,n);var a=i.i(L.b)(e);i.i(M.a)(e),i.i(L.c)(e,a),c(e,a),n.finish()}}function l(e,t,n){function r(t){var i=t.nextSibling;return b.g&&b.c&&e.display.currentWheelTarget==t?t.style.display=\"none\":t.parentNode.removeChild(t),i}for(var o=e.display,a=e.options.lineNumbers,l=o.lineDiv,s=l.firstChild,c=o.view,u=o.viewFrom,f=0;f<c.length;f++){var d=c[f];if(d.hidden);else if(d.node&&d.node.parentNode==l){for(;s!=d.node;)s=r(s);var h=a&&null!=t&&t<=u&&d.lineNumber;d.changes&&(i.i(x.a)(d.changes,\"gutter\")>-1&&(h=!1),i.i(C.a)(e,d,u,n)),h&&(i.i(y.g)(d.lineNumber),d.lineNumber.appendChild(document.createTextNode(i.i(g.g)(e.options,u)))),s=d.node.nextSibling}else{var p=i.i(C.b)(e,d,u,n);l.insertBefore(p,s)}u+=d.size}for(;s;)s=r(s)}function s(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+\"px\"}function c(e,t){e.display.sizer.style.minHeight=t.docHeight+\"px\",e.display.heightForcer.style.top=t.docHeight+\"px\",e.display.gutters.style.height=t.docHeight+e.display.barHeight+i.i(m.g)(e)+\"px\"}var u=i(16),f=i.n(u),d=i(17),h=i.n(d),p=i(39),v=i(7),g=i(4),m=i(6),b=i(5),y=i(1),w=i(2),x=i(0),C=i(89),k=i(47),S=i(48),L=i(37),M=i(20),T=i(49),_=i(18);i.d(t,\"d\",function(){return A}),t.c=n,t.e=r,t.g=o,t.a=a,t.b=s,t.f=c;var A=function(){function e(t,n,r){f()(this,e);var o=t.display;this.viewport=n,this.visible=i.i(T.a)(o,t.doc,n),this.editorIsHidden=!o.wrapper.offsetWidth,this.wrapperHeight=o.wrapper.clientHeight,this.wrapperWidth=o.wrapper.clientWidth,this.oldDisplayWidth=i.i(m.l)(t),this.force=r,this.dims=i.i(m.o)(t),this.events=[]}return h()(e,[{key:\"signal\",value:function(e,t){i.i(w.h)(e,t)&&this.events.push(arguments)}},{key:\"finish\",value:function(){for(var e=0;e<this.events.length;e++)w.d.apply(null,this.events[e])}}]),e}()},function(e,t,i){\"use strict\";function n(){o=!0}function r(){a=!0}i.d(t,\"b\",function(){return o}),i.d(t,\"a\",function(){return a}),t.d=n,t.c=r;var o=!1,a=!1},function(e,t,i){\"use strict\";function n(e){return e.text?i.i(s.a)(e.from.line+e.text.length-1,i.i(c.f)(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function r(e,t){if(i.i(s.b)(e,t.from)<0)return e;if(i.i(s.b)(e,t.to)<=0)return n(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,o=e.ch;return e.line==t.to.line&&(o+=n(t).ch-t.to.ch),i.i(s.a)(r,o)}function o(e,t){for(var n=[],o=0;o<e.sel.ranges.length;o++){var a=e.sel.ranges[o];n.push(new u.b(r(a.anchor,t),r(a.head,t)))}return i.i(u.c)(n,e.sel.primIndex)}function a(e,t,n){return e.line==t.line?i.i(s.a)(n.line,e.ch-t.ch+n.ch):i.i(s.a)(n.line+(e.line-t.line),e.ch)}function l(e,t,r){for(var o=[],l=i.i(s.a)(e.first,0),c=l,f=0;f<t.length;f++){var d=t[f],h=a(d.from,l,c),p=a(n(d),l,c);if(l=d.to,c=p,\"around\"==r){var v=e.sel.ranges[f],g=i.i(s.b)(v.head,v.anchor)<0;o[f]=new u.b(g?p:h,g?h:p)}else o[f]=new u.b(h,h)}return new u.a(o,e.sel.primIndex)}var s=i(3),c=i(0),u=i(9);t.a=n,t.b=o,t.c=l},function(e,t,i){\"use strict\";function n(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),d[e]=t}function r(e,t){h[e]=t}function o(e){if(\"string\"==typeof e&&h.hasOwnProperty(e))e=h[e];else if(e&&\"string\"==typeof e.name&&h.hasOwnProperty(e.name)){var t=h[e.name];\"string\"==typeof t&&(t={name:t}),e=i.i(f.r)(t,e),e.name=t.name}else{if(\"string\"==typeof e&&/^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(e))return o(\"application/xml\");if(\"string\"==typeof e&&/^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(e))return o(\"application/json\")}return\"string\"==typeof e?{name:e}:e||{name:\"null\"}}function a(e,t){t=o(t);var i=d[t.name];if(!i)return a(e,\"text/plain\");var n=i(e,t);if(p.hasOwnProperty(t.name)){var r=p[t.name];for(var l in r)r.hasOwnProperty(l)&&(n.hasOwnProperty(l)&&(n[\"_\"+l]=n[l]),n[l]=r[l])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var s in t.modeProps)n[s]=t.modeProps[s];return n}function l(e,t){var n=p.hasOwnProperty(e)?p[e]:p[e]={};i.i(f.p)(t,n)}function s(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var i={};for(var n in t){var r=t[n];r instanceof Array&&(r=r.concat([])),i[n]=r}return i}function c(e,t){for(var i=void 0;e.innerMode&&(i=e.innerMode(t))&&i.mode!=e;)t=i.state,e=i.mode;return i||{mode:e,state:t}}function u(e,t,i){return!e.startState||e.startState(t,i)}var f=i(0);i.d(t,\"c\",function(){return d}),i.d(t,\"d\",function(){return h}),t.a=n,t.b=r,t.e=o,t.f=a,i.d(t,\"g\",function(){return p}),t.h=l,t.i=s,t.k=c,t.j=u;var d={},h={},p={}},,,,,,function(e,t,i){\"use strict\";function n(e,t){e.doc.mode.startState&&e.doc.frontier<e.display.viewTo&&e.state.highlight.set(t,i.i(l.n)(r,e))}function r(e){var t=e.doc;if(t.frontier<t.first&&(t.frontier=t.first),!(t.frontier>=e.display.viewTo)){var r=+new Date+e.options.workTime,l=i.i(a.i)(t.mode,i.i(o.b)(e,t.frontier)),u=[];t.iter(t.frontier,Math.min(t.first+t.size,e.display.viewTo+500),function(s){if(t.frontier>=e.display.viewFrom){var c=s.styles,f=s.text.length>e.options.maxHighlightLength,d=i.i(o.c)(e,s,f?i.i(a.i)(t.mode,l):l,!0);s.styles=d.styles;var h=s.styleClasses,p=d.classes;p?s.styleClasses=p:h&&(s.styleClasses=null);for(var v=!c||c.length!=s.styles.length||h!=p&&(!h||!p||h.bgClass!=p.bgClass||h.textClass!=p.textClass),g=0;!v&&g<c.length;++g)v=c[g]!=s.styles[g];v&&u.push(t.frontier),s.stateAfter=f?l:i.i(a.i)(t.mode,l)}else s.text.length<=e.options.maxHighlightLength&&i.i(o.d)(e,s.text,l),s.stateAfter=t.frontier%5==0?i.i(a.i)(t.mode,l):null;if(++t.frontier,+new Date>r)return n(e,e.options.workDelay),!0}),u.length&&i.i(s.a)(e,function(){for(var t=0;t<u.length;t++)i.i(c.a)(e,u[t],\"text\")})}}var o=i(52),a=i(41),l=i(0),s=i(8),c=i(18);t.a=n},function(e,t,i){\"use strict\";function n(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=i.i(a.n)(t)-t.scroller.scrollLeft+e.doc.scrollLeft,o=t.gutters.offsetWidth,l=r+\"px\",s=0;s<n.length;s++)if(!n[s].hidden){e.options.fixedGutter&&(n[s].gutter&&(n[s].gutter.style.left=l),n[s].gutterBackground&&(n[s].gutterBackground.style.left=l));var c=n[s].alignable;if(c)for(var u=0;u<c.length;u++)c[u].style.left=l}e.options.fixedGutter&&(t.gutters.style.left=r+o+\"px\")}}function r(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=i.i(o.g)(e.options,t.first+t.size-1),r=e.display;if(n.length!=r.lineNumChars){var a=r.measure.appendChild(i.i(l.e)(\"div\",[i.i(l.e)(\"div\",n)],\"CodeMirror-linenumber CodeMirror-gutter-elt\")),c=a.firstChild.offsetWidth,u=a.offsetWidth-c;return r.lineGutter.style.width=\"\",r.lineNumInnerWidth=Math.max(c,r.lineGutter.offsetWidth-u)+1,r.lineNumWidth=r.lineNumInnerWidth+u,r.lineNumChars=r.lineNumInnerWidth?n.length:-1,r.lineGutter.style.width=r.lineNumWidth+\"px\",i.i(s.b)(e),!0}return!1}var o=i(4),a=i(6),l=i(1),s=i(38);t.a=n,t.b=r},function(e,t,i){\"use strict\";function n(e){for(var t=e.display,n=t.lineDiv.offsetTop,o=0;o<t.view.length;o++){var a=t.view[o],u=void 0;if(!a.hidden){if(c.b&&c.d<8){var f=a.node.offsetTop+a.node.offsetHeight;u=f-n,n=f}else{var d=a.node.getBoundingClientRect();u=d.bottom-d.top}var h=a.line.height-u;if(u<2&&(u=i.i(s.i)(t)),(h>.001||h<-.001)&&(i.i(l.b)(a.line,u),r(a.line),a.rest))for(var p=0;p<a.rest.length;p++)r(a.rest[p])}}}function r(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t)e.widgets[t].height=e.widgets[t].node.parentNode.offsetHeight}function o(e,t,n){var r=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop;r=Math.floor(r-i.i(s.f)(e));var o=n&&null!=n.bottom?n.bottom:r+e.wrapper.clientHeight,c=i.i(l.f)(t,r),u=i.i(l.f)(t,o);if(n&&n.ensure){var f=n.ensure.from.line,d=n.ensure.to.line;f<c?(c=f,u=i.i(l.f)(t,i.i(a.a)(i.i(l.d)(t,f))+e.wrapper.clientHeight)):Math.min(d,t.lastLine())>=u&&(c=i.i(l.f)(t,i.i(a.a)(i.i(l.d)(t,d))-e.wrapper.clientHeight),u=d)}return{from:c,to:Math.max(u,c+1)}}var a=i(7),l=i(4),s=i(6),c=i(5);t.b=n,t.a=o},function(e,t,i){\"use strict\";function n(e,t){var f=this;if(!(this instanceof n))return new n(e,t);this.options=t=t?i.i(x.p)(t):{},i.i(x.p)(T.b,t,!1),i.i(l.a)(t);var d=t.value;\"string\"==typeof d&&(d=new v.a(d,t.mode,null,t.lineSeparator,t.direction)),this.doc=d;var h=new n.inputStyles[t.inputStyle](this),p=this.display=new o.a(e,d,h);p.wrapper.CodeMirror=this,i.i(l.b)(this),i.i(M.a)(this),t.lineWrapping&&(this.display.wrapper.className+=\" CodeMirror-wrap\"),i.i(u.d)(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new x.o,keySeq:null,specialChars:null},t.autofocus&&!y.n&&p.input.focus(),y.b&&y.d<11&&setTimeout(function(){return f.display.input.reset(!0)},20),r(this),i.i(k.a)(),i.i(c.c)(this),this.curOp.forceUpdate=!0,i.i(g.e)(this,d),t.autofocus&&!y.n||this.hasFocus()?setTimeout(i.i(x.n)(a.b,this),20):i.i(a.c)(this);for(var m in T.c)T.c.hasOwnProperty(m)&&T.c[m](this,t[m],T.d);i.i(s.b)(this),t.finishInit&&t.finishInit(this);for(var b=0;b<_.length;++b)_[b](this);i.i(c.d)(this),y.g&&t.lineWrapping&&\"optimizelegibility\"==getComputedStyle(p.lineDiv).textRendering&&(p.lineDiv.style.textRendering=\"auto\")}function r(e){function t(){o.activeTouch&&(l=setTimeout(function(){return o.activeTouch=null},1e3),s=o.activeTouch,s.end=+new Date)}function n(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function r(e,t){if(null==t.left)return!0;var i=t.left-e.left,n=t.top-e.top;return i*i+n*n>400}var o=e.display;i.i(w.c)(o.scroller,\"mousedown\",i.i(c.b)(e,L.a)),y.b&&y.d<11?i.i(w.c)(o.scroller,\"dblclick\",i.i(c.b)(e,function(t){if(!i.i(w.k)(e,t)){var n=i.i(h.x)(e,t);if(n&&!i.i(L.b)(e,t)&&!i.i(p.b)(e.display,t)){i.i(w.e)(t);var r=e.findWordAt(n);i.i(b.g)(e.doc,r.anchor,r.head)}}})):i.i(w.c)(o.scroller,\"dblclick\",function(t){return i.i(w.k)(e,t)||i.i(w.e)(t)}),y.o||i.i(w.c)(o.scroller,\"contextmenu\",function(t){return i.i(L.c)(e,t)});var l=void 0,s={end:0};i.i(w.c)(o.scroller,\"touchstart\",function(t){if(!i.i(w.k)(e,t)&&!n(t)){o.input.ensurePolled(),clearTimeout(l);var r=+new Date;o.activeTouch={start:r,moved:!1,prev:r-s.end<=300?s:null},1==t.touches.length&&(o.activeTouch.left=t.touches[0].pageX,o.activeTouch.top=t.touches[0].pageY)}}),i.i(w.c)(o.scroller,\"touchmove\",function(){o.activeTouch&&(o.activeTouch.moved=!0)}),i.i(w.c)(o.scroller,\"touchend\",function(n){var a=o.activeTouch;if(a&&!i.i(p.b)(o,n)&&null!=a.left&&!a.moved&&new Date-a.start<300){var l=e.coordsChar(o.activeTouch,\"page\"),s=void 0;s=!a.prev||r(a,a.prev)?new m.b(l,l):!a.prev.prev||r(a,a.prev.prev)?e.findWordAt(l):new m.b(i.i(d.a)(l.line,0),i.i(d.c)(e.doc,i.i(d.a)(l.line+1,0))),e.setSelection(s.anchor,s.head),e.focus(),i.i(w.e)(n)}t()}),i.i(w.c)(o.scroller,\"touchcancel\",t),i.i(w.c)(o.scroller,\"scroll\",function(){o.scroller.clientHeight&&(i.i(f.b)(e,o.scroller.scrollTop),i.i(f.c)(e,o.scroller.scrollLeft,!0),i.i(w.d)(e,\"scroll\",e))}),i.i(w.c)(o.scroller,\"mousewheel\",function(t){return i.i(f.d)(e,t)}),i.i(w.c)(o.scroller,\"DOMMouseScroll\",function(t){return i.i(f.d)(e,t)}),i.i(w.c)(o.wrapper,\"scroll\",function(){return o.wrapper.scrollTop=o.wrapper.scrollLeft=0}),o.dragFunctions={enter:function(t){i.i(w.k)(e,t)||i.i(w.g)(t)},over:function(t){i.i(w.k)(e,t)||(i.i(C.a)(e,t),i.i(w.g)(t))},start:function(t){return i.i(C.b)(e,t)},drop:i.i(c.b)(e,C.c),leave:function(t){i.i(w.k)(e,t)||i.i(C.d)(e)}};var u=o.input.getField();i.i(w.c)(u,\"keyup\",function(t){return S.a.call(e,t)}),i.i(w.c)(u,\"keydown\",i.i(c.b)(e,S.b)),i.i(w.c)(u,\"keypress\",i.i(c.b)(e,S.c)),i.i(w.c)(u,\"focus\",function(t){return i.i(a.b)(e,t)}),i.i(w.c)(u,\"blur\",function(t){return i.i(a.c)(e,t)})}var o=i(135),a=i(35),l=i(87),s=i(48),c=i(8),u=i(37),f=i(36),d=i(3),h=i(6),p=i(22),v=i(65),g=i(31),m=i(9),b=i(14),y=i(5),w=i(2),x=i(0),C=i(136),k=i(138),S=i(91),L=i(142),M=i(93),T=i(92);t.a=n,n.defaults=T.b,n.optionHandlers=T.c,t.b=n;var _=[];n.defineInitHook=function(e){return _.push(e)}},function(e,t,i){\"use strict\";function n(e){var t=e.split(/-(?!$)/);e=t[t.length-1];for(var i=void 0,n=void 0,r=void 0,o=void 0,a=0;a<t.length-1;a++){var l=t[a];if(/^(cmd|meta|m)$/i.test(l))o=!0;else if(/^a(lt)?$/i.test(l))i=!0;else if(/^(c|ctrl|control)$/i.test(l))n=!0;else{if(!/^s(hift)?$/i.test(l))throw new Error(\"Unrecognized modifier name: \"+l);r=!0}}return i&&(e=\"Alt-\"+e),n&&(e=\"Ctrl-\"+e),o&&(e=\"Cmd-\"+e),r&&(e=\"Shift-\"+e),e}function r(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var o=e[r];if(/^(name|fallthrough|(de|at)tach)$/.test(r))continue;if(\"...\"==o){delete e[r];continue}for(var a=i.i(u.g)(r.split(\" \"),n),l=0;l<a.length;l++){var s=void 0,c=void 0;l==a.length-1?(c=a.join(\" \"),s=o):(c=a.slice(0,l+1).join(\" \"),s=\"...\");var f=t[c];if(f){if(f!=s)throw new Error(\"Inconsistent bindings for \"+c)}else t[c]=s}delete e[r]}for(var d in t)e[d]=t[d];return e}function o(e,t,i,n){t=s(t);var r=t.call?t.call(e,n):t[e];if(!1===r)return\"nothing\";if(\"...\"===r)return\"multi\";if(null!=r&&i(r))return\"handled\";if(t.fallthrough){if(\"[object Array]\"!=Object.prototype.toString.call(t.fallthrough))return o(e,t.fallthrough,i,n);for(var a=0;a<t.fallthrough.length;a++){var l=o(e,t.fallthrough[a],i,n);if(l)return l}}}function a(e){var t=\"string\"==typeof e?e:f.a[e.keyCode];return\"Ctrl\"==t||\"Alt\"==t||\"Shift\"==t||\"Mod\"==t}function l(e,t){if(c.k&&34==e.keyCode&&e.char)return!1;var i=f.a[e.keyCode],n=i;return null!=n&&!e.altGraphKey&&(e.altKey&&\"Alt\"!=i&&(n=\"Alt-\"+n),(c.m?e.metaKey:e.ctrlKey)&&\"Ctrl\"!=i&&(n=\"Ctrl-\"+n),(c.m?e.ctrlKey:e.metaKey)&&\"Cmd\"!=i&&(n=\"Cmd-\"+n),!t&&e.shiftKey&&\"Shift\"!=i&&(n=\"Shift-\"+n),n)}function s(e){return\"string\"==typeof e?d[e]:e}var c=i(5),u=i(0),f=i(95);i.d(t,\"a\",function(){return d}),t.e=r,t.d=o,t.c=a,t.b=l,t.f=s;var d={};d.basic={Left:\"goCharLeft\",Right:\"goCharRight\",Up:\"goLineUp\",Down:\"goLineDown\",End:\"goLineEnd\",Home:\"goLineStartSmart\",PageUp:\"goPageUp\",PageDown:\"goPageDown\",Delete:\"delCharAfter\",Backspace:\"delCharBefore\",\"Shift-Backspace\":\"delCharBefore\",Tab:\"defaultTab\",\"Shift-Tab\":\"indentAuto\",Enter:\"newlineAndIndent\",Insert:\"toggleOverwrite\",Esc:\"singleSelection\"},d.pcDefault={\"Ctrl-A\":\"selectAll\",\"Ctrl-D\":\"deleteLine\",\"Ctrl-Z\":\"undo\",\"Shift-Ctrl-Z\":\"redo\",\"Ctrl-Y\":\"redo\",\"Ctrl-Home\":\"goDocStart\",\"Ctrl-End\":\"goDocEnd\",\"Ctrl-Up\":\"goLineUp\",\"Ctrl-Down\":\"goLineDown\",\"Ctrl-Left\":\"goGroupLeft\",\"Ctrl-Right\":\"goGroupRight\",\"Alt-Left\":\"goLineStart\",\"Alt-Right\":\"goLineEnd\",\"Ctrl-Backspace\":\"delGroupBefore\",\"Ctrl-Delete\":\"delGroupAfter\",\"Ctrl-S\":\"save\",\"Ctrl-F\":\"find\",\"Ctrl-G\":\"findNext\",\"Shift-Ctrl-G\":\"findPrev\",\"Shift-Ctrl-F\":\"replace\",\"Shift-Ctrl-R\":\"replaceAll\",\"Ctrl-[\":\"indentLess\",\"Ctrl-]\":\"indentMore\",\"Ctrl-U\":\"undoSelection\",\"Shift-Ctrl-U\":\"redoSelection\",\"Alt-U\":\"redoSelection\",fallthrough:\"basic\"},d.emacsy={\"Ctrl-F\":\"goCharRight\",\"Ctrl-B\":\"goCharLeft\",\"Ctrl-P\":\"goLineUp\",\"Ctrl-N\":\"goLineDown\",\"Alt-F\":\"goWordRight\",\"Alt-B\":\"goWordLeft\",\"Ctrl-A\":\"goLineStart\",\"Ctrl-E\":\"goLineEnd\",\"Ctrl-V\":\"goPageDown\",\"Shift-Ctrl-V\":\"goPageUp\",\"Ctrl-D\":\"delCharAfter\",\"Ctrl-H\":\"delCharBefore\",\"Alt-D\":\"delWordAfter\",\"Alt-Backspace\":\"delWordBefore\",\"Ctrl-K\":\"killLine\",\"Ctrl-T\":\"transposeChars\",\"Ctrl-O\":\"openLine\"},d.macDefault={\"Cmd-A\":\"selectAll\",\"Cmd-D\":\"deleteLine\",\"Cmd-Z\":\"undo\",\"Shift-Cmd-Z\":\"redo\",\"Cmd-Y\":\"redo\",\"Cmd-Home\":\"goDocStart\",\"Cmd-Up\":\"goDocStart\",\"Cmd-End\":\"goDocEnd\",\"Cmd-Down\":\"goDocEnd\",\"Alt-Left\":\"goGroupLeft\",\"Alt-Right\":\"goGroupRight\",\"Cmd-Left\":\"goLineLeft\",\"Cmd-Right\":\"goLineRight\",\"Alt-Backspace\":\"delGroupBefore\",\"Ctrl-Alt-Backspace\":\"delGroupAfter\",\"Alt-Delete\":\"delGroupAfter\",\"Cmd-S\":\"save\",\"Cmd-F\":\"find\",\"Cmd-G\":\"findNext\",\"Shift-Cmd-G\":\"findPrev\",\"Cmd-Alt-F\":\"replace\",\"Shift-Cmd-Alt-F\":\"replaceAll\",\"Cmd-[\":\"indentLess\",\"Cmd-]\":\"indentMore\",\"Cmd-Backspace\":\"delWrappedLineLeft\",\"Cmd-Delete\":\"delWrappedLineRight\",\"Cmd-U\":\"undoSelection\",\"Shift-Cmd-U\":\"redoSelection\",\"Ctrl-Up\":\"goDocStart\",\"Ctrl-Down\":\"goDocEnd\",fallthrough:[\"basic\",\"emacsy\"]},d.default=c.c?d.macDefault:d.pcDefault},function(e,t,i){\"use strict\";function n(e,t,i,n){var r=[e.state.modeGen],o={};f(e,t.text,e.doc.mode,i,function(e,t){return r.push(e,t)},o,n);for(var a=0;a<e.state.overlays.length;++a)!function(i){var n=e.state.overlays[i],a=1,l=0;f(e,t.text,n.mode,!0,function(e,t){for(var i=a;l<e;){var o=r[a];o>e&&r.splice(a,1,e,r[a+1],o),a+=2,l=Math.min(e,o)}if(t)if(n.opaque)r.splice(i,a-i,e,\"overlay \"+t),a=i+2;else for(;i<a;i+=2){var s=r[i+1];r[i+1]=(s?s+\" \":\"\")+\"overlay \"+t}},o)}(a);return{styles:r,classes:o.bgClass||o.textClass?o:null}}function r(e,t,r){if(!t.styles||t.styles[0]!=e.state.modeGen){var a=o(e,i.i(g.a)(t)),l=n(e,t,t.text.length>e.options.maxHighlightLength?i.i(p.i)(e.doc.mode,a):a);t.stateAfter=a,t.styles=l.styles,l.classes?t.styleClasses=l.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.frontier&&e.doc.frontier++}return t.styles}function o(e,t,n){var r=e.doc,o=e.display;if(!r.mode.startState)return!0;var l=d(e,t,n),s=l>r.first&&i.i(g.d)(r,l-1).stateAfter;return s=s?i.i(p.i)(r.mode,s):i.i(p.j)(r.mode),r.iter(l,t,function(n){a(e,n.text,s);var c=l==t-1||l%5==0||l>=o.viewFrom&&l<o.viewTo;n.stateAfter=c?i.i(p.i)(r.mode,s):null,++l}),n&&(r.frontier=l),s}function a(e,t,i,n){var r=e.doc.mode,o=new v.a(t,e.options.tabSize);for(o.start=o.pos=n||0,\"\"==t&&l(r,i);!o.eol();)s(r,o,i),o.start=o.pos}function l(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var n=i.i(p.k)(e,t);return n.mode.blankLine?n.mode.blankLine(n.state):void 0}}function s(e,t,n,r){for(var o=0;o<10;o++){r&&(r[0]=i.i(p.k)(e,n).mode);var a=e.token(t,n);if(t.pos>t.start)return a}throw new Error(\"Mode \"+e.name+\" failed to advance stream.\")}function c(e,t,n,r){var a=function(e){return{start:h.start,end:h.pos,string:h.current(),type:u||null,state:e?i.i(p.i)(l.mode,d):d}},l=e.doc,c=l.mode,u=void 0;t=i.i(m.c)(l,t);var f=i.i(g.d)(l,t.line),d=o(e,t.line,n),h=new v.a(f.text,e.options.tabSize),b=void 0;for(r&&(b=[]);(r||h.pos<t.ch)&&!h.eol();)h.start=h.pos,u=s(c,h,d),r&&b.push(a(!0));return r?b:a()}function u(e,t){if(e)for(;;){var i=e.match(/(?:^|\\s+)line-(background-)?(\\S+)/);if(!i)break;e=e.slice(0,i.index)+e.slice(i.index+i[0].length);var n=i[1]?\"bgClass\":\"textClass\";null==t[n]?t[n]=i[2]:new RegExp(\"(?:^|s)\"+i[2]+\"(?:$|s)\").test(t[n])||(t[n]+=\" \"+i[2])}return e}function f(e,t,i,n,r,o,c){var f=i.flattenSpans;null==f&&(f=e.options.flattenSpans);var d=0,h=null,p=new v.a(t,e.options.tabSize),g=void 0,m=e.options.addModeClass&&[null];for(\"\"==t&&u(l(i,n),o);!p.eol();){if(p.pos>e.options.maxHighlightLength?(f=!1,c&&a(e,t,n,p.pos),p.pos=t.length,g=null):g=u(s(i,p,n,m),o),m){var b=m[0].name;b&&(g=\"m-\"+(g?b+\" \"+g:b))}if(!f||h!=g){for(;d<p.start;)d=Math.min(p.start,d+5e3),r(d,h);h=g}p.start=p.pos}for(;d<p.pos;){var y=Math.min(p.pos,d+5e3);r(y,h),d=y}}function d(e,t,n){for(var r=void 0,o=void 0,a=e.doc,l=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=a.first)return a.first;var c=i.i(g.d)(a,s-1);if(c.stateAfter&&(!n||s<=a.frontier))return s;var u=i.i(h.b)(c.text,null,e.options.tabSize);(null==o||r>u)&&(o=s-1,r=u)}return o}var h=i(0),p=i(41),v=i(98),g=i(4),m=i(3);t.c=n,t.a=r,t.b=o,t.d=a,t.e=c},function(e,t,i){\"use strict\";function n(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function r(e,t){var n={from:i.i(g.e)(t.from),to:i.i(x.a)(t),text:i.i(b.e)(e,t.from,t.to)};return f(e,n,t.from.line,t.to.line+1),i.i(C.a)(e,function(e){return f(e,n,t.from.line,t.to.line+1)},!0),n}function o(e){for(;e.length;){if(!i.i(w.f)(e).ranges)break;e.pop()}}function a(e,t){return t?(o(e.done),i.i(w.f)(e.done)):e.done.length&&!i.i(w.f)(e.done).ranges?i.i(w.f)(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),i.i(w.f)(e.done)):void 0}function l(e,t,n,o){var l=e.history;l.undone.length=0;var s=+new Date,c=void 0,f=void 0;if((l.lastOp==o||l.lastOrigin==t.origin&&t.origin&&(\"+\"==t.origin.charAt(0)&&e.cm&&l.lastModTime>s-e.cm.options.historyEventDelay||\"*\"==t.origin.charAt(0)))&&(c=a(l,l.lastOp==o)))f=i.i(w.f)(c.changes),0==i.i(g.b)(t.from,t.to)&&0==i.i(g.b)(t.from,f.to)?f.to=i.i(x.a)(t):c.changes.push(r(e,t));else{var d=i.i(w.f)(l.done);for(d&&d.ranges||u(e.sel,l.done),c={changes:[r(e,t)],generation:l.generation},l.done.push(c);l.done.length>l.undoDepth;)l.done.shift(),l.done[0].ranges||l.done.shift()}l.done.push(n),l.generation=++l.maxGeneration,l.lastModTime=l.lastSelTime=s,l.lastOp=l.lastSelOp=o,l.lastOrigin=l.lastSelOrigin=t.origin,f||i.i(y.d)(e,\"historyAdded\")}function s(e,t,i,n){var r=t.charAt(0);return\"*\"==r||\"+\"==r&&i.ranges.length==n.ranges.length&&i.somethingSelected()==n.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function c(e,t,n,r){var a=e.history,l=r&&r.origin;n==a.lastSelOp||l&&a.lastSelOrigin==l&&(a.lastModTime==a.lastSelTime&&a.lastOrigin==l||s(e,l,i.i(w.f)(a.done),t))?a.done[a.done.length-1]=t:u(t,a.done),a.lastSelTime=+new Date,a.lastSelOrigin=l,a.lastSelOp=n,r&&!1!==r.clearRedo&&o(a.undone)}function u(e,t){var n=i.i(w.f)(t);n&&n.ranges&&n.equals(e)||t.push(e)}function f(e,t,i,n){var r=t[\"spans_\"+e.id],o=0;e.iter(Math.max(e.first,i),Math.min(e.first+e.size,n),function(i){i.markedSpans&&((r||(r=t[\"spans_\"+e.id]={}))[o]=i.markedSpans),++o})}function d(e){if(!e)return null;for(var t=void 0,i=0;i<e.length;++i)e[i].marker.explicitlyCleared?t||(t=e.slice(0,i)):t&&t.push(e[i]);return t?t.length?t:null:e}function h(e,t){var i=t[\"spans_\"+e.id];if(!i)return null;for(var n=[],r=0;r<t.text.length;++r)n.push(d(i[r]));return n}function p(e,t){var n=h(e,t),r=i.i(m.d)(e,t);if(!n)return r;if(!r)return n;for(var o=0;o<n.length;++o){var a=n[o],l=r[o];if(a&&l)e:for(var s=0;s<l.length;++s){for(var c=l[s],u=0;u<a.length;++u)if(a[u].marker==c.marker)continue e;a.push(c)}else l&&(n[o]=l)}return n}function v(e,t,n){for(var r=[],o=0;o<e.length;++o){var a=e[o];if(a.ranges)r.push(n?k.a.prototype.deepCopy.call(a):a);else{var l=a.changes,s=[];r.push({changes:s});for(var c=0;c<l.length;++c){var u=l[c],f=void 0;if(s.push({from:u.from,to:u.to,text:u.text}),t)for(var d in u)(f=d.match(/^spans_(\\d+)$/))&&i.i(w.a)(t,Number(f[1]))>-1&&(i.i(w.f)(s)[d]=u[d],delete u[d])}}}return r}var g=i(3),m=i(7),b=i(4),y=i(2),w=i(0),x=i(40),C=i(31),k=i(9);t.f=n,t.c=r,t.a=l,t.e=c,t.b=u,t.d=p,t.g=v},,,,,,,,,function(e,t,i){\"use strict\";function n(e,t){var n=i.i(d.d)(e.doc,t),r=i.i(f.e)(n);return r!=n&&(t=i.i(d.a)(r)),i.i(c.b)(!0,e,r,t,1)}function r(e,t){var n=i.i(d.d)(e.doc,t),r=i.i(f.t)(n);return r!=n&&(t=i.i(d.a)(r)),i.i(c.b)(!0,e,n,t,-1)}function o(e,t){var r=n(e,t.line),o=i.i(d.d)(e.doc,r.line),a=i.i(g.a)(o,e.doc.direction);if(!a||0==a[0].level){var l=Math.max(0,o.text.search(/\\S/)),s=t.line==r.line&&t.ch<=l&&t.ch;return i.i(u.a)(r.line,s?0:l,r.sticky)}return r}var a=i(90),l=i(8),s=i(19),c=i(64),u=i(3),f=i(7),d=i(4),h=i(9),p=i(14),v=i(0),g=i(32);i.d(t,\"a\",function(){return m});var m={selectAll:p.d,singleSelection:function(e){return e.setSelection(e.getCursor(\"anchor\"),e.getCursor(\"head\"),v.h)},killLine:function(e){return i.i(a.a)(e,function(t){if(t.empty()){var n=i.i(d.d)(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line<e.lastLine()?{from:t.head,to:i.i(u.a)(t.head.line+1,0)}:{from:t.head,to:i.i(u.a)(t.head.line,n)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){return i.i(a.a)(e,function(t){return{from:i.i(u.a)(t.from().line,0),to:i.i(u.c)(e.doc,i.i(u.a)(t.to().line+1,0))}})},delLineLeft:function(e){return i.i(a.a)(e,function(e){return{from:i.i(u.a)(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){return i.i(a.a)(e,function(t){var i=e.charCoords(t.head,\"div\").top+5;return{from:e.coordsChar({left:0,top:i},\"div\"),to:t.from()}})},delWrappedLineRight:function(e){return i.i(a.a)(e,function(t){var i=e.charCoords(t.head,\"div\").top+5,n=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:i},\"div\");return{from:t.from(),to:n}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(i.i(u.a)(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(i.i(u.a)(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy(function(t){return n(e,t.head.line)},{origin:\"+move\",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy(function(t){return o(e,t.head)},{origin:\"+move\",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy(function(t){return r(e,t.head.line)},{origin:\"+move\",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy(function(t){var i=e.charCoords(t.head,\"div\").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:i},\"div\")},v.q)},goLineLeft:function(e){return e.extendSelectionsBy(function(t){var i=e.charCoords(t.head,\"div\").top+5;return e.coordsChar({left:0,top:i},\"div\")},v.q)},goLineLeftSmart:function(e){return e.extendSelectionsBy(function(t){var i=e.charCoords(t.head,\"div\").top+5,n=e.coordsChar({left:0,top:i},\"div\");return n.ch<e.getLine(n.line).search(/\\S/)?o(e,t.head):n},v.q)},goLineUp:function(e){return e.moveV(-1,\"line\")},goLineDown:function(e){return e.moveV(1,\"line\")},goPageUp:function(e){return e.moveV(-1,\"page\")},goPageDown:function(e){return e.moveV(1,\"page\")},goCharLeft:function(e){return e.moveH(-1,\"char\")},goCharRight:function(e){return e.moveH(1,\"char\")},goColumnLeft:function(e){return e.moveH(-1,\"column\")},goColumnRight:function(e){return e.moveH(1,\"column\")},goWordLeft:function(e){return e.moveH(-1,\"word\")},goGroupRight:function(e){return e.moveH(1,\"group\")},goGroupLeft:function(e){return e.moveH(-1,\"group\")},goWordRight:function(e){return e.moveH(1,\"word\")},delCharBefore:function(e){return e.deleteH(-1,\"char\")},delCharAfter:function(e){return e.deleteH(1,\"char\")},delWordBefore:function(e){return e.deleteH(-1,\"word\")},delWordAfter:function(e){return e.deleteH(1,\"word\")},delGroupBefore:function(e){return e.deleteH(-1,\"group\")},delGroupAfter:function(e){return e.deleteH(1,\"group\")},indentAuto:function(e){return e.indentSelection(\"smart\")},indentMore:function(e){return e.indentSelection(\"add\")},indentLess:function(e){return e.indentSelection(\"subtract\")},insertTab:function(e){return e.replaceSelection(\"\\t\")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),r=e.options.tabSize,o=0;o<n.length;o++){var a=n[o].from(),l=i.i(v.b)(e.getLine(a.line),a.ch,r);t.push(i.i(v.m)(r-l%r))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection(\"add\"):e.execCommand(\"insertTab\")},transposeChars:function(e){return i.i(l.a)(e,function(){for(var t=e.listSelections(),n=[],r=0;r<t.length;r++)if(t[r].empty()){var o=t[r].head,a=i.i(d.d)(e.doc,o.line).text;if(a)if(o.ch==a.length&&(o=new u.a(o.line,o.ch-1)),o.ch>0)o=new u.a(o.line,o.ch+1),e.replaceRange(a.charAt(o.ch-1)+a.charAt(o.ch-2),i.i(u.a)(o.line,o.ch-2),o,\"+transpose\");else if(o.line>e.doc.first){var l=i.i(d.d)(e.doc,o.line-1).text;l&&(o=new u.a(o.line,1),e.replaceRange(a.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),i.i(u.a)(o.line-1,l.length-1),o,\"+transpose\"))}n.push(new h.b(o,o))}e.setSelections(n)})},newlineAndIndent:function(e){return i.i(l.a)(e,function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,\"+input\");t=e.listSelections();for(var r=0;r<t.length;r++)e.indentLine(t[r].from().line,null,!0);i.i(s.b)(e)})},openLine:function(e){return e.replaceSelection(\"\\n\",\"start\")},toggleOverwrite:function(e){return e.toggleOverwrite()}}},function(e,t,i){\"use strict\";function n(e){x=e}function r(e,t,n,r,o){var l=e.doc;e.display.shift=!1,r||(r=l.sel);var s=e.state.pasteIncoming||\"paste\"==o,c=i.i(y.a)(t),u=null;if(s&&r.ranges.length>1)if(x&&x.text.join(\"\\n\")==t){if(r.ranges.length%x.text.length==0){u=[];for(var v=0;v<x.text.length;v++)u.push(l.splitLines(x.text[v]))}}else c.length==r.ranges.length&&(u=i.i(m.g)(c,function(e){return[e]}));for(var g=void 0,w=r.ranges.length-1;w>=0;w--){var C=r.ranges[w],k=C.from(),S=C.to();C.empty()&&(n&&n>0?k=i.i(d.a)(k.line,k.ch-n):e.state.overwrite&&!s?S=i.i(d.a)(S.line,Math.min(i.i(h.d)(l,S.line).text.length,S.ch+i.i(m.f)(c).length)):x&&x.lineWise&&x.text.join(\"\\n\")==t&&(k=S=i.i(d.a)(k.line,0))),g=e.curOp.updateInput;var L={from:k,to:S,text:u?u[w%u.length]:c,origin:o||(s?\"paste\":e.state.cutIncoming?\"cut\":\"+input\")};i.i(p.c)(e.doc,L),i.i(b.a)(e,\"inputRead\",e,L)}t&&!s&&a(e,t),i.i(f.b)(e),e.curOp.updateInput=g,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function o(e,t){var n=e.clipboardData&&e.clipboardData.getData(\"Text\");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||i.i(u.a)(t,function(){return r(t,n,0,null,\"paste\")}),!0}function a(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var o=n.ranges[r];if(!(o.head.ch>100||r&&n.ranges[r-1].head.line==o.head.line)){var a=e.getModeAt(o.head),l=!1;if(a.electricChars){for(var s=0;s<a.electricChars.length;s++)if(t.indexOf(a.electricChars.charAt(s))>-1){l=i.i(w.a)(e,o.head.line,\"smart\");break}}else a.electricInput&&a.electricInput.test(i.i(h.d)(e.doc,o.head.line).text.slice(0,o.head.ch))&&(l=i.i(w.a)(e,o.head.line,\"smart\"));l&&i.i(b.a)(e,\"electricInput\",e,o.head.line)}}}function l(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var o=e.doc.sel.ranges[r].head.line,a={anchor:i.i(d.a)(o,0),head:i.i(d.a)(o+1,0)};n.push(a),t.push(e.getRange(a.anchor,a.head))}return{text:t,ranges:n}}function s(e,t){e.setAttribute(\"autocorrect\",\"off\"),e.setAttribute(\"autocapitalize\",\"off\"),e.setAttribute(\"spellcheck\",!!t)}function c(){var e=i.i(g.e)(\"textarea\",null,null,\"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\"),t=i.i(g.e)(\"div\",[e],null,\"overflow: hidden; position: relative; width: 3px; height: 0px;\");return v.g?e.style.width=\"1000px\":e.setAttribute(\"wrap\",\"off\"),v.a&&(e.style.border=\"1px solid black\"),s(e),t}var u=i(8),f=i(19),d=i(3),h=i(4),p=i(23),v=i(5),g=i(1),m=i(0),b=i(15),y=i(24),w=i(94);i.d(t,\"e\",function(){return x}),t.c=n,t.g=r,t.b=o,t.h=a,t.d=l,t.a=s,t.f=c;var x=null},function(e,t,i){\"use strict\";function n(e,t,n){var r=i.i(u.l)(e.text,t+n,n);return r<0||r>e.text.length?null:r}function r(e,t,i){var r=n(e,t.ch,i);return null==r?null:new l.a(t.line,r,i<0?\"after\":\"before\")}function o(e,t,r,o,a){if(e){var f=i.i(c.a)(r,t.doc.direction);if(f){var d=a<0?i.i(u.f)(f):f[0],h=a<0==(1==d.level),p=h?\"after\":\"before\",v=void 0;if(d.level>0){var g=i.i(s.c)(t,r);v=a<0?r.text.length-1:0;var m=i.i(s.d)(t,g,v).top;v=i.i(u.k)(function(e){return i.i(s.d)(t,g,e).top==m},a<0==(1==d.level)?d.from:d.to-1,v),\"before\"==p&&(v=n(r,v,1,!0))}else v=a<0?d.to:d.from;return new l.a(o,v,p)}}return new l.a(o,a<0?r.text.length:0,a<0?\"before\":\"after\")}function a(e,t,o,a){var u=i.i(c.a)(t,e.doc.direction);if(!u)return r(t,o,a);o.ch>=t.text.length?(o.ch=t.text.length,o.sticky=\"before\"):o.ch<=0&&(o.ch=0,o.sticky=\"after\");var f=i.i(c.b)(u,o.ch,o.sticky),d=u[f];if(\"ltr\"==e.doc.direction&&d.level%2==0&&(a>0?d.to>o.ch:d.from<o.ch))return r(t,o,a);var h=function(e,i){return n(t,e instanceof l.a?e.ch:e,i)},p=void 0,v=function(n){return e.options.lineWrapping?(p=p||i.i(s.c)(e,t),i.i(s.e)(e,t,p,n)):{begin:0,end:t.text.length}},g=v(\"before\"==o.sticky?h(o,-1):o.ch);if(\"rtl\"==e.doc.direction||1==d.level){var m=1==d.level==a<0,b=h(o,m?1:-1);if(null!=b&&(m?b<=d.to&&b<=g.end:b>=d.from&&b>=g.begin)){var y=m?\"before\":\"after\";return new l.a(o.line,b,y)}}var w=function(e,t,i){for(var n=function(e,t){return t?new l.a(o.line,h(e,1),\"before\"):new l.a(o.line,e,\"after\")};e>=0&&e<u.length;e+=t){var r=u[e],a=t>0==(1!=r.level),s=a?i.begin:h(i.end,-1);if(r.from<=s&&s<r.to)return n(s,a);if(s=a?r.from:h(r.to,-1),i.begin<=s&&s<i.end)return n(s,a)}},x=w(f+a,a,g);if(x)return x;var C=a>0?g.end:h(g.begin,-1);return null==C||a>0&&C==t.text.length||!(x=w(a>0?0:u.length-1,a,v(C)))?null:x}var l=i(3),s=i(6),c=i(32),u=i(0);t.c=r,t.b=o,t.a=a},function(e,t,i){\"use strict\";var n=i(50),r=i(8),o=i(21),a=i(3),l=i(7),s=i(4),c=i(1),u=i(24),f=i(0),d=i(19),h=i(23),p=i(40),v=i(145),g=i(31),m=i(53),b=i(96),y=i(97),w=i(9),x=i(14),C=0,k=function e(t,n,r,l,s){if(!(this instanceof e))return new e(t,n,r,l,s);null==r&&(r=0),v.a.call(this,[new v.b([new o.a(\"\",null)])]),this.first=r,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.frontier=r;var c=i.i(a.a)(r,0);this.sel=i.i(w.d)(c),this.history=new m.f(null),this.id=++C,this.modeOption=n,this.lineSep=l,this.direction=\"rtl\"==s?\"rtl\":\"ltr\",this.extend=!1,\"string\"==typeof t&&(t=this.splitLines(t)),i.i(g.b)(this,{from:c,to:c,text:t}),i.i(x.a)(this,i.i(w.d)(c),f.h)};k.prototype=i.i(f.r)(v.a.prototype,{constructor:k,iter:function(e,t,i){i?this.iterN(e-this.first,t-e,i):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var i=0,n=0;n<t.length;++n)i+=t[n].height;this.insertInner(e-this.first,t,i)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=i.i(s.h)(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:i.i(r.e)(function(e){var t=i.i(a.a)(this.first,0),n=this.first+this.size-1;i.i(h.c)(this,{from:t,to:i.i(a.a)(n,i.i(s.d)(this,n).text.length),text:this.splitLines(e),origin:\"setValue\",full:!0},!0),this.cm&&this.cm.scrollTo(0,0),i.i(x.a)(this,i.i(w.d)(t),f.h)}),replaceRange:function(e,t,n,r){t=i.i(a.c)(this,t),n=n?i.i(a.c)(this,n):t,i.i(h.b)(this,e,t,n,r)},getRange:function(e,t,n){var r=i.i(s.e)(this,i.i(a.c)(this,e),i.i(a.c)(this,t));return!1===n?r:r.join(n||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(i.i(s.c)(this,e))return i.i(s.d)(this,e)},getLineNumber:function(e){return i.i(s.a)(e)},getLineHandleVisualStart:function(e){return\"number\"==typeof e&&(e=i.i(s.d)(this,e)),i.i(l.e)(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return i.i(a.c)(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||\"head\"==e?t.head:\"anchor\"==e?t.anchor:\"end\"==e||\"to\"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:i.i(r.e)(function(e,t,n){i.i(x.f)(this,i.i(a.c)(this,\"number\"==typeof e?i.i(a.a)(e,t||0):e),null,n)}),setSelection:i.i(r.e)(function(e,t,n){i.i(x.f)(this,i.i(a.c)(this,e),i.i(a.c)(this,t||e),n)}),extendSelection:i.i(r.e)(function(e,t,n){i.i(x.g)(this,i.i(a.c)(this,e),t&&i.i(a.c)(this,t),n)}),extendSelections:i.i(r.e)(function(e,t){i.i(x.h)(this,i.i(a.i)(this,e),t)}),extendSelectionsBy:i.i(r.e)(function(e,t){var n=i.i(f.g)(this.sel.ranges,e);i.i(x.h)(this,i.i(a.i)(this,n),t)}),setSelections:i.i(r.e)(function(e,t,n){if(e.length){for(var r=[],o=0;o<e.length;o++)r[o]=new w.b(i.i(a.c)(this,e[o].anchor),i.i(a.c)(this,e[o].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),i.i(x.a)(this,i.i(w.c)(r,t),n)}}),addSelection:i.i(r.e)(function(e,t,n){var r=this.sel.ranges.slice(0);r.push(new w.b(i.i(a.c)(this,e),i.i(a.c)(this,t||e))),i.i(x.a)(this,i.i(w.c)(r,r.length-1),n)}),getSelection:function(e){for(var t=this.sel.ranges,n=void 0,r=0;r<t.length;r++){var o=i.i(s.e)(this,t[r].from(),t[r].to());n=n?n.concat(o):o}return!1===e?n:n.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,r=0;r<n.length;r++){var o=i.i(s.e)(this,n[r].from(),n[r].to());!1!==e&&(o=o.join(e||this.lineSeparator())),t[r]=o}return t},replaceSelection:function(e,t,i){for(var n=[],r=0;r<this.sel.ranges.length;r++)n[r]=e;this.replaceSelections(n,t,i||\"+input\")},replaceSelections:i.i(r.e)(function(e,t,n){for(var r=[],o=this.sel,a=0;a<o.ranges.length;a++){var l=o.ranges[a];r[a]={from:l.from(),to:l.to(),text:this.splitLines(e[a]),origin:n}}for(var s=t&&\"end\"!=t&&i.i(p.c)(this,r,t),c=r.length-1;c>=0;c--)i.i(h.c)(this,r[c]);s?i.i(x.i)(this,s):this.cm&&i.i(d.b)(this.cm)}),undo:i.i(r.e)(function(){i.i(h.d)(this,\"undo\")}),redo:i.i(r.e)(function(){i.i(h.d)(this,\"redo\")}),undoSelection:i.i(r.e)(function(){i.i(h.d)(this,\"undo\",!0)}),redoSelection:i.i(r.e)(function(){i.i(h.d)(this,\"redo\",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,i=0,n=0;n<e.done.length;n++)e.done[n].ranges||++t;for(var r=0;r<e.undone.length;r++)e.undone[r].ranges||++i;return{undo:t,redo:i}},clearHistory:function(){this.history=new m.f(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:i.i(m.g)(this.history.done),undone:i.i(m.g)(this.history.undone)}},setHistory:function(e){var t=this.history=new m.f(this.history.maxGeneration);t.done=i.i(m.g)(e.done.slice(0),null,!0),t.undone=i.i(m.g)(e.undone.slice(0),null,!0)},setGutterMarker:i.i(r.e)(function(e,t,n){return i.i(h.a)(this,e,\"gutter\",function(e){var r=e.gutterMarkers||(e.gutterMarkers={});return r[t]=n,!n&&i.i(f.s)(r)&&(e.gutterMarkers=null),!0})}),clearGutter:i.i(r.e)(function(e){var t=this;this.iter(function(n){n.gutterMarkers&&n.gutterMarkers[e]&&i.i(h.a)(t,n,\"gutter\",function(){return n.gutterMarkers[e]=null,i.i(f.s)(n.gutterMarkers)&&(n.gutterMarkers=null),!0})})}),lineInfo:function(e){var t=void 0;if(\"number\"==typeof e){if(!i.i(s.c)(this,e))return null;if(t=e,!(e=i.i(s.d)(this,e)))return null}else if(null==(t=i.i(s.a)(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:i.i(r.e)(function(e,t,n){return i.i(h.a)(this,e,\"gutter\"==t?\"gutter\":\"class\",function(e){var r=\"text\"==t?\"textClass\":\"background\"==t?\"bgClass\":\"gutter\"==t?\"gutterClass\":\"wrapClass\";if(e[r]){if(i.i(c.l)(n).test(e[r]))return!1;e[r]+=\" \"+n}else e[r]=n;return!0})}),removeLineClass:i.i(r.e)(function(e,t,n){return i.i(h.a)(this,e,\"gutter\"==t?\"gutter\":\"class\",function(e){var r=\"text\"==t?\"textClass\":\"background\"==t?\"bgClass\":\"gutter\"==t?\"gutterClass\":\"wrapClass\",o=e[r];if(!o)return!1;if(null==n)e[r]=null;else{var a=o.match(i.i(c.l)(n));if(!a)return!1;var l=a.index+a[0].length;e[r]=o.slice(0,a.index)+(a.index&&l!=o.length?\" \":\"\")+o.slice(l)||null}return!0})}),addLineWidget:i.i(r.e)(function(e,t,n){return i.i(b.b)(this,e,t,n)}),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return i.i(y.c)(this,i.i(a.c)(this,e),i.i(a.c)(this,t),n,n&&n.type||\"range\")},setBookmark:function(e,t){var n={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=i.i(a.c)(this,e),i.i(y.c)(this,e,e,n,\"bookmark\")},findMarksAt:function(e){e=i.i(a.c)(this,e);var t=[],n=i.i(s.d)(this,e.line).markedSpans;if(n)for(var r=0;r<n.length;++r){var o=n[r];(null==o.from||o.from<=e.ch)&&(null==o.to||o.to>=e.ch)&&t.push(o.marker.parent||o.marker)}return t},findMarks:function(e,t,n){e=i.i(a.c)(this,e),t=i.i(a.c)(this,t);var r=[],o=e.line;return this.iter(e.line,t.line+1,function(i){var a=i.markedSpans;if(a)for(var l=0;l<a.length;l++){var s=a[l];null!=s.to&&o==e.line&&e.ch>=s.to||null==s.from&&o!=e.line||null!=s.from&&o==t.line&&s.from>=t.ch||n&&!n(s.marker)||r.push(s.marker.parent||s.marker)}++o}),r},getAllMarks:function(){var e=[];return this.iter(function(t){var i=t.markedSpans;if(i)for(var n=0;n<i.length;++n)null!=i[n].from&&e.push(i[n].marker)}),e},posFromIndex:function(e){var t=void 0,n=this.first,r=this.lineSeparator().length;return this.iter(function(i){var o=i.text.length+r;if(o>e)return t=e,!0;e-=o,++n}),i.i(a.c)(this,i.i(a.a)(n,t))},indexFromPos:function(e){e=i.i(a.c)(this,e);var t=e.ch;if(e.line<this.first||e.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+n}),t},copy:function(e){var t=new k(i.i(s.h)(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,n=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to);var r=new k(i.i(s.h)(this,t,n),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(r.history=this.history),(this.linked||(this.linked=[])).push({doc:r,sharedHist:e.sharedHist}),r.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],i.i(y.d)(r,i.i(y.e)(this)),r},unlinkDoc:function(e){if(e instanceof n.b&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){var r=this.linked[t];if(r.doc==e){this.linked.splice(t,1),e.unlinkDoc(this),i.i(y.f)(i.i(y.e)(this));break}}if(e.history==this.history){var o=[e.id];i.i(g.a)(e,function(e){return o.push(e.id)},!0),e.history=new m.f(null),e.history.done=i.i(m.g)(this.history.done,o),e.history.undone=i.i(m.g)(this.history.undone,o)}},iterLinkedDocs:function(e){i.i(g.a)(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):i.i(u.a)(e)},lineSeparator:function(){return this.lineSep||\"\\n\"},setDirection:i.i(r.e)(function(e){\"rtl\"!=e&&(e=\"ltr\"),e!=this.direction&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&i.i(g.d)(this.cm))})}),k.prototype.eachLine=k.prototype.iter,t.a=k},,,,,,,,,,,,,,function(e,t,i){i(211);var n=i(34)(i(155),i(225),null,null);e.exports=n.exports},,,,,,,function(e,t,i){\"use strict\";(function(e){Object.defineProperty(t,\"__esModule\",{value:!0});var n=i(140);e.CodeMirror=n.a,t.default=n.a}).call(t,i(46))},function(e,t,i){\"use strict\";function n(e){var t=e.display.gutters,n=e.options.gutters;i.i(o.g)(t);for(var r=0;r<n.length;++r){var a=n[r],s=t.appendChild(i.i(o.e)(\"div\",null,\"CodeMirror-gutter \"+a));\"CodeMirror-linenumbers\"==a&&(e.display.lineGutter=s,s.style.width=(e.display.lineNumWidth||1)+\"px\")}t.style.display=r?\"\":\"none\",i.i(l.b)(e)}function r(e){var t=i.i(a.a)(e.gutters,\"CodeMirror-linenumbers\");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat([\"CodeMirror-linenumbers\"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}var o=i(1),a=i(0),l=i(38);t.b=n,t.a=r},function(e,t,i){\"use strict\";function n(e){e.doc.mode=i.i(o.f)(e.options,e.doc.modeOption),r(e)}function r(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.frontier=e.doc.first,i.i(a.a)(e,100),e.state.modeGen++,e.curOp&&i.i(l.b)(e)}var o=i(41),a=i(47),l=i(18);t.a=n,t.b=r},function(e,t,i){\"use strict\";function n(e,t,i,n){for(var r=0;r<t.changes.length;r++){var o=t.changes[r];\"text\"==o?l(e,t):\"gutter\"==o?c(e,t,i,n):\"class\"==o?s(e,t):\"widget\"==o&&u(e,t,n)}t.changes=null}function r(e){return e.node==e.text&&(e.node=i.i(b.e)(\"div\",null,null,\"position: relative\"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),m.b&&m.d<8&&(e.node.style.zIndex=2)),e.node}function o(e,t){var n=t.bgClass?t.bgClass+\" \"+(t.line.bgClass||\"\"):t.line.bgClass;if(n&&(n+=\" CodeMirror-linebackground\"),t.background)n?t.background.className=n:(t.background.parentNode.removeChild(t.background),t.background=null);else if(n){var o=r(t);t.background=o.insertBefore(i.i(b.e)(\"div\",null,n),o.firstChild),e.display.input.setUneditable(t.background)}}function a(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):i.i(v.d)(e,t)}function l(e,t){var i=t.text.className,n=a(e,t);t.text==t.node&&(t.node=n.pre),t.text.parentNode.replaceChild(n.pre,t.text),t.text=n.pre,n.bgClass!=t.bgClass||n.textClass!=t.textClass?(t.bgClass=n.bgClass,t.textClass=n.textClass,s(e,t)):i&&(t.text.className=i)}function s(e,t){o(e,t),t.line.wrapClass?r(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className=\"\");var i=t.textClass?t.textClass+\" \"+(t.line.textClass||\"\"):t.line.textClass;t.text.className=i||\"\"}function c(e,t,n,o){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var a=r(t);t.gutterBackground=i.i(b.e)(\"div\",null,\"CodeMirror-gutter-background \"+t.line.gutterClass,\"left: \"+(e.options.fixedGutter?o.fixedPos:-o.gutterTotalWidth)+\"px; width: \"+o.gutterTotalWidth+\"px\"),e.display.input.setUneditable(t.gutterBackground),a.insertBefore(t.gutterBackground,t.text)}var l=t.line.gutterMarkers;if(e.options.lineNumbers||l){var s=r(t),c=t.gutter=i.i(b.e)(\"div\",null,\"CodeMirror-gutter-wrapper\",\"left: \"+(e.options.fixedGutter?o.fixedPos:-o.gutterTotalWidth)+\"px\");if(e.display.input.setUneditable(c),s.insertBefore(c,t.text),t.line.gutterClass&&(c.className+=\" \"+t.line.gutterClass),!e.options.lineNumbers||l&&l[\"CodeMirror-linenumbers\"]||(t.lineNumber=c.appendChild(i.i(b.e)(\"div\",i.i(g.g)(e.options,n),\"CodeMirror-linenumber CodeMirror-gutter-elt\",\"left: \"+o.gutterLeft[\"CodeMirror-linenumbers\"]+\"px; width: \"+e.display.lineNumInnerWidth+\"px\"))),l)for(var u=0;u<e.options.gutters.length;++u){var f=e.options.gutters[u],d=l.hasOwnProperty(f)&&l[f];d&&c.appendChild(i.i(b.e)(\"div\",[d],\"CodeMirror-gutter-elt\",\"left: \"+o.gutterLeft[f]+\"px; width: \"+o.gutterWidth[f]+\"px\"))}}}function u(e,t,i){t.alignable&&(t.alignable=null);for(var n,r=t.node.firstChild;r;r=n)n=r.nextSibling,\"CodeMirror-linewidget\"==r.className&&t.node.removeChild(r);d(e,t,i)}function f(e,t,i,n){var r=a(e,t);return t.text=t.node=r.pre,r.bgClass&&(t.bgClass=r.bgClass),r.textClass&&(t.textClass=r.textClass),s(e,t),c(e,t,i,n),d(e,t,n),t.node}function d(e,t,i){if(h(e,t.line,t,i,!0),t.rest)for(var n=0;n<t.rest.length;n++)h(e,t.rest[n],t,i,!1)}function h(e,t,n,o,a){if(t.widgets)for(var l=r(n),s=0,c=t.widgets;s<c.length;++s){var u=c[s],f=i.i(b.e)(\"div\",[u.node],\"CodeMirror-linewidget\");u.handleMouseEvents||f.setAttribute(\"cm-ignore-events\",\"true\"),p(u,f,n,o),e.display.input.setUneditable(f),a&&u.above?l.insertBefore(f,n.gutter||n.text):l.appendChild(f),i.i(y.a)(u,\"redraw\")}}function p(e,t,i,n){if(e.noHScroll){(i.alignable||(i.alignable=[])).push(t);var r=n.wrapperWidth;t.style.left=n.fixedPos+\"px\",e.coverGutter||(r-=n.gutterTotalWidth,t.style.paddingLeft=n.gutterTotalWidth+\"px\"),t.style.width=r+\"px\"}e.coverGutter&&(t.style.zIndex=5,t.style.position=\"relative\",e.noHScroll||(t.style.marginLeft=-n.gutterTotalWidth+\"px\"))}var v=i(21),g=i(4),m=i(5),b=i(1),y=i(15);t.a=n,t.b=f},function(e,t,i){\"use strict\";function n(e,t){for(var n=e.doc.sel.ranges,c=[],u=0;u<n.length;u++){for(var f=t(n[u]);c.length&&i.i(a.b)(f.from,i.i(s.f)(c).to)<=0;){var d=c.pop();if(i.i(a.b)(d.from,f.from)<0){f.from=d.from;break}}c.push(f)}i.i(r.a)(e,function(){for(var t=c.length-1;t>=0;t--)i.i(l.b)(e.doc,\"\",c[t].from,c[t].to,\"+delete\");i.i(o.b)(e)})}var r=i(8),o=i(19),a=i(3),l=i(23),s=i(0);t.a=n},function(e,t,i){\"use strict\";function n(e,t,i){if(\"string\"==typeof t&&!(t=x.a[t]))return!1;e.display.input.ensurePolled();var n=e.display.shift,r=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),i&&(e.display.shift=!1),r=t(e)!=w.e}finally{e.display.shift=n,e.state.suppressEdits=!1}return r}function r(e,t,n){for(var r=0;r<e.state.keyMaps.length;r++){var o=i.i(p.d)(t,e.state.keyMaps[r],n,e);if(o)return o}return e.options.extraKeys&&i.i(p.d)(t,e.options.extraKeys,n,e)||i.i(p.d)(t,e.options.keyMap,n,e)}function o(e,t,n,o){var a=e.state.keySeq;if(a){if(i.i(p.c)(t))return\"handled\";C.set(50,function(){e.state.keySeq==a&&(e.state.keySeq=null,e.display.input.reset())}),t=a+\" \"+t}var l=r(e,t,o);return\"multi\"==l&&(e.state.keySeq=t),\"handled\"==l&&i.i(d.a)(e,\"keyHandled\",e,t,n),\"handled\"!=l&&\"multi\"!=l||(i.i(b.e)(n),i.i(h.b)(e)),a&&!l&&/\\'$/.test(t)?(i.i(b.e)(n),!0):!!l}function a(e,t){var r=i.i(p.b)(t,!0);return!!r&&(t.shiftKey&&!e.state.keySeq?o(e,\"Shift-\"+r,t,function(t){return n(e,t,!0)})||o(e,r,t,function(t){if(\"string\"==typeof t?/^go[A-Z]/.test(t):t.motion)return n(e,t)}):o(e,r,t,function(t){return n(e,t)}))}function l(e,t,i){return o(e,\"'\"+i+\"'\",t,function(t){return n(e,t,!0)})}function s(e){var t=this;if(t.curOp.focus=i.i(m.j)(),!i.i(b.k)(t,e)){g.b&&g.d<11&&27==e.keyCode&&(e.returnValue=!1);var n=e.keyCode;t.display.shift=16==n||e.shiftKey;var r=a(t,e);g.k&&(k=r?n:null,!r&&88==n&&!y.e&&(g.c?e.metaKey:e.ctrlKey)&&t.replaceSelection(\"\",null,\"cut\")),18!=n||/\\bCodeMirror-crosshair\\b/.test(t.display.lineDiv.className)||c(t)}}function c(e){function t(e){18!=e.keyCode&&e.altKey||(i.i(m.c)(n,\"CodeMirror-crosshair\"),i.i(b.b)(document,\"keyup\",t),i.i(b.b)(document,\"mouseover\",t))}var n=e.display.lineDiv;i.i(m.a)(n,\"CodeMirror-crosshair\"),i.i(b.c)(document,\"keyup\",t),i.i(b.c)(document,\"mouseover\",t)}function u(e){16==e.keyCode&&(this.doc.sel.shift=!1),i.i(b.k)(this,e)}function f(e){var t=this;if(!(i.i(v.b)(t.display,e)||i.i(b.k)(t,e)||e.ctrlKey&&!e.altKey||g.c&&e.metaKey)){var n=e.keyCode,r=e.charCode;if(g.k&&n==k)return k=null,void i.i(b.e)(e);if(!g.k||e.which&&!(e.which<10)||!a(t,e)){var o=String.fromCharCode(null==r?n:r);\"\\b\"!=o&&(l(t,e,o)||t.display.input.onKeyPress(e))}}}var d=i(15),h=i(20),p=i(51),v=i(22),g=i(5),m=i(1),b=i(2),y=i(24),w=i(0),x=i(62);t.b=s,t.a=u,t.c=f;var C=new w.o,k=null},function(e,t,i){\"use strict\";function n(e){function t(t,i,r,o){e.defaults[t]=i,r&&(n[t]=o?function(e,t,i){i!=S&&r(e,t,i)}:r)}var n=e.optionHandlers;e.defineOption=t,e.Init=S,t(\"value\",\"\",function(e,t){return e.setValue(t)},!0),t(\"mode\",null,function(e,t){e.doc.modeOption=t,i.i(u.a)(e)},!0),t(\"indentUnit\",2,u.a,!0),t(\"indentWithTabs\",!1),t(\"smartIndent\",!0),t(\"tabSize\",4,function(e){i.i(u.b)(e),i.i(b.y)(e),i.i(h.b)(e)},!0),t(\"lineSeparator\",null,function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter(function(e){for(var o=0;;){var a=e.text.indexOf(t,o);if(-1==a)break;o=a+t.length,n.push(i.i(g.a)(r,a))}r++});for(var o=n.length-1;o>=0;o--)i.i(y.b)(e.doc,t,n[o],i.i(g.a)(n[o].line,n[o].ch+t.length))}}),t(\"specialChars\",/[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g,function(e,t,i){e.state.specialChars=new RegExp(t.source+(t.test(\"\\t\")?\"\":\"|\\t\"),\"g\"),i!=S&&e.refresh()}),t(\"specialCharPlaceholder\",v.f,function(e){return e.refresh()},!0),t(\"electricChars\",!0),t(\"inputStyle\",w.n?\"contenteditable\":\"textarea\",function(){throw new Error(\"inputStyle can not (yet) be changed in a running editor\")},!0),t(\"spellcheck\",!1,function(e,t){return e.getInputField().spellcheck=t},!0),t(\"rtlMoveVisually\",!w.q),t(\"wholeLineUpdateBefore\",!0),t(\"theme\",\"default\",function(e){i.i(k.a)(e),r(e)},!0),t(\"keyMap\",\"default\",function(e,t,n){var r=i.i(p.f)(t),o=n!=S&&i.i(p.f)(n);o&&o.detach&&o.detach(e,r),r.attach&&r.attach(e,o||null)}),t(\"extraKeys\",null),t(\"lineWrapping\",!1,a,!0),t(\"gutters\",[],function(e){i.i(s.a)(e.options),r(e)},!0),t(\"fixedGutter\",!0,function(e,t){e.display.gutters.style.left=t?i.i(b.n)(e.display)+\"px\":\"0\",e.refresh()},!0),t(\"coverGutterNextToScrollbar\",!1,function(e){return i.i(f.c)(e)},!0),t(\"scrollbarStyle\",\"native\",function(e){i.i(f.d)(e),i.i(f.c)(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),t(\"lineNumbers\",!1,function(e){i.i(s.a)(e.options),r(e)},!0),t(\"firstLineNumber\",1,r,!0),t(\"lineNumberFormatter\",function(e){return e},r,!0),t(\"showCursorWhenSelecting\",!1,d.a,!0),t(\"resetSelectionOnContextMenu\",!0),t(\"lineWiseCopyCut\",!0),t(\"readOnly\",!1,function(e,t){\"nocursor\"==t?(i.i(l.c)(e),e.display.input.blur(),e.display.disabled=!0):e.display.disabled=!1,e.display.input.readOnlyChanged(t)}),t(\"disableInput\",!1,function(e,t){t||e.display.input.reset()},!0),t(\"dragDrop\",!0,o),t(\"allowDropFileTypes\",null),t(\"cursorBlinkRate\",530),t(\"cursorScrollMargin\",0),t(\"cursorHeight\",1,d.a,!0),t(\"singleCursorHeightPerLine\",!0,d.a,!0),t(\"workTime\",100),t(\"workDelay\",100),t(\"flattenSpans\",!0,u.b,!0),t(\"addModeClass\",!1,u.b,!0),t(\"pollInterval\",100),t(\"undoDepth\",200,function(e,t){return e.doc.history.undoDepth=t}),t(\"historyEventDelay\",1250),t(\"viewportMargin\",10,function(e){return e.refresh()},!0),t(\"maxHighlightLength\",1e4,u.b,!0),t(\"moveInputWithCursor\",!0,function(e,t){t||e.display.input.resetPosition()}),t(\"tabindex\",null,function(e,t){return e.display.input.getField().tabIndex=t||\"\"}),t(\"autofocus\",null),t(\"direction\",\"ltr\",function(e,t){return e.doc.setDirection(t)},!0)}function r(e){i.i(s.b)(e),i.i(h.b)(e),i.i(c.a)(e)}function o(e,t,i){if(!t!=!(i&&i!=S)){var n=e.display.dragFunctions,r=t?C.c:C.b;r(e.display.scroller,\"dragstart\",n.start),r(e.display.scroller,\"dragenter\",n.enter),r(e.display.scroller,\"dragover\",n.over),r(e.display.scroller,\"dragleave\",n.leave),r(e.display.scroller,\"drop\",n.drop)}}function a(e){e.options.lineWrapping?(i.i(x.a)(e.display.wrapper,\"CodeMirror-wrap\"),e.display.sizer.style.minWidth=\"\",e.display.sizerWidth=null):(i.i(x.c)(e.display.wrapper,\"CodeMirror-wrap\"),i.i(m.g)(e)),i.i(b.b)(e),i.i(h.b)(e),i.i(b.y)(e),setTimeout(function(){return i.i(f.c)(e)},100)}var l=i(35),s=i(87),c=i(48),u=i(88),f=i(37),d=i(20),h=i(18),p=i(51),v=i(21),g=i(3),m=i(7),b=i(6),y=i(23),w=i(5),x=i(1),C=i(2),k=i(93);i.d(t,\"d\",function(){return S}),i.d(t,\"b\",function(){return L}),i.d(t,\"c\",function(){return M}),t.a=n;var S={toString:function(){return\"CodeMirror.Init\"}},L={},M={}},function(e,t,i){\"use strict\";function n(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\\s*cm-s-\\S+/g,\"\")+e.options.theme.replace(/(^|\\s)\\s*/g,\" cm-s-\"),i.i(r.y)(e)}var r=i(6);t.a=n},function(e,t,i){\"use strict\";function n(e,t,n,f){var d=e.doc,h=void 0;null==n&&(n=\"add\"),\"smart\"==n&&(d.mode.indent?h=i.i(r.b)(e,t):n=\"prev\");var p=e.options.tabSize,v=i.i(a.d)(d,t),g=i.i(u.b)(v.text,null,p);v.stateAfter&&(v.stateAfter=null);var m=v.text.match(/^\\s*/)[0],b=void 0;if(f||/\\S/.test(v.text)){if(\"smart\"==n&&((b=d.mode.indent(h,v.text.slice(m.length),v.text))==u.e||b>150)){if(!f)return;n=\"prev\"}}else b=0,n=\"not\";\"prev\"==n?b=t>d.first?i.i(u.b)(i.i(a.d)(d,t-1).text,null,p):0:\"add\"==n?b=g+e.options.indentUnit:\"subtract\"==n?b=g-e.options.indentUnit:\"number\"==typeof n&&(b=g+n),b=Math.max(0,b);var y=\"\",w=0;if(e.options.indentWithTabs)for(var x=Math.floor(b/p);x;--x)w+=p,y+=\"\\t\";if(w<b&&(y+=i.i(u.m)(b-w)),y!=m)return i.i(l.b)(d,y,i.i(o.a)(t,0),i.i(o.a)(t,m.length),\"+input\"),v.stateAfter=null,!0;for(var C=0;C<d.sel.ranges.length;C++){var k=d.sel.ranges[C];if(k.head.line==t&&k.head.ch<m.length){var S=i.i(o.a)(t,m.length);i.i(c.e)(d,C,new s.b(S,S));break}}}var r=i(52),o=i(3),a=i(4),l=i(23),s=i(9),c=i(14),u=i(0);t.a=n},function(e,t,i){\"use strict\";i.d(t,\"a\",function(){return n});for(var n={3:\"Enter\",8:\"Backspace\",9:\"Tab\",13:\"Enter\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"PrintScrn\",45:\"Insert\",46:\"Delete\",59:\";\",61:\"=\",91:\"Mod\",92:\"Mod\",93:\"Mod\",106:\"*\",107:\"=\",109:\"-\",110:\".\",111:\"/\",127:\"Delete\",173:\"-\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",63232:\"Up\",63233:\"Down\",63234:\"Left\",63235:\"Right\",63272:\"Delete\",63273:\"Home\",63275:\"End\",63276:\"PageUp\",63277:\"PageDown\",63302:\"Insert\"},r=0;r<10;r++)n[r+48]=n[r+96]=String(r);for(var o=65;o<=90;o++)n[o]=String.fromCharCode(o);for(var a=1;a<=12;a++)n[a+111]=n[a+63235]=\"F\"+a},function(e,t,i){\"use strict\";function n(e,t,n){i.i(d.a)(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&i.i(u.a)(e,null,n)}function r(e,t,n,r){var o=new b(e,n,r),a=e.cm;return a&&o.noHScroll&&(a.display.alignWidgets=!0),i.i(v.a)(e,t,\"widget\",function(t){var n=t.widgets||(t.widgets=[]);if(null==o.insertAt?n.push(o):n.splice(Math.min(n.length-1,Math.max(0,o.insertAt)),0,o),o.line=t,a&&!i.i(d.b)(e,t)){var r=i.i(d.a)(t)<e.scrollTop;i.i(h.b)(t,t.height+i.i(p.a)(o)),r&&i.i(u.a)(a,null,o.height),a.curOp.forceUpdate=!0}return!0}),i.i(m.a)(a,\"lineWidgetAdded\",a,o,\"number\"==typeof t?t:i.i(h.a)(t)),o}var o=i(16),a=i.n(o),l=i(17),s=i.n(l),c=i(8),u=i(19),f=i(18),d=i(7),h=i(4),p=i(22),v=i(23),g=i(2),m=i(15);i.d(t,\"a\",function(){return b}),t.b=r;var b=function(){function e(t,i,n){if(a()(this,e),n)for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.doc=t,this.node=i}return s()(e,[{key:\"clear\",value:function(){var e=this.doc.cm,t=this.line.widgets,r=this.line,o=i.i(h.a)(r);if(null!=o&&t){for(var a=0;a<t.length;++a)t[a]==this&&t.splice(a--,1);t.length||(r.widgets=null);var l=i.i(p.a)(this);i.i(h.b)(r,Math.max(0,r.height-l)),e&&(i.i(c.a)(e,function(){n(e,r,-l),i.i(f.a)(e,o,\"widget\")}),i.i(m.a)(e,\"lineWidgetCleared\",e,this,o))}}},{key:\"changed\",value:function(){var e=this,t=this.height,r=this.doc.cm,o=this.line;this.height=null;var a=i.i(p.a)(this)-t;a&&(i.i(h.b)(o,o.height+a),r&&i.i(c.a)(r,function(){r.curOp.forceUpdate=!0,n(r,o,a),i.i(m.a)(r,\"lineWidgetChanged\",r,e,i.i(h.a)(o))}))}}]),e}();i.i(g.a)(b)},function(e,t,i){\"use strict\";function n(e,t,o,a,l){if(a&&a.shared)return r(e,t,o,a,l);if(e.cm&&!e.cm.curOp)return i.i(p.b)(e.cm,n)(e,t,o,a,l);var s=new _(e,l),c=i.i(v.b)(t,o);if(a&&i.i(w.p)(a,s,!1),c>0||0==c&&!1!==s.clearWhenEmpty)return s;if(s.replacedWith&&(s.collapsed=!0,s.widgetNode=i.i(d.h)(\"span\",[s.replacedWith],\"CodeMirror-widget\"),a.handleMouseEvents||s.widgetNode.setAttribute(\"cm-ignore-events\",\"true\"),a.insertLeft&&(s.widgetNode.insertLeft=!0)),s.collapsed){if(i.i(y.q)(e,t.line,t,o,s)||t.line!=o.line&&i.i(y.q)(e,o.line,t,o,s))throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");i.i(b.c)()}s.addToHistory&&i.i(L.a)(e,{from:t,to:o,origin:\"markText\"},e.sel,NaN);var u=t.line,f=e.cm,m=void 0;if(e.iter(u,o.line+1,function(e){f&&s.collapsed&&!f.options.lineWrapping&&i.i(y.e)(e)==f.display.maxLine&&(m=!0),s.collapsed&&u!=t.line&&i.i(g.b)(e,0),i.i(y.r)(e,new y.s(s,u==t.line?t.ch:null,u==o.line?o.ch:null)),++u}),s.collapsed&&e.iter(t.line,o.line+1,function(t){i.i(y.b)(e,t)&&i.i(g.b)(t,0)}),s.clearOnEnter&&i.i(h.c)(s,\"beforeCursorEnter\",function(){return s.clear()}),s.readOnly&&(i.i(b.d)(),(e.history.done.length||e.history.undone.length)&&e.clearHistory()),s.collapsed&&(s.id=++T,s.atomic=!0),f){if(m&&(f.curOp.updateMaxLine=!0),s.collapsed)i.i(k.b)(f,t.line,o.line+1);else if(s.className||s.title||s.startStyle||s.endStyle||s.css)for(var C=t.line;C<=o.line;C++)i.i(k.a)(f,C,\"text\");s.atomic&&i.i(M.c)(f.doc),i.i(x.a)(f,\"markerAdded\",f,s)}return s}function r(e,t,r,o,a){o=i.i(w.p)(o),o.shared=!1;var l=[n(e,t,r,o,a)],s=l[0],c=o.widgetNode;return i.i(S.a)(e,function(e){c&&(o.widgetNode=c.cloneNode(!0)),l.push(n(e,i.i(v.c)(e,t),i.i(v.c)(e,r),o,a));for(var u=0;u<e.linked.length;++u)if(e.linked[u].isParent)return;s=i.i(w.f)(l)}),new A(l,s)}function o(e){return e.findMarks(i.i(v.a)(e.first,0),e.clipPos(i.i(v.a)(e.lastLine())),function(e){return e.parent})}function a(e,t){for(var r=0;r<t.length;r++){var o=t[r],a=o.find(),l=e.clipPos(a.from),s=e.clipPos(a.to);if(i.i(v.b)(l,s)){var c=n(e,l,s,o.primary,o.primary.type);o.markers.push(c),c.parent=o}}}function l(e){for(var t=0;t<e.length;t++)!function(t){var n=e[t],r=[n.primary.doc];i.i(S.a)(n.primary.doc,function(e){return r.push(e)});for(var o=0;o<n.markers.length;o++){var a=n.markers[o];-1==i.i(w.a)(r,a.doc)&&(a.parent=null,n.markers.splice(o--,1))}}(t)}var s=i(16),c=i.n(s),u=i(17),f=i.n(u),d=i(1),h=i(2),p=i(8),v=i(3),g=i(4),m=i(6),b=i(39),y=i(7),w=i(0),x=i(15),C=i(22),k=i(18),S=i(31),L=i(53),M=i(14);i.d(t,\"b\",function(){return _}),t.c=n,i.d(t,\"a\",function(){return A}),t.e=o,t.d=a,t.f=l;var T=0,_=function(){function e(t,i){c()(this,e),this.lines=[],this.type=i,this.doc=t,this.id=++T}return f()(e,[{key:\"clear\",value:function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&i.i(p.c)(e),i.i(h.h)(this,\"clear\")){var n=this.find();n&&i.i(x.a)(this,\"clear\",n.from,n.to)}for(var r=null,o=null,a=0;a<this.lines.length;++a){var l=this.lines[a],s=i.i(y.o)(l.markedSpans,this);e&&!this.collapsed?i.i(k.a)(e,i.i(g.a)(l),\"text\"):e&&(null!=s.to&&(o=i.i(g.a)(l)),null!=s.from&&(r=i.i(g.a)(l))),l.markedSpans=i.i(y.p)(l.markedSpans,s),null==s.from&&this.collapsed&&!i.i(y.b)(this.doc,l)&&e&&i.i(g.b)(l,i.i(m.i)(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var c=0;c<this.lines.length;++c){var u=i.i(y.e)(this.lines[c]),f=i.i(y.f)(u);f>e.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=f,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&i.i(k.b)(e,r,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&i.i(M.c)(e.doc)),e&&i.i(x.a)(e,\"markerCleared\",e,this,r,o),t&&i.i(p.d)(e),this.parent&&this.parent.clear()}}},{key:\"find\",value:function(e,t){null==e&&\"bookmark\"==this.type&&(e=1);for(var n=void 0,r=void 0,o=0;o<this.lines.length;++o){var a=this.lines[o],l=i.i(y.o)(a.markedSpans,this);if(null!=l.from&&(n=i.i(v.a)(t?a:i.i(g.a)(a),l.from),-1==e))return n;if(null!=l.to&&(r=i.i(v.a)(t?a:i.i(g.a)(a),l.to),1==e))return r}return n&&{from:n,to:r}}},{key:\"changed\",value:function(){var e=this,t=this.find(-1,!0),n=this,r=this.doc.cm;t&&r&&i.i(p.a)(r,function(){var o=t.line,a=i.i(g.a)(t.line),l=i.i(m.t)(r,a);if(l&&(i.i(m.u)(l),r.curOp.selectionChanged=r.curOp.forceUpdate=!0),r.curOp.updateMaxLine=!0,!i.i(y.b)(n.doc,o)&&null!=n.height){var s=n.height;n.height=null;var c=i.i(C.a)(n)-s;c&&i.i(g.b)(o,o.height+c)}i.i(x.a)(r,\"markerChanged\",r,e)})}},{key:\"attachLine\",value:function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=i.i(w.a)(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)}},{key:\"detachLine\",value:function(e){if(this.lines.splice(i.i(w.a)(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}}}]),e}();i.i(h.a)(_);var A=function(){function e(t,i){c()(this,e),this.markers=t,this.primary=i;for(var n=0;n<t.length;++n)t[n].parent=this}return f()(e,[{key:\"clear\",value:function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();i.i(x.a)(this,\"clear\")}}},{key:\"find\",value:function(e,t){return this.primary.find(e,t)}}]),e}();i.i(h.a)(A)},function(e,t,i){\"use strict\";var n=i(16),r=i.n(n),o=i(17),a=i.n(o),l=i(0),s=function(){function e(t,i){r()(this,e),this.pos=this.start=0,this.string=t,this.tabSize=i||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0}return a()(e,[{key:\"eol\",value:function(){return this.pos>=this.string.length}},{key:\"sol\",value:function(){return this.pos==this.lineStart}},{key:\"peek\",value:function(){return this.string.charAt(this.pos)||void 0}},{key:\"next\",value:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)}},{key:\"eat\",value:function(e){var t=this.string.charAt(this.pos);if(\"string\"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t}},{key:\"eatWhile\",value:function(e){for(var t=this.pos;this.eat(e););return this.pos>t}},{key:\"eatSpace\",value:function(){for(var e=this.pos;/[\\s\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e}},{key:\"skipToEnd\",value:function(){this.pos=this.string.length}},{key:\"skipTo\",value:function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0}},{key:\"backUp\",value:function(e){this.pos-=e}},{key:\"column\",value:function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=i.i(l.b)(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?i.i(l.b)(this.string,this.lineStart,this.tabSize):0)}},{key:\"indentation\",value:function(){return i.i(l.b)(this.string,null,this.tabSize)-(this.lineStart?i.i(l.b)(this.string,this.lineStart,this.tabSize):0)}},{key:\"match\",value:function(e,t,i){if(\"string\"!=typeof e){var n=this.string.slice(this.pos).match(e);return n&&n.index>0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var r=function(e){return i?e.toLowerCase():e};if(r(this.string.substr(this.pos,e.length))==r(e))return!1!==t&&(this.pos+=e.length),!0}},{key:\"current\",value:function(){return this.string.slice(this.start,this.pos)}},{key:\"hideFirstChars\",value:function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}}}]),e}();t.a=s},,,,,,,,,,,,,,,,function(e,t,i){\"use strict\";t.a={install:function(e){e.prototype.$util={parseDate:function(e,t){var i=new Date(1e3*e),n={\"M+\":i.getMonth()+1,\"d+\":i.getDate(),\"h+\":i.getHours(),\"m+\":i.getMinutes(),\"s+\":i.getSeconds(),\"q+\":Math.floor((i.getMonth()+3)/3),S:i.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(i.getFullYear()+\"\").substr(4-RegExp.$1.length)));for(var r in n)new RegExp(\"(\"+r+\")\").test(t)&&(t=t.replace(RegExp.$1,1===RegExp.$1.length?n[r]:(\"00\"+n[r]).substr((\"\"+n[r]).length)));return t}}}}},function(e,t,i){\"use strict\";var n=i(60),r=i(226),o=i(216),a=i.n(o);n.a.use(r.a),t.a=new r.a({routes:[{path:\"/\",name:\"Home\",component:a.a}]})},function(e,t,i){\"use strict\";var n=i(228),r=i(60),o=i(148);r.a.use(n.a),t.a=new n.a.Store({strict:!1,modules:{api:o.a}})},function(e,t,i){i(210);var n=i(34)(i(150),i(224),null,null);e.exports=n.exports},,,,,,,,,,,,,,,,,,function(e,t,i){\"use strict\";function n(e,t,n){var l=this;this.input=n,l.scrollbarFiller=i.i(o.e)(\"div\",null,\"CodeMirror-scrollbar-filler\"),l.scrollbarFiller.setAttribute(\"cm-not-content\",\"true\"),l.gutterFiller=i.i(o.e)(\"div\",null,\"CodeMirror-gutter-filler\"),l.gutterFiller.setAttribute(\"cm-not-content\",\"true\"),l.lineDiv=i.i(o.h)(\"div\",null,\"CodeMirror-code\"),l.selectionDiv=i.i(o.e)(\"div\",null,null,\"position: relative; z-index: 1\"),l.cursorDiv=i.i(o.e)(\"div\",null,\"CodeMirror-cursors\"),l.measure=i.i(o.e)(\"div\",null,\"CodeMirror-measure\"),l.lineMeasure=i.i(o.e)(\"div\",null,\"CodeMirror-measure\"),l.lineSpace=i.i(o.h)(\"div\",[l.measure,l.lineMeasure,l.selectionDiv,l.cursorDiv,l.lineDiv],null,\"position: relative; outline: none\");var s=i.i(o.h)(\"div\",[l.lineSpace],\"CodeMirror-lines\");l.mover=i.i(o.e)(\"div\",[s],null,\"position: relative\"),l.sizer=i.i(o.e)(\"div\",[l.mover],\"CodeMirror-sizer\"),l.sizerWidth=null,l.heightForcer=i.i(o.e)(\"div\",null,null,\"position: absolute; height: \"+a.i+\"px; width: 1px;\"),l.gutters=i.i(o.e)(\"div\",null,\"CodeMirror-gutters\"),l.lineGutter=null,l.scroller=i.i(o.e)(\"div\",[l.sizer,l.heightForcer,l.gutters],\"CodeMirror-scroll\"),l.scroller.setAttribute(\"tabIndex\",\"-1\"),l.wrapper=i.i(o.e)(\"div\",[l.scrollbarFiller,l.gutterFiller,l.scroller],\"CodeMirror\"),r.b&&r.d<8&&(l.gutters.style.zIndex=-1,l.scroller.style.paddingRight=0),r.g||r.i&&r.n||(l.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(l.wrapper):e(l.wrapper)),l.viewFrom=l.viewTo=t.first,l.reportedViewFrom=l.reportedViewTo=t.first,l.view=[],l.renderedView=null,l.externalMeasured=null,l.viewOffset=0,l.lastWrapHeight=l.lastWrapWidth=0,l.updateLineNumbers=null,l.nativeBarWidth=l.barHeight=l.barWidth=0,l.scrollbarsClipped=!1,l.lineNumWidth=l.lineNumInnerWidth=l.lineNumChars=null,l.alignWidgets=!1,l.cachedCharWidth=l.cachedTextHeight=l.cachedPaddingH=null,l.maxLine=null,l.maxLineLength=0,l.maxLineChanged=!1,l.wheelDX=l.wheelDY=l.wheelStartX=l.wheelStartY=null,l.shift=!1,l.selForContextMenu=null,l.activeTouch=null,n.init(l)}var r=i(5),o=i(1),a=i(0);t.a=n},function(e,t,i){\"use strict\";function n(e){var t=this;if(a(t),!i.i(b.k)(t,e)&&!i.i(f.b)(t.display,e)){i.i(b.e)(e),g.b&&(w=+new Date);var n=i.i(u.x)(t,e,!0),r=e.dataTransfer.files;if(n&&!t.isReadOnly())if(r&&r.length&&window.FileReader&&window.File)for(var o=r.length,l=Array(o),m=0,x=0;x<o;++x)!function(e,r){if(!t.options.allowDropFileTypes||-1!=i.i(y.a)(t.options.allowDropFileTypes,e.type)){var a=new FileReader;a.onload=i.i(s.b)(t,function(){var e=a.result;if(/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(e)&&(e=\"\"),l[r]=e,++m==o){n=i.i(c.c)(t.doc,n);var s={from:n,to:n,text:t.doc.splitLines(l.join(t.doc.lineSeparator())),origin:\"paste\"};i.i(d.c)(t.doc,s),i.i(v.i)(t.doc,i.i(p.d)(n,i.i(h.a)(s)))}}),a.readAsText(e)}}(r[x],x);else{if(t.state.draggingText&&t.doc.sel.contains(n)>-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var C=e.dataTransfer.getData(\"Text\");if(C){var k=void 0;if(t.state.draggingText&&!t.state.draggingText.copy&&(k=t.listSelections()),i.i(v.b)(t.doc,i.i(p.d)(n,n)),k)for(var S=0;S<k.length;++S)i.i(d.b)(t.doc,\"\",k[S].anchor,k[S].head,\"drag\");t.replaceSelection(C,\"around\",\"paste\"),t.display.input.focus()}}catch(e){}}}}function r(e,t){if(g.b&&(!e.state.draggingText||+new Date-w<100))return void i.i(b.g)(t);if(!i.i(b.k)(e,t)&&!i.i(f.b)(e.display,t)&&(t.dataTransfer.setData(\"Text\",e.getSelection()),t.dataTransfer.effectAllowed=\"copyMove\",t.dataTransfer.setDragImage&&!g.j)){var n=i.i(m.e)(\"img\",null,null,\"position: fixed; left: 0; top: 0;\");n.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",g.k&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),g.k&&n.parentNode.removeChild(n)}}function o(e,t){var n=i.i(u.x)(e,t);if(n){var r=document.createDocumentFragment();i.i(l.d)(e,n,r),e.display.dragCursor||(e.display.dragCursor=i.i(m.e)(\"div\",null,\"CodeMirror-cursors CodeMirror-dragcursors\"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),i.i(m.d)(e.display.dragCursor,r)}}function a(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}var l=i(20),s=i(8),c=i(3),u=i(6),f=i(22),d=i(23),h=i(40),p=i(9),v=i(14),g=i(5),m=i(1),b=i(2),y=i(0);t.c=n,t.b=r,t.a=o,t.d=a;var w=0},function(e,t,i){\"use strict\";function n(e,t){function n(){e.value=d.getValue()}if(t=t?i.i(l.p)(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var s=i.i(o.j)();t.autofocus=s==e||null!=e.getAttribute(\"autofocus\")&&s==document.body}var c=void 0;if(e.form&&(i.i(a.c)(e.form,\"submit\",n),!t.leaveSubmitMethodAlone)){var u=e.form;c=u.submit;try{var f=u.submit=function(){n(),u.submit=c,u.submit(),u.submit=f}}catch(e){}}t.finishInit=function(t){t.save=n,t.getTextArea=function(){return e},t.toTextArea=function(){t.toTextArea=isNaN,n(),e.parentNode.removeChild(t.getWrapperElement()),e.style.display=\"\",e.form&&(i.i(a.b)(e.form,\"submit\",n),\"function\"==typeof e.form.submit&&(e.form.submit=c))}},e.style.display=\"none\";var d=i.i(r.a)(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return d}var r=i(50),o=i(1),a=i(2),l=i(0);t.a=n},function(e,t,i){\"use strict\";function n(e){if(document.body.getElementsByClassName)for(var t=document.body.getElementsByClassName(\"CodeMirror\"),i=0;i<t.length;i++){var n=t[i].CodeMirror;n&&e(n)}}function r(){c||(o(),c=!0)}function o(){var e=void 0;i.i(s.c)(window,\"resize\",function(){null==e&&(e=setTimeout(function(){e=null,n(a)},100))}),i.i(s.c)(window,\"blur\",function(){return n(l.c)})}function a(e){var t=e.display;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}var l=i(35),s=i(2);t.a=r;var c=!1},function(e,t,i){\"use strict\";function n(e){e.off=g.b,e.on=g.c,e.wheelEventPixels=o.a,e.Doc=f.a,e.splitLines=m.a,e.countColumn=b.b,e.findColumn=b.c,e.isWordChar=b.d,e.Pass=b.e,e.signal=g.d,e.Line=s.a,e.changeEnd=u.a,e.scrollbarModel=r.a,e.Pos=c.a,e.cmpPos=c.b,e.modes=p.c,e.mimeModes=p.d,e.resolveMode=p.e,e.getMode=p.f,e.modeExtensions=p.g,e.extendMode=p.h,e.copyState=p.i,e.startState=p.j,e.innerMode=p.k,e.commands=w.a,e.keyMap=a.a,e.keyName=a.b,e.isModifierKey=a.c,e.lookupKey=a.d,e.normalizeKeyMap=a.e,e.StringStream=y.a,e.SharedTextMarker=h.a,e.TextMarker=h.b,e.LineWidget=d.a,e.e_preventDefault=g.e,e.e_stopPropagation=g.f,e.e_stop=g.g,e.addClass=v.a,e.contains=v.b,e.rmClass=v.c,e.keyNames=l.a}var r=i(37),o=i(36),a=i(51),l=i(95),s=i(21),c=i(3),u=i(40),f=i(65),d=i(96),h=i(97),p=i(41),v=i(1),g=i(2),m=i(24),b=i(0),y=i(98),w=i(62);t.a=n},function(e,t,i){\"use strict\";var n=i(50);i.d(t,\"a\",function(){return n.a});var r=i(2),o=i(0),a=i(92),l=i(141),s=i(65),c=i(143),u=i(144),f=i(41),d=i(137),h=i(139);i.i(a.a)(n.a),i.i(l.a)(n.a);var p=\"iter insert remove copy getEditor constructor\".split(\" \");for(var v in s.a.prototype)s.a.prototype.hasOwnProperty(v)&&i.i(o.a)(p,v)<0&&(n.a.prototype[v]=function(e){return function(){return e.apply(this.doc,arguments)}}(s.a.prototype[v]));i.i(r.a)(s.a),n.a.inputStyles={textarea:u.a,contenteditable:c.a},n.a.defineMode=function(e){n.a.defaults.mode||\"null\"==e||(n.a.defaults.mode=e),f.a.apply(this,arguments)},n.a.defineMIME=f.b,n.a.defineMode(\"null\",function(){return{token:function(e){return e.skipToEnd()}}}),n.a.defineMIME(\"text/plain\",\"null\"),n.a.defineExtension=function(e,t){n.a.prototype[e]=t},n.a.defineDocExtension=function(e,t){s.a.prototype[e]=t},n.a.fromTextArea=d.a,i.i(h.a)(n.a),n.a.version=\"5.25.3\"},function(e,t,i){\"use strict\";function n(e,t,n,r,o){function a(){var r=t.line+n;return!(r<e.first||r>=e.first+e.size)&&(t=new y.a(r,t.ch,t.sticky),u=i.i(_.d)(e,r))}function l(r){var l=void 0;if(null==(l=o?i.i(m.a)(e.cm,u,t,n):i.i(m.c)(u,t,n))){if(r||!a())return!1;t=i.i(m.b)(o,e.cm,u,t.line,n)}else t=l;return!0}var s=t,c=n,u=i.i(_.d)(e,t.line);if(\"char\"==r)l();else if(\"column\"==r)l(!0);else if(\"word\"==r||\"group\"==r)for(var f=null,d=\"group\"==r,h=e.cm&&e.cm.getHelper(t,\"wordChars\"),p=!0;!(n<0)||l(!p);p=!1){var v=u.text.charAt(t.ch)||\"\\n\",g=i.i(M.v)(v,h)?\"w\":d&&\"\\n\"==v?\"n\":!d||/\\s/.test(v)?null:\"p\";if(!d||p||g||(g=\"s\"),f&&f!=g){n<0&&(n=1,l(),t.sticky=\"after\");break}if(g&&(f=g),n>0&&!l(!p))break}var b=i.i(C.k)(e,t,s,c,!0);return i.i(y.f)(s,b)&&(b.hitSide=!0),b}function r(e,t,n,r){var o=e.doc,a=t.left,l=void 0;if(\"page\"==r){var s=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(s-.5*i.i(w.i)(e.display),3);l=(n>0?t.bottom:t.top)+n*c}else\"line\"==r&&(l=n>0?t.bottom+3:t.top-3);for(var u=void 0;u=i.i(w.A)(e,a,l),u.outside;){if(n<0?l<=0:l>=o.height){u.hitSide=!0;break}l+=5*n}return u}var o=i(66),a=i.n(o),l=i(90),s=i(62),c=i(31),u=i(1),f=i(2),d=i(52),h=i(94),p=i(63),v=i(91),g=i(51),m=i(64),b=i(8),y=i(3),w=i(6),x=i(9),C=i(14),k=i(19),S=i(7),L=i(38),M=i(0),T=i(15),_=i(4),A=i(18);t.a=function(e){var t=e.optionHandlers,o=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,n){var r=this.options,o=r[e];r[e]==n&&\"mode\"!=e||(r[e]=n,t.hasOwnProperty(e)&&i.i(b.b)(this,t[e])(this,n,o),i.i(f.d)(this,\"optionChange\",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?\"push\":\"unshift\"](i.i(g.f)(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,i=0;i<t.length;++i)if(t[i]==e||t[i].name==e)return t.splice(i,1),!0},addOverlay:i.i(b.f)(function(t,n){var r=t.token?t:e.getMode(this.options,t);if(r.startState)throw new Error(\"Overlays may not be stateful.\");i.i(M.u)(this.state.overlays,{mode:r,modeSpec:t,opaque:n&&n.opaque,priority:n&&n.priority||0},function(e){return e.priority}),this.state.modeGen++,i.i(A.b)(this)}),removeOverlay:i.i(b.f)(function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var r=t[n].modeSpec;if(r==e||\"string\"==typeof e&&r.name==e)return t.splice(n,1),this.state.modeGen++,void i.i(A.b)(this)}}),indentLine:i.i(b.f)(function(e,t,n){\"string\"!=typeof t&&\"number\"!=typeof t&&(t=null==t?this.options.smartIndent?\"smart\":\"prev\":t?\"add\":\"subtract\"),i.i(_.c)(this.doc,e)&&i.i(h.a)(this,e,t,n)}),indentSelection:i.i(b.f)(function(e){for(var t=this.doc.sel.ranges,n=-1,r=0;r<t.length;r++){var o=t[r];if(o.empty())o.head.line>n&&(i.i(h.a)(this,o.head.line,e,!0),n=o.head.line,r==this.doc.sel.primIndex&&i.i(k.b)(this));else{var a=o.from(),l=o.to(),s=Math.max(n,a.line);n=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1;for(var c=s;c<n;++c)i.i(h.a)(this,c,e);var u=this.doc.sel.ranges;0==a.ch&&t.length==u.length&&u[r].from().ch>0&&i.i(C.e)(this.doc,r,new x.b(a,u[r].to()),M.h)}}}),getTokenAt:function(e,t){return i.i(d.e)(this,e,t)},getLineTokens:function(e,t){return i.i(d.e)(this,i.i(y.a)(e),t,!0)},getTokenTypeAt:function(e){e=i.i(y.c)(this.doc,e);var t=i.i(d.a)(this,i.i(_.d)(this.doc,e.line)),n=0,r=(t.length-1)/2,o=e.ch,a=void 0;if(0==o)a=t[2];else for(;;){var l=n+r>>1;if((l?t[2*l-1]:0)>=o)r=l;else{if(!(t[2*l+1]<o)){a=t[2*l+2];break}n=l+1}}var s=a?a.indexOf(\"overlay \"):-1;return s<0?a:0==s?null:a.slice(0,s-1)},getModeAt:function(t){var i=this.doc.mode;return i.innerMode?e.innerMode(i,this.getTokenAt(t).state).mode:i},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var n=[];if(!o.hasOwnProperty(t))return n;var r=o[t],a=this.getModeAt(e);if(\"string\"==typeof a[t])r[a[t]]&&n.push(r[a[t]]);else if(a[t])for(var l=0;l<a[t].length;l++){var s=r[a[t][l]];s&&n.push(s)}else a.helperType&&r[a.helperType]?n.push(r[a.helperType]):r[a.name]&&n.push(r[a.name]);for(var c=0;c<r._global.length;c++){var u=r._global[c];u.pred(a,this)&&-1==i.i(M.a)(n,u.val)&&n.push(u.val)}return n},getStateAfter:function(e,t){var n=this.doc;return e=i.i(y.d)(n,null==e?n.first+n.size-1:e),i.i(d.b)(this,e+1,t)},cursorCoords:function(e,t){var n=void 0,r=this.doc.sel.primary();return n=null==e?r.head:\"object\"==(void 0===e?\"undefined\":a()(e))?i.i(y.c)(this.doc,e):e?r.from():r.to(),i.i(w.h)(this,n,t||\"page\")},charCoords:function(e,t){return i.i(w.q)(this,i.i(y.c)(this.doc,e),t||\"page\")},coordsChar:function(e,t){return e=i.i(w.z)(this,e,t||\"page\"),i.i(w.A)(this,e.left,e.top)},lineAtHeight:function(e,t){return e=i.i(w.z)(this,{top:e,left:0},t||\"page\").top,i.i(_.f)(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,n){var r=!1,o=void 0;if(\"number\"==typeof e){var a=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>a&&(e=a,r=!0),o=i.i(_.d)(this.doc,e)}else o=e;return i.i(w.B)(this,o,{top:0,left:0},t||\"page\",n||r).top+(r?this.doc.height-i.i(S.a)(o):0)},defaultTextHeight:function(){return i.i(w.i)(this.display)},defaultCharWidth:function(){return i.i(w.C)(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,o){var a=this.display;e=i.i(w.h)(this,i.i(y.c)(this.doc,e));var l=e.bottom,s=e.left;if(t.style.position=\"absolute\",t.setAttribute(\"cm-ignore-events\",\"true\"),this.display.input.setUneditable(t),a.sizer.appendChild(t),\"over\"==r)l=e.top;else if(\"above\"==r||\"near\"==r){var c=Math.max(a.wrapper.clientHeight,this.doc.height),u=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);(\"above\"==r||e.bottom+t.offsetHeight>c)&&e.top>t.offsetHeight?l=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=c&&(l=e.bottom),s+t.offsetWidth>u&&(s=u-t.offsetWidth)}t.style.top=l+\"px\",t.style.left=t.style.right=\"\",\"right\"==o?(s=a.sizer.clientWidth-t.offsetWidth,t.style.right=\"0px\"):(\"left\"==o?s=0:\"middle\"==o&&(s=(a.sizer.clientWidth-t.offsetWidth)/2),t.style.left=s+\"px\"),n&&i.i(k.e)(this,{left:s,top:l,right:s+t.offsetWidth,bottom:l+t.offsetHeight})},triggerOnKeyDown:i.i(b.f)(v.b),triggerOnKeyPress:i.i(b.f)(v.c),triggerOnKeyUp:v.a,execCommand:function(e){if(s.a.hasOwnProperty(e))return s.a[e].call(null,this)},triggerElectric:i.i(b.f)(function(e){i.i(p.h)(this,e)}),findPosH:function(e,t,r,o){var a=1;t<0&&(a=-1,t=-t);for(var l=i.i(y.c)(this.doc,e),s=0;s<t&&(l=n(this.doc,l,a,r,o),!l.hitSide);++s);return l},moveH:i.i(b.f)(function(e,t){var i=this;this.extendSelectionsBy(function(r){return i.display.shift||i.doc.extend||r.empty()?n(i.doc,r.head,e,t,i.options.rtlMoveVisually):e<0?r.from():r.to()},M.q)}),deleteH:i.i(b.f)(function(e,t){var r=this.doc.sel,o=this.doc;r.somethingSelected()?o.replaceSelection(\"\",null,\"+delete\"):i.i(l.a)(this,function(i){var r=n(o,i.head,e,t,!1);return e<0?{from:r,to:i.head}:{from:i.head,to:r}})}),findPosV:function(e,t,n,o){var a=1,l=o;t<0&&(a=-1,t=-t);for(var s=i.i(y.c)(this.doc,e),c=0;c<t;++c){var u=i.i(w.h)(this,s,\"div\");if(null==l?l=u.left:u.left=l,s=r(this,u,a,n),s.hitSide)break}return s},moveV:i.i(b.f)(function(e,t){var n=this,o=this.doc,a=[],l=!this.display.shift&&!o.extend&&o.sel.somethingSelected();if(o.extendSelectionsBy(function(s){if(l)return e<0?s.from():s.to();var c=i.i(w.h)(n,s.head,\"div\");null!=s.goalColumn&&(c.left=s.goalColumn),a.push(c.left);var u=r(n,c,e,t);return\"page\"==t&&s==o.sel.primary()&&i.i(k.a)(n,null,i.i(w.q)(n,u,\"div\").top-c.top),u},M.q),a.length)for(var s=0;s<o.sel.ranges.length;s++)o.sel.ranges[s].goalColumn=a[s]}),findWordAt:function(e){var t=this.doc,n=i.i(_.d)(t,e.line).text,r=e.ch,o=e.ch;if(n){var a=this.getHelper(e,\"wordChars\");\"before\"!=e.sticky&&o!=n.length||!r?++o:--r;for(var l=n.charAt(r),s=i.i(M.v)(l,a)?function(e){return i.i(M.v)(e,a)}:/\\s/.test(l)?function(e){return/\\s/.test(e)}:function(e){return!/\\s/.test(e)&&!i.i(M.v)(e)};r>0&&s(n.charAt(r-1));)--r;for(;o<n.length&&s(n.charAt(o));)++o}return new x.b(i.i(y.a)(e.line,r),i.i(y.a)(e.line,o))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?i.i(u.a)(this.display.cursorDiv,\"CodeMirror-overwrite\"):i.i(u.c)(this.display.cursorDiv,\"CodeMirror-overwrite\"),i.i(f.d)(this,\"overwriteToggle\",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==i.i(u.j)()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:i.i(b.f)(function(e,t){null==e&&null==t||i.i(k.f)(this),null!=e&&(this.curOp.scrollLeft=e),null!=t&&(this.curOp.scrollTop=t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-i.i(w.g)(this)-this.display.barHeight,width:e.scrollWidth-i.i(w.g)(this)-this.display.barWidth,clientHeight:i.i(w.j)(this),clientWidth:i.i(w.l)(this)}},scrollIntoView:i.i(b.f)(function(e,t){if(null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):\"number\"==typeof e?e={from:i.i(y.a)(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line)i.i(k.f)(this),this.curOp.scrollToPos=e;else{var n=i.i(k.g)(this,{left:Math.min(e.from.left,e.to.left),top:Math.min(e.from.top,e.to.top)-e.margin,right:Math.max(e.from.right,e.to.right),bottom:Math.max(e.from.bottom,e.to.bottom)+e.margin});this.scrollTo(n.scrollLeft,n.scrollTop)}}),setSize:i.i(b.f)(function(e,t){var n=this,r=function(e){return\"number\"==typeof e||/^\\d+$/.test(String(e))?e+\"px\":e};null!=e&&(this.display.wrapper.style.width=r(e)),null!=t&&(this.display.wrapper.style.height=r(t)),this.options.lineWrapping&&i.i(w.D)(this);var o=this.display.viewFrom;this.doc.iter(o,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){i.i(A.a)(n,o,\"widget\");break}++o}),this.curOp.forceUpdate=!0,i.i(f.d)(this,\"refresh\",this)}),operation:function(e){return i.i(b.a)(this,e)},refresh:i.i(b.f)(function(){var e=this.display.cachedTextHeight;i.i(A.b)(this),this.curOp.forceUpdate=!0,i.i(w.y)(this),this.scrollTo(this.doc.scrollLeft,this.doc.scrollTop),i.i(L.b)(this),(null==e||Math.abs(e-i.i(w.i)(this.display))>.5)&&i.i(w.b)(this),i.i(f.d)(this,\"refresh\",this)}),swapDoc:i.i(b.f)(function(e){var t=this.doc;return t.cm=null,i.i(c.e)(this,e),i.i(w.y)(this),this.display.input.reset(),this.scrollTo(e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,i.i(T.a)(this,\"swapDoc\",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},i.i(f.a)(e),e.registerHelper=function(t,i,n){o.hasOwnProperty(t)||(o[t]=e[t]={_global:[]}),o[t][i]=n},e.registerGlobalHelper=function(t,i,n,r){e.registerHelper(t,i,r),o[t]._global.push({pred:n,val:r})}}},function(e,t,i){\"use strict\";function n(e){var t=this,n=t.display;if(!(i.i(C.k)(t,e)||n.activeTouch&&n.input.supportsTouch())){if(n.input.ensurePolled(),n.shift=e.shiftKey,i.i(m.b)(n,e))return void(w.g||(n.scroller.draggable=!1,setTimeout(function(){return n.scroller.draggable=!0},100)));if(!s(t,e)){var o=i.i(g.x)(t,e);switch(window.focus(),i.i(C.m)(e)){case 1:t.state.selectingText?t.state.selectingText(e):o?r(t,e,o):i.i(C.j)(e)==n.scroller&&i.i(C.e)(e);break;case 2:w.g&&(t.state.lastMiddleDown=+new Date),o&&i.i(y.g)(t.doc,o),setTimeout(function(){return n.input.focus()},20),i.i(C.e)(e);break;case 3:w.o?c(t,e):i.i(f.d)(t)}}}}function r(e,t,n){w.b?setTimeout(i.i(S.n)(f.a,e),0):e.curOp.focus=i.i(x.j)();var r=+new Date,l=void 0;M&&M.time>r-400&&0==i.i(p.b)(M.pos,n)?l=\"triple\":L&&L.time>r-400&&0==i.i(p.b)(L.pos,n)?(l=\"double\",M={time:r,pos:n}):(l=\"single\",L={time:r,pos:n});var s=e.doc.sel,c=w.c?t.metaKey:t.ctrlKey,u=void 0;e.options.dragDrop&&k.g&&!e.isReadOnly()&&\"single\"==l&&(u=s.contains(n))>-1&&(i.i(p.b)((u=s.ranges[u]).from(),n)<0||n.xRel>0)&&(i.i(p.b)(u.to(),n)>0||n.xRel<0)?o(e,t,n,c):a(e,t,n,l,c)}function o(e,t,n,r){var o=e.display,a=!1,l=i.i(d.b)(e,function(t){w.g&&(o.scroller.draggable=!1),e.state.draggingText=!1,i.i(C.b)(document,\"mouseup\",l),i.i(C.b)(document,\"mousemove\",s),i.i(C.b)(o.scroller,\"dragstart\",c),i.i(C.b)(o.scroller,\"drop\",l),a||(i.i(C.e)(t),r||i.i(y.g)(e.doc,n),w.g||w.b&&9==w.d?setTimeout(function(){document.body.focus(),o.input.focus()},20):o.input.focus())}),s=function(e){a=a||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},c=function(){return a=!0};w.g&&(o.scroller.draggable=!0),e.state.draggingText=l,l.copy=w.c?t.altKey:t.ctrlKey,o.scroller.dragDrop&&o.scroller.dragDrop(),i.i(C.c)(document,\"mouseup\",l),i.i(C.c)(document,\"mousemove\",s),i.i(C.c)(o.scroller,\"dragstart\",c),i.i(C.c)(o.scroller,\"drop\",l),i.i(f.d)(e),setTimeout(function(){return o.input.focus()},20)}function a(e,t,n,r,o){function a(t){if(0!=i.i(p.b)(_,t))if(_=t,\"rect\"==r){for(var o=[],a=e.options.tabSize,l=i.i(S.b)(i.i(v.d)(u,n.line).text,n.ch,a),s=i.i(S.b)(i.i(v.d)(u,t.line).text,t.ch,a),c=Math.min(l,s),d=Math.max(l,s),h=Math.min(n.line,t.line),g=Math.min(e.lastLine(),Math.max(n.line,t.line));h<=g;h++){var w=i.i(v.d)(u,h).text,x=i.i(S.c)(w,c,a);c==d?o.push(new b.b(i.i(p.a)(h,x),i.i(p.a)(h,x))):w.length>x&&o.push(new b.b(i.i(p.a)(h,x),i.i(p.a)(h,i.i(S.c)(w,d,a))))}o.length||o.push(new b.b(n,n)),i.i(y.a)(u,i.i(b.c)(k.ranges.slice(0,m).concat(o),m),{origin:\"*mouse\",scroll:!1}),e.scrollIntoView(t)}else{var C=f,L=C.anchor,M=t;if(\"single\"!=r){var T=void 0;T=\"double\"==r?e.findWordAt(t):new b.b(i.i(p.a)(t.line,0),i.i(p.c)(u,i.i(p.a)(t.line+1,0))),i.i(p.b)(T.anchor,L)>0?(M=T.head,L=i.i(p.g)(C.from(),T.anchor)):(M=T.anchor,L=i.i(p.h)(C.to(),T.head))}var A=k.ranges.slice(0);A[m]=new b.b(i.i(p.c)(u,L),M),i.i(y.a)(u,i.i(b.c)(A,m),S.t)}}function l(t){var n=++O,o=i.i(g.x)(e,t,!0,\"rect\"==r);if(o)if(0!=i.i(p.b)(o,_)){e.curOp.focus=i.i(x.j)(),a(o);var s=i.i(h.a)(c,u);(o.line>=s.to||o.line<s.from)&&setTimeout(i.i(d.b)(e,function(){O==n&&l(t)}),150)}else{var f=t.clientY<A.top?-20:t.clientY>A.bottom?20:0;f&&setTimeout(i.i(d.b)(e,function(){O==n&&(c.scroller.scrollTop+=f,l(t))}),50)}}function s(t){e.state.selectingText=!1,O=1/0,i.i(C.e)(t),c.input.focus(),i.i(C.b)(document,\"mousemove\",D),i.i(C.b)(document,\"mouseup\",N),u.history.lastSelOrigin=null}var c=e.display,u=e.doc;i.i(C.e)(t);var f=void 0,m=void 0,k=u.sel,L=k.ranges;if(o&&!t.shiftKey?(m=u.sel.contains(n),f=m>-1?L[m]:new b.b(n,n)):(f=u.sel.primary(),m=u.sel.primIndex),w.p?t.shiftKey&&t.metaKey:t.altKey)r=\"rect\",o||(f=new b.b(n,n)),n=i.i(g.x)(e,t,!0,!0),m=-1;else if(\"double\"==r){var M=e.findWordAt(n);f=e.display.shift||u.extend?i.i(y.j)(u,f,M.anchor,M.head):M}else if(\"triple\"==r){var T=new b.b(i.i(p.a)(n.line,0),i.i(p.c)(u,i.i(p.a)(n.line+1,0)));f=e.display.shift||u.extend?i.i(y.j)(u,f,T.anchor,T.head):T}else f=i.i(y.j)(u,f,n);o?-1==m?(m=L.length,i.i(y.a)(u,i.i(b.c)(L.concat([f]),m),{scroll:!1,origin:\"*mouse\"})):L.length>1&&L[m].empty()&&\"single\"==r&&!t.shiftKey?(i.i(y.a)(u,i.i(b.c)(L.slice(0,m).concat(L.slice(m+1)),0),{scroll:!1,origin:\"*mouse\"}),k=u.sel):i.i(y.e)(u,m,f,S.t):(m=0,i.i(y.a)(u,new b.a([f],0),S.t),k=u.sel);var _=n,A=c.wrapper.getBoundingClientRect(),O=0,D=i.i(d.b)(e,function(e){i.i(C.m)(e)?l(e):s(e)}),N=i.i(d.b)(e,s);e.state.selectingText=N,i.i(C.c)(document,\"mousemove\",D),i.i(C.c)(document,\"mouseup\",N)}function l(e,t,n,r){var o=void 0,a=void 0;try{o=t.clientX,a=t.clientY}catch(t){return!1}if(o>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&i.i(C.e)(t);var l=e.display,s=l.lineDiv.getBoundingClientRect();if(a>s.bottom||!i.i(C.h)(e,n))return i.i(C.n)(t);a-=s.top-l.viewOffset;for(var c=0;c<e.options.gutters.length;++c){var u=l.gutters.childNodes[c];if(u&&u.getBoundingClientRect().right>=o){var f=i.i(v.f)(e.doc,a),d=e.options.gutters[c];return i.i(C.d)(e,n,e,f,d,t),i.i(C.n)(t)}}}function s(e,t){return l(e,t,\"gutterClick\",!0)}function c(e,t){i.i(m.b)(e.display,t)||u(e,t)||i.i(C.k)(e,t,\"contextmenu\")||e.display.input.onContextMenu(t)}function u(e,t){return!!i.i(C.h)(e,\"gutterContextMenu\")&&l(e,t,\"gutterContextMenu\",!1)}var f=i(35),d=i(8),h=i(49),p=i(3),v=i(4),g=i(6),m=i(22),b=i(9),y=i(14),w=i(5),x=i(1),C=i(2),k=i(24),S=i(0);t.a=n,t.b=s,t.c=c;var L=void 0,M=void 0},function(e,t,i){\"use strict\";function n(e,t){var n=i.i(y.t)(e,t.line);if(!n||n.hidden)return null;var r=i.i(b.d)(e.doc,t.line),o=i.i(y.v)(n,r,t.line),a=i.i(k.a)(r,e.doc.direction),l=\"left\";if(a){l=i.i(k.b)(a,t.ch)%2?\"right\":\"left\"}var s=i.i(y.w)(o.map,t.ch,l);return s.offset=\"right\"==s.collapse?s.end:s.start,s}function r(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}function o(e,t){return t&&(e.bad=!0),e}function a(e,t,n,r,o){function a(e){return function(t){return t.id==e}}function l(){f&&(u+=d,f=!1)}function s(e){e&&(l(),u+=e)}function c(t){if(1==t.nodeType){var n=t.getAttribute(\"cm-text\");if(null!=n)return void s(n||t.textContent.replace(/\\u200b/g,\"\"));var u=t.getAttribute(\"cm-marker\"),h=void 0;if(u){var p=e.findMarks(i.i(m.a)(r,0),i.i(m.a)(o+1,0),a(+u));return void(p.length&&(h=p[0].find())&&s(i.i(b.e)(e.doc,h.from,h.to).join(d)))}if(\"false\"==t.getAttribute(\"contenteditable\"))return;var v=/^(pre|div|p)$/i.test(t.nodeName);v&&l();for(var g=0;g<t.childNodes.length;g++)c(t.childNodes[g]);v&&(f=!0)}else 3==t.nodeType&&s(t.nodeValue)}for(var u=\"\",f=!1,d=e.doc.lineSeparator();c(t),t!=n;)t=t.nextSibling;return u}function l(e,t,n){var r=void 0;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return o(e.clipPos(i.i(m.a)(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var a=0;a<e.display.view.length;a++){var l=e.display.view[a];if(l.node==r)return s(l,t,n)}}function s(e,t,n){function r(t,n,r){for(var o=-1;o<(d?d.length:0);o++)for(var a=o<0?f.map:d[o],l=0;l<a.length;l+=3){var s=a[l+2];if(s==t||s==n){var c=i.i(b.a)(o<0?e.line:e.rest[o]),u=a[l]+r;return(r<0||s!=t)&&(u=a[l+(r?1:0)]),i.i(m.a)(c,u)}}}var a=e.text.firstChild,l=!1;if(!t||!i.i(L.b)(a,t))return o(i.i(m.a)(i.i(b.a)(e.line),0),!0);if(t==a&&(l=!0,t=a.childNodes[n],n=0,!t)){var s=e.rest?i.i(T.f)(e.rest):e.line;return o(i.i(m.a)(i.i(b.a)(s),s.text.length),l)}var c=3==t.nodeType?t:null,u=t;for(c||1!=t.childNodes.length||3!=t.firstChild.nodeType||(c=t.firstChild,n&&(n=c.nodeValue.length));u.parentNode!=a;)u=u.parentNode;var f=e.measure,d=f.maps,h=r(c,u,n);if(h)return o(h,l);for(var p=u.nextSibling,v=c?c.nodeValue.length-n:0;p;p=p.nextSibling){if(h=r(p,p.firstChild,0))return o(i.i(m.a)(h.line,h.ch-v),l);v+=p.textContent.length}for(var g=u.previousSibling,y=n;g;g=g.previousSibling){if(h=r(g,g.firstChild,-1))return o(i.i(m.a)(h.line,h.ch+y),l);y+=g.textContent.length}}var c=i(16),u=i.n(c),f=i(17),d=i.n(f),h=i(8),p=i(20),v=i(18),g=i(63),m=i(3),b=i(4),y=i(6),w=i(23),x=i(9),C=i(14),k=i(32),S=i(5),L=i(1),M=i(2),T=i(0),_=function(){function e(t){u()(this,e),this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new T.o,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null}return d()(e,[{key:\"init\",value:function(e){function t(e){if(!i.i(M.k)(o,e)){if(o.somethingSelected())i.i(g.c)({lineWise:!1,text:o.getSelections()}),\"cut\"==e.type&&o.replaceSelection(\"\",null,\"cut\");else{if(!o.options.lineWiseCopyCut)return;var t=i.i(g.d)(o);i.i(g.c)({lineWise:!0,text:t.text}),\"cut\"==e.type&&o.operation(function(){o.setSelections(t.ranges,0,T.h),o.replaceSelection(\"\",null,\"cut\")})}if(e.clipboardData){e.clipboardData.clearData();var n=g.e.text.join(\"\\n\");if(e.clipboardData.setData(\"Text\",n),e.clipboardData.getData(\"Text\")==n)return void e.preventDefault()}var l=i.i(g.f)(),s=l.firstChild;o.display.lineSpace.insertBefore(l,o.display.lineSpace.firstChild),s.value=g.e.text.join(\"\\n\");var c=document.activeElement;i.i(L.k)(s),setTimeout(function(){o.display.lineSpace.removeChild(l),c.focus(),c==a&&r.showPrimarySelection()},50)}}var n=this,r=this,o=r.cm,a=r.div=e.lineDiv;i.i(g.a)(a,o.options.spellcheck),i.i(M.c)(a,\"paste\",function(e){i.i(M.k)(o,e)||i.i(g.b)(e,o)||S.d<=11&&setTimeout(i.i(h.b)(o,function(){return n.updateFromDOM()}),20)}),i.i(M.c)(a,\"compositionstart\",function(e){n.composing={data:e.data,done:!1}}),i.i(M.c)(a,\"compositionupdate\",function(e){n.composing||(n.composing={data:e.data,done:!1})}),i.i(M.c)(a,\"compositionend\",function(e){n.composing&&(e.data!=n.composing.data&&n.readFromDOMSoon(),n.composing.done=!0)}),i.i(M.c)(a,\"touchstart\",function(){return r.forceCompositionEnd()}),i.i(M.c)(a,\"input\",function(){n.composing||n.readFromDOMSoon()}),i.i(M.c)(a,\"copy\",t),i.i(M.c)(a,\"cut\",t)}},{key:\"prepareSelection\",value:function(){var e=i.i(p.c)(this.cm,!1);return e.focus=this.cm.state.focused,e}},{key:\"showSelection\",value:function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))}},{key:\"showPrimarySelection\",value:function(){var e=window.getSelection(),t=this.cm,r=t.doc.sel.primary(),o=r.from(),a=r.to();if(t.display.viewTo==t.display.viewFrom||o.line>=t.display.viewTo||a.line<t.display.viewFrom)return void e.removeAllRanges();var s=l(t,e.anchorNode,e.anchorOffset),c=l(t,e.focusNode,e.focusOffset);if(!s||s.bad||!c||c.bad||0!=i.i(m.b)(i.i(m.g)(s,c),o)||0!=i.i(m.b)(i.i(m.h)(s,c),a)){var u=t.display.view,f=o.line>=t.display.viewFrom&&n(t,o)||{node:u[0].measure.map[2],offset:0},d=a.line<t.display.viewTo&&n(t,a);if(!d){var h=u[u.length-1].measure,p=h.maps?h.maps[h.maps.length-1]:h.map;d={node:p[p.length-1],offset:p[p.length-2]-p[p.length-3]}}if(!f||!d)return void e.removeAllRanges();var v=e.rangeCount&&e.getRangeAt(0),g=void 0;try{g=i.i(L.f)(f.node,f.offset,d.offset,d.node)}catch(e){}g&&(!S.i&&t.state.focused?(e.collapse(f.node,f.offset),g.collapsed||(e.removeAllRanges(),e.addRange(g))):(e.removeAllRanges(),e.addRange(g)),v&&null==e.anchorNode?e.addRange(v):S.i&&this.startGracePeriod()),this.rememberSelection()}}},{key:\"startGracePeriod\",value:function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)}},{key:\"showMultipleSelections\",value:function(e){i.i(L.d)(this.cm.display.cursorDiv,e.cursors),i.i(L.d)(this.cm.display.selectionDiv,e.selection)}},{key:\"rememberSelection\",value:function(){var e=window.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset}},{key:\"selectionInEditor\",value:function(){var e=window.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return i.i(L.b)(this.div,t)}},{key:\"focus\",value:function(){\"nocursor\"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())}},{key:\"blur\",value:function(){this.div.blur()}},{key:\"getField\",value:function(){return this.div}},{key:\"supportsTouch\",value:function(){return!0}},{key:\"receivedFocus\",value:function(){function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))}var t=this;this.selectionInEditor()?this.pollSelection():i.i(h.a)(this.cm,function(){return t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,e)}},{key:\"selectionChanged\",value:function(){var e=window.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset}},{key:\"pollSelection\",value:function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=window.getSelection(),t=this.cm;if(S.f&&S.e&&this.cm.options.gutters.length&&r(e.anchorNode))return this.cm.triggerOnKeyDown({type:\"keydown\",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var n=l(t,e.anchorNode,e.anchorOffset),o=l(t,e.focusNode,e.focusOffset);n&&o&&i.i(h.a)(t,function(){i.i(C.a)(t.doc,i.i(x.d)(n,o),T.h),(n.bad||o.bad)&&(t.curOp.selectionChanged=!0)})}}}},{key:\"pollContent\",value:function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e=this.cm,t=e.display,n=e.doc.sel.primary(),r=n.from(),o=n.to();if(0==r.ch&&r.line>e.firstLine()&&(r=i.i(m.a)(r.line-1,i.i(b.d)(e.doc,r.line-1).length)),o.ch==i.i(b.d)(e.doc,o.line).text.length&&o.line<e.lastLine()&&(o=i.i(m.a)(o.line+1,0)),r.line<t.viewFrom||o.line>t.viewTo-1)return!1;var l=void 0,s=void 0,c=void 0;r.line==t.viewFrom||0==(l=i.i(y.r)(e,r.line))?(s=i.i(b.a)(t.view[0].line),c=t.view[0].node):(s=i.i(b.a)(t.view[l].line),c=t.view[l-1].node.nextSibling);var u=i.i(y.r)(e,o.line),f=void 0,d=void 0;if(u==t.view.length-1?(f=t.viewTo-1,d=t.lineDiv.lastChild):(f=i.i(b.a)(t.view[u+1].line)-1,d=t.view[u+1].node.previousSibling),!c)return!1;for(var h=e.doc.splitLines(a(e,c,d,s,f)),p=i.i(b.e)(e.doc,i.i(m.a)(s,0),i.i(m.a)(f,i.i(b.d)(e.doc,f).text.length));h.length>1&&p.length>1;)if(i.i(T.f)(h)==i.i(T.f)(p))h.pop(),p.pop(),f--;else{if(h[0]!=p[0])break;h.shift(),p.shift(),s++}for(var v=0,g=0,x=h[0],C=p[0],k=Math.min(x.length,C.length);v<k&&x.charCodeAt(v)==C.charCodeAt(v);)++v;for(var S=i.i(T.f)(h),L=i.i(T.f)(p),M=Math.min(S.length-(1==h.length?v:0),L.length-(1==p.length?v:0));g<M&&S.charCodeAt(S.length-g-1)==L.charCodeAt(L.length-g-1);)++g;if(1==h.length&&1==p.length&&s==r.line)for(;v&&v>r.ch&&S.charCodeAt(S.length-g-1)==L.charCodeAt(L.length-g-1);)v--,g++;h[h.length-1]=S.slice(0,S.length-g).replace(/^\\u200b+/,\"\"),h[0]=h[0].slice(v).replace(/\\u200b+$/,\"\");var _=i.i(m.a)(s,v),A=i.i(m.a)(f,p.length?i.i(T.f)(p).length-g:0);return h.length>1||h[0]||i.i(m.b)(_,A)?(i.i(w.b)(e.doc,h,_,A,\"+input\"),!0):void 0}},{key:\"ensurePolled\",value:function(){this.forceCompositionEnd()}},{key:\"reset\",value:function(){this.forceCompositionEnd()}},{key:\"forceCompositionEnd\",value:function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())}},{key:\"readFromDOMSoon\",value:function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))}},{key:\"updateFromDOM\",value:function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||i.i(h.a)(this.cm,function(){return i.i(v.b)(e.cm)})}},{key:\"setUneditable\",value:function(e){e.contentEditable=\"false\"}},{key:\"onKeyPress\",value:function(e){0!=e.charCode&&(e.preventDefault(),this.cm.isReadOnly()||i.i(h.b)(this.cm,g.g)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))}},{key:\"readOnlyChanged\",value:function(e){this.div.contentEditable=String(\"nocursor\"!=e)}},{key:\"onContextMenu\",value:function(){}},{key:\"resetPosition\",value:function(){}}]),e}();t.a=_,_.prototype.needsContentAttribute=!0},function(e,t,i){\"use strict\";var n=i(16),r=i.n(n),o=i(17),a=i.n(o),l=i(8),s=i(20),c=i(63),u=i(6),f=i(22),d=i(9),h=i(14),p=i(5),v=i(1),g=i(2),m=i(24),b=i(0),y=function(){function e(t){r()(this,e),this.cm=t,this.prevInput=\"\",this.pollingFast=!1,this.polling=new b.o,this.inaccurateSelection=!1,this.hasSelection=!1,this.composing=null}return a()(e,[{key:\"init\",value:function(e){function t(e){if(!i.i(g.k)(o,e)){if(o.somethingSelected())i.i(c.c)({lineWise:!1,text:o.getSelections()}),r.inaccurateSelection&&(r.prevInput=\"\",r.inaccurateSelection=!1,l.value=c.e.text.join(\"\\n\"),i.i(v.k)(l));else{if(!o.options.lineWiseCopyCut)return;var t=i.i(c.d)(o);i.i(c.c)({lineWise:!0,text:t.text}),\"cut\"==e.type?o.setSelections(t.ranges,null,b.h):(r.prevInput=\"\",l.value=t.text.join(\"\\n\"),i.i(v.k)(l))}\"cut\"==e.type&&(o.state.cutIncoming=!0)}}var n=this,r=this,o=this.cm,a=this.wrapper=i.i(c.f)(),l=this.textarea=a.firstChild;e.wrapper.insertBefore(a,e.wrapper.firstChild),p.a&&(l.style.width=\"0px\"),i.i(g.c)(l,\"input\",function(){p.b&&p.d>=9&&n.hasSelection&&(n.hasSelection=null),r.poll()}),i.i(g.c)(l,\"paste\",function(e){i.i(g.k)(o,e)||i.i(c.b)(e,o)||(o.state.pasteIncoming=!0,r.fastPoll())}),i.i(g.c)(l,\"cut\",t),i.i(g.c)(l,\"copy\",t),i.i(g.c)(e.scroller,\"paste\",function(t){i.i(f.b)(e,t)||i.i(g.k)(o,t)||(o.state.pasteIncoming=!0,r.focus())}),i.i(g.c)(e.lineSpace,\"selectstart\",function(t){i.i(f.b)(e,t)||i.i(g.e)(t)}),i.i(g.c)(l,\"compositionstart\",function(){var e=o.getCursor(\"from\");r.composing&&r.composing.range.clear(),r.composing={start:e,range:o.markText(e,o.getCursor(\"to\"),{className:\"CodeMirror-composing\"})}}),i.i(g.c)(l,\"compositionend\",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})}},{key:\"prepareSelection\",value:function(){var e=this.cm,t=e.display,n=e.doc,r=i.i(s.c)(e);if(e.options.moveInputWithCursor){var o=i.i(u.h)(e,n.sel.primary().head,\"div\"),a=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,o.top+l.top-a.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,o.left+l.left-a.left))}return r}},{key:\"showSelection\",value:function(e){var t=this.cm,n=t.display;i.i(v.d)(n.cursorDiv,e.cursors),i.i(v.d)(n.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+\"px\",this.wrapper.style.left=e.teLeft+\"px\")}},{key:\"reset\",value:function(e){if(!this.contextMenuPending){var t=void 0,n=void 0,r=this.cm,o=r.doc;if(r.somethingSelected()){this.prevInput=\"\";var a=o.sel.primary();t=m.e&&(a.to().line-a.from().line>100||(n=r.getSelection()).length>1e3);var l=t?\"-\":n||r.getSelection();this.textarea.value=l,r.state.focused&&i.i(v.k)(this.textarea),p.b&&p.d>=9&&(this.hasSelection=l)}else e||(this.prevInput=this.textarea.value=\"\",p.b&&p.d>=9&&(this.hasSelection=null));this.inaccurateSelection=t}}},{key:\"getField\",value:function(){return this.textarea}},{key:\"supportsTouch\",value:function(){return!1}},{key:\"focus\",value:function(){if(\"nocursor\"!=this.cm.options.readOnly&&(!p.n||i.i(v.j)()!=this.textarea))try{this.textarea.focus()}catch(e){}}},{key:\"blur\",value:function(){this.textarea.blur()}},{key:\"resetPosition\",value:function(){this.wrapper.style.top=this.wrapper.style.left=0}},{key:\"receivedFocus\",value:function(){this.slowPoll()}},{key:\"slowPoll\",value:function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})}},{key:\"fastPoll\",value:function(){function e(){i.poll()||t?(i.pollingFast=!1,i.slowPoll()):(t=!0,i.polling.set(60,e))}var t=!1,i=this;i.pollingFast=!0,i.polling.set(20,e)}},{key:\"poll\",value:function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||!t.state.focused||i.i(m.f)(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var o=n.value;if(o==r&&!t.somethingSelected())return!1;if(p.b&&p.d>=9&&this.hasSelection===o||p.c&&/[\\uf700-\\uf7ff]/.test(o))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var a=o.charCodeAt(0);if(8203!=a||r||(r=\"​\"),8666==a)return this.reset(),this.cm.execCommand(\"undo\")}for(var s=0,u=Math.min(r.length,o.length);s<u&&r.charCodeAt(s)==o.charCodeAt(s);)++s;return i.i(l.a)(t,function(){i.i(c.g)(t,o.slice(s),r.length-s,null,e.composing?\"*compose\":null),o.length>1e3||o.indexOf(\"\\n\")>-1?n.value=e.prevInput=\"\":e.prevInput=o,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor(\"to\"),{className:\"CodeMirror-composing\"}))}),!0}},{key:\"ensurePolled\",value:function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)}},{key:\"onKeyPress\",value:function(){p.b&&p.d>=9&&(this.hasSelection=null),this.fastPoll()}},{key:\"onContextMenu\",value:function(e){function t(){if(null!=s.selectionStart){var e=o.somethingSelected(),t=\"​\"+(e?s.value:\"\");s.value=\"⇚\",s.value=t,r.prevInput=e?\"\":\"​\",s.selectionStart=1,s.selectionEnd=t.length,a.selForContextMenu=o.doc.sel}}function n(){if(r.contextMenuPending=!1,r.wrapper.style.cssText=m,s.style.cssText=v,p.b&&p.d<9&&a.scrollbars.setScrollTop(a.scroller.scrollTop=f),null!=s.selectionStart){(!p.b||p.b&&p.d<9)&&t();var e=0,n=function t(){a.selForContextMenu==o.doc.sel&&0==s.selectionStart&&s.selectionEnd>0&&\"​\"==r.prevInput?i.i(l.b)(o,h.d)(o):e++<10?a.detectingSelectAll=setTimeout(t,500):(a.selForContextMenu=null,a.input.reset())};a.detectingSelectAll=setTimeout(n,200)}}var r=this,o=r.cm,a=o.display,s=r.textarea,c=i.i(u.x)(o,e),f=a.scroller.scrollTop;if(c&&!p.k){o.options.resetSelectionOnContextMenu&&-1==o.doc.sel.contains(c)&&i.i(l.b)(o,h.a)(o.doc,i.i(d.d)(c),b.h);var v=s.style.cssText,m=r.wrapper.style.cssText;r.wrapper.style.cssText=\"position: absolute\";var y=r.wrapper.getBoundingClientRect();s.style.cssText=\"position: absolute; width: 30px; height: 30px;\\n      top: \"+(e.clientY-y.top-5)+\"px; left: \"+(e.clientX-y.left-5)+\"px;\\n      z-index: 1000; background: \"+(p.b?\"rgba(255, 255, 255, .05)\":\"transparent\")+\";\\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";var w=void 0;if(p.g&&(w=window.scrollY),a.input.focus(),p.g&&window.scrollTo(null,w),a.input.reset(),o.somethingSelected()||(s.value=r.prevInput=\" \"),r.contextMenuPending=!0,a.selForContextMenu=o.doc.sel,clearTimeout(a.detectingSelectAll),p.b&&p.d>=9&&t(),p.o){i.i(g.g)(e);var x=function e(){i.i(g.b)(window,\"mouseup\",e),setTimeout(n,20)};i.i(g.c)(window,\"mouseup\",x)}else setTimeout(n,50)}}},{key:\"readOnlyChanged\",value:function(e){e||this.reset()}},{key:\"setUneditable\",value:function(){}}]),e}();t.a=y,y.prototype.needsContentAttribute=!1},function(e,t,i){\"use strict\";var n=i(16),r=i.n(n),o=i(17),a=i.n(o),l=i(21),s=i(0),c=i(15);i.d(t,\"b\",function(){return u}),i.d(t,\"a\",function(){return f});var u=function(){function e(t){r()(this,e),this.lines=t,this.parent=null;for(var i=0,n=0;n<t.length;++n)t[n].parent=this,i+=t[n].height;this.height=i}return a()(e,[{key:\"chunkSize\",value:function(){return this.lines.length}},{key:\"removeInner\",value:function(e,t){for(var n=e,r=e+t;n<r;++n){var o=this.lines[n];this.height-=o.height,i.i(l.g)(o),i.i(c.a)(o,\"delete\")}this.lines.splice(e,t)}},{key:\"collapse\",value:function(e){e.push.apply(e,this.lines)}},{key:\"insertInner\",value:function(e,t,i){this.height+=i,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var n=0;n<t.length;++n)t[n].parent=this}},{key:\"iterN\",value:function(e,t,i){for(var n=e+t;e<n;++e)if(i(this.lines[e]))return!0}}]),e}(),f=function(){function e(t){r()(this,e),this.children=t;for(var i=0,n=0,o=0;o<t.length;++o){var a=t[o];i+=a.chunkSize(),n+=a.height,a.parent=this}this.size=i,this.height=n,this.parent=null}return a()(e,[{key:\"chunkSize\",value:function(){return this.size}},{key:\"removeInner\",value:function(e,t){this.size-=t;for(var i=0;i<this.children.length;++i){var n=this.children[i],r=n.chunkSize();if(e<r){var o=Math.min(t,r-e),a=n.height;if(n.removeInner(e,o),this.height-=a-n.height,r==o&&(this.children.splice(i--,1),n.parent=null),0==(t-=o))break;e=0}else e-=r}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof u))){var l=[];this.collapse(l),this.children=[new u(l)],this.children[0].parent=this}}},{key:\"collapse\",value:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)}},{key:\"insertInner\",value:function(e,t,i){this.size+=t.length,this.height+=i;for(var n=0;n<this.children.length;++n){var r=this.children[n],o=r.chunkSize();if(e<=o){if(r.insertInner(e,t,i),r.lines&&r.lines.length>50){for(var a=r.lines.length%25+25,l=a;l<r.lines.length;){var s=new u(r.lines.slice(l,l+=25));r.height-=s.height,this.children.splice(++n,0,s),s.parent=this}r.lines=r.lines.slice(0,a),this.maybeSpill()}break}e-=o}}},{key:\"maybeSpill\",value:function(){if(!(this.children.length<=10)){var t=this;do{var n=t.children.splice(t.children.length-5,5),r=new e(n);if(t.parent){t.size-=r.size,t.height-=r.height;var o=i.i(s.a)(t.parent.children,t);t.parent.children.splice(o+1,0,r)}else{var a=new e(t.children);a.parent=t,t.children=[a,r],t=a}r.parent=t.parent}while(t.children.length>10);t.parent.maybeSpill()}}},{key:\"iterN\",value:function(e,t,i){for(var n=0;n<this.children.length;++n){var r=this.children[n],o=r.chunkSize();if(e<o){var a=Math.min(t,o-e);if(r.iterN(e,a,i))return!0;if(0==(t-=a))break;e=0}else e-=o}}}]),e}()},function(e,t,i){\"use strict\";(function(e){var t=i(66),n=i.n(t);!function(t){\"object\"==(\"undefined\"==typeof exports?\"undefined\":n()(exports))&&\"object\"==n()(e)?t(i(86)):\"function\"==typeof define&&i(229)?define([\"../lib/codemirror\"],t):t(CodeMirror)}(function(e){function t(e,t,i){return/^(?:operator|sof|keyword c|case|new|export|default|[\\[{}\\(,;:]|=>)$/.test(t.lastType)||\"quasi\"==t.lastType&&/\\{\\s*$/.test(e.string.slice(0,e.pos-(i||0)))}e.defineMode(\"javascript\",function(i,r){function o(e){for(var t,i=!1,n=!1;null!=(t=e.next());){if(!i){if(\"/\"==t&&!n)return;\"[\"==t?n=!0:n&&\"]\"==t&&(n=!1)}i=!i&&\"\\\\\"==t}}function a(e,t,i){return Me=e,Te=i,t}function l(e,i){var n=e.next();if('\"'==n||\"'\"==n)return i.tokenize=s(n),i.tokenize(e,i);if(\".\"==n&&e.match(/^\\d+(?:[eE][+\\-]?\\d+)?/))return a(\"number\",\"number\");if(\".\"==n&&e.match(\"..\"))return a(\"spread\",\"meta\");if(/[\\[\\]{}\\(\\),;\\:\\.]/.test(n))return a(n);if(\"=\"==n&&e.eat(\">\"))return a(\"=>\",\"operator\");if(\"0\"==n&&e.eat(/x/i))return e.eatWhile(/[\\da-f]/i),a(\"number\",\"number\");if(\"0\"==n&&e.eat(/o/i))return e.eatWhile(/[0-7]/i),a(\"number\",\"number\");if(\"0\"==n&&e.eat(/b/i))return e.eatWhile(/[01]/i),a(\"number\",\"number\");if(/\\d/.test(n))return e.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/),a(\"number\",\"number\");if(\"/\"==n)return e.eat(\"*\")?(i.tokenize=c,c(e,i)):e.eat(\"/\")?(e.skipToEnd(),a(\"comment\",\"comment\")):t(e,i,1)?(o(e),e.match(/^\\b(([gimyu])(?![gimyu]*\\2))+\\b/),a(\"regexp\",\"string-2\")):(e.eatWhile(He),a(\"operator\",\"operator\",e.current()));if(\"`\"==n)return i.tokenize=u,u(e,i);if(\"#\"==n)return e.skipToEnd(),a(\"error\",\"error\");if(He.test(n))return\">\"==n&&i.lexical&&\">\"==i.lexical.type||e.eatWhile(He),a(\"operator\",\"operator\",e.current());if(We.test(n)){e.eatWhile(We);var r=e.current(),l=Ee.propertyIsEnumerable(r)&&Ee[r];return l&&\".\"!=i.lastType?a(l.type,l.style,r):a(\"variable\",\"variable\",r)}}function s(e){return function(t,i){var n,r=!1;if(Oe&&\"@\"==t.peek()&&t.match(Pe))return i.tokenize=l,a(\"jsonld-keyword\",\"meta\");for(;null!=(n=t.next())&&(n!=e||r);)r=!r&&\"\\\\\"==n;return r||(i.tokenize=l),a(\"string\",\"string\")}}function c(e,t){for(var i,n=!1;i=e.next();){if(\"/\"==i&&n){t.tokenize=l;break}n=\"*\"==i}return a(\"comment\",\"comment\")}function u(e,t){for(var i,n=!1;null!=(i=e.next());){if(!n&&(\"`\"==i||\"$\"==i&&e.eat(\"{\"))){t.tokenize=l;break}n=!n&&\"\\\\\"==i}return a(\"quasi\",\"string-2\",e.current())}function f(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var i=e.string.indexOf(\"=>\",e.start);if(!(i<0)){if(Ne){var n=/:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(e.string.slice(e.start,i));n&&(i=n.index)}for(var r=0,o=!1,a=i-1;a>=0;--a){var l=e.string.charAt(a),s=Ie.indexOf(l);if(s>=0&&s<3){if(!r){++a;break}if(0==--r){\"(\"==l&&(o=!0);break}}else if(s>=3&&s<6)++r;else if(We.test(l))o=!0;else{if(/[\"'\\/]/.test(l))return;if(o&&!r){++a;break}}}o&&!r&&(t.fatArrowAt=a)}}function d(e,t,i,n,r,o){this.indented=e,this.column=t,this.type=i,this.prev=r,this.info=o,null!=n&&(this.align=n)}function h(e,t){for(var i=e.localVars;i;i=i.next)if(i.name==t)return!0;for(var n=e.context;n;n=n.prev)for(var i=n.vars;i;i=i.next)if(i.name==t)return!0}function p(e,t,i,n,r){var o=e.cc;for(ze.state=e,ze.stream=r,ze.marked=null,ze.cc=o,ze.style=t,e.lexical.hasOwnProperty(\"align\")||(e.lexical.align=!0);;){if((o.length?o.pop():De?S:k)(i,n)){for(;o.length&&o[o.length-1].lex;)o.pop()();return ze.marked?ze.marked:\"variable\"==i&&h(e,n)?\"variable-2\":t}}}function v(){for(var e=arguments.length-1;e>=0;e--)ze.cc.push(arguments[e])}function g(){return v.apply(null,arguments),!0}function m(e){function t(t){for(var i=t;i;i=i.next)if(i.name==e)return!0;return!1}var i=ze.state;if(ze.marked=\"def\",i.context){if(t(i.localVars))return;i.localVars={name:e,next:i.localVars}}else{if(t(i.globalVars))return;r.globalVars&&(i.globalVars={name:e,next:i.globalVars})}}function b(){ze.state.context={prev:ze.state.context,vars:ze.state.localVars},ze.state.localVars=Fe}function y(){ze.state.localVars=ze.state.context.vars,ze.state.context=ze.state.context.prev}function w(e,t){var i=function(){var i=ze.state,n=i.indented;if(\"stat\"==i.lexical.type)n=i.lexical.indented;else for(var r=i.lexical;r&&\")\"==r.type&&r.align;r=r.prev)n=r.indented;i.lexical=new d(n,ze.stream.column(),e,null,i.lexical,t)};return i.lex=!0,i}function x(){var e=ze.state;e.lexical.prev&&(\")\"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function C(e){function t(i){return i==e?g():\";\"==e?v():g(t)}return t}function k(e,t){return\"var\"==e?g(w(\"vardef\",t.length),J,C(\";\"),x):\"keyword a\"==e?g(w(\"form\"),M,k,x):\"keyword b\"==e?g(w(\"form\"),k,x):\"{\"==e?g(w(\"}\"),K,x):\";\"==e?g():\"if\"==e?(\"else\"==ze.state.lexical.info&&ze.state.cc[ze.state.cc.length-1]==x&&ze.state.cc.pop()(),g(w(\"form\"),M,k,x,re)):\"function\"==e?g(ue):\"for\"==e?g(w(\"form\"),oe,k,x):\"variable\"==e?Ne&&\"type\"==t?(ze.marked=\"keyword\",g(Y,C(\"operator\"),Y,C(\";\"))):g(w(\"stat\"),z):\"switch\"==e?g(w(\"form\"),M,w(\"}\",\"switch\"),C(\"{\"),K,x,x):\"case\"==e?g(S,C(\":\")):\"default\"==e?g(C(\":\")):\"catch\"==e?g(w(\"form\"),b,C(\"(\"),fe,C(\")\"),k,x,y):\"class\"==e?g(w(\"form\"),he,x):\"export\"==e?g(w(\"stat\"),me,x):\"import\"==e?g(w(\"stat\"),ye,x):\"module\"==e?g(w(\"form\"),ee,w(\"}\"),C(\"{\"),K,x,x):\"async\"==e?g(k):\"@\"==t?g(S,k):v(w(\"stat\"),S,C(\";\"),x)}function S(e){return T(e,!1)}function L(e){return T(e,!0)}function M(e){return\"(\"!=e?v():g(w(\")\"),S,C(\")\"),x)}function T(e,t){if(ze.state.fatArrowAt==ze.stream.start){var i=t?H:E;if(\"(\"==e)return g(b,w(\")\"),U(ee,\")\"),x,C(\"=>\"),i,y);if(\"variable\"==e)return v(b,ee,C(\"=>\"),i,y)}var n=t?D:O;return Re.hasOwnProperty(e)?g(n):\"function\"==e?g(ue,n):\"class\"==e?g(w(\"form\"),de,x):\"keyword c\"==e||\"async\"==e?g(t?A:_):\"(\"==e?g(w(\")\"),_,C(\")\"),x,n):\"operator\"==e||\"spread\"==e?g(t?L:S):\"[\"==e?g(w(\"]\"),Se,x,n):\"{\"==e?G(B,\"}\",null,n):\"quasi\"==e?v(N,n):\"new\"==e?g(P(t)):g()}function _(e){return e.match(/[;\\}\\)\\],]/)?v():v(S)}function A(e){return e.match(/[;\\}\\)\\],]/)?v():v(L)}function O(e,t){return\",\"==e?g(S):D(e,t,!1)}function D(e,t,i){var n=0==i?O:D,r=0==i?S:L;return\"=>\"==e?g(b,i?H:E,y):\"operator\"==e?/\\+\\+|--/.test(t)?g(n):\"?\"==t?g(S,C(\":\"),r):g(r):\"quasi\"==e?v(N,n):\";\"!=e?\"(\"==e?G(L,\")\",\"call\",n):\".\"==e?g(F,n):\"[\"==e?g(w(\"]\"),_,C(\"]\"),x,n):void 0:void 0}function N(e,t){return\"quasi\"!=e?v():\"${\"!=t.slice(t.length-2)?g(N):g(S,W)}function W(e){if(\"}\"==e)return ze.marked=\"string-2\",ze.state.tokenize=u,g(N)}function E(e){return f(ze.stream,ze.state),v(\"{\"==e?k:S)}function H(e){return f(ze.stream,ze.state),v(\"{\"==e?k:L)}function P(e){return function(t){return\".\"==t?g(e?R:I):v(e?L:S)}}function I(e,t){if(\"target\"==t)return ze.marked=\"keyword\",g(O)}function R(e,t){if(\"target\"==t)return ze.marked=\"keyword\",g(D)}function z(e){return\":\"==e?g(x,k):v(O,C(\";\"),x)}function F(e){if(\"variable\"==e)return ze.marked=\"property\",g()}function B(e,t){return\"async\"==e?(ze.marked=\"property\",g(B)):\"variable\"==e||\"keyword\"==ze.style?(ze.marked=\"property\",g(\"get\"==t||\"set\"==t?j:V)):\"number\"==e||\"string\"==e?(ze.marked=Oe?\"property\":ze.style+\" property\",g(V)):\"jsonld-keyword\"==e?g(V):\"modifier\"==e?g(B):\"[\"==e?g(S,C(\"]\"),V):\"spread\"==e?g(S):\":\"==e?v(V):void 0}function j(e){return\"variable\"!=e?v(V):(ze.marked=\"property\",g(ue))}function V(e){return\":\"==e?g(L):\"(\"==e?v(ue):void 0}function U(e,t,i){function n(r,o){if(i?i.indexOf(r)>-1:\",\"==r){var a=ze.state.lexical;return\"call\"==a.info&&(a.pos=(a.pos||0)+1),g(function(i,n){return i==t||n==t?v():v(e)},n)}return r==t||o==t?g():g(C(t))}return function(i,r){return i==t||r==t?g():v(e,n)}}function G(e,t,i){for(var n=3;n<arguments.length;n++)ze.cc.push(arguments[n]);return g(w(t,i),U(e,t),x)}function K(e){return\"}\"==e?g():v(k,K)}function q(e,t){if(Ne){if(\":\"==e)return g(Y);if(\"?\"==t)return g(q)}}function Y(e){return\"variable\"==e?(ze.marked=\"variable-3\",g(Z)):\"string\"==e||\"number\"==e||\"atom\"==e?g(Z):\"{\"==e?g(w(\"}\"),U(X,\"}\",\",;\"),x):\"(\"==e?g(U(Q,\")\"),$):void 0}function $(e){if(\"=>\"==e)return g(Y)}function X(e,t){return\"variable\"==e||\"keyword\"==ze.style?(ze.marked=\"property\",g(X)):\"?\"==t?g(X):\":\"==e?g(Y):void 0}function Q(e){return\"variable\"==e?g(Q):\":\"==e?g(Y):void 0}function Z(e,t){return\"<\"==t?g(w(\">\"),U(Y,\">\"),x,Z):\"|\"==t||\".\"==e?g(Y):\"[\"==e?g(C(\"]\"),Z):void 0}function J(){return v(ee,q,ie,ne)}function ee(e,t){return\"modifier\"==e?g(ee):\"variable\"==e?(m(t),g()):\"spread\"==e?g(ee):\"[\"==e?G(ee,\"]\"):\"{\"==e?G(te,\"}\"):void 0}function te(e,t){return\"variable\"!=e||ze.stream.match(/^\\s*:/,!1)?(\"variable\"==e&&(ze.marked=\"property\"),\"spread\"==e?g(ee):\"}\"==e?v():g(C(\":\"),ee,ie)):(m(t),g(ie))}function ie(e,t){if(\"=\"==t)return g(L)}function ne(e){if(\",\"==e)return g(J)}function re(e,t){if(\"keyword b\"==e&&\"else\"==t)return g(w(\"form\",\"else\"),k,x)}function oe(e){if(\"(\"==e)return g(w(\")\"),ae,C(\")\"),x)}function ae(e){return\"var\"==e?g(J,C(\";\"),se):\";\"==e?g(se):\"variable\"==e?g(le):v(S,C(\";\"),se)}function le(e,t){return\"in\"==t||\"of\"==t?(ze.marked=\"keyword\",g(S)):g(O,se)}function se(e,t){return\";\"==e?g(ce):\"in\"==t||\"of\"==t?(ze.marked=\"keyword\",g(S)):v(S,C(\";\"),ce)}function ce(e){\")\"!=e&&g(S)}function ue(e,t){return\"*\"==t?(ze.marked=\"keyword\",g(ue)):\"variable\"==e?(m(t),g(ue)):\"(\"==e?g(b,w(\")\"),U(fe,\")\"),x,q,k,y):Ne&&\"<\"==t?g(w(\">\"),U(Y,\">\"),x,ue):void 0}function fe(e){return\"spread\"==e?g(fe):v(ee,q,ie)}function de(e,t){return\"variable\"==e?he(e,t):pe(e,t)}function he(e,t){if(\"variable\"==e)return m(t),g(pe)}function pe(e,t){return\"<\"==t?g(w(\">\"),U(Y,\">\"),x,pe):\"extends\"==t||\"implements\"==t||Ne&&\",\"==e?g(Ne?Y:S,pe):\"{\"==e?g(w(\"}\"),ve,x):void 0}function ve(e,t){return\"variable\"==e||\"keyword\"==ze.style?(\"async\"==t||\"static\"==t||\"get\"==t||\"set\"==t||Ne&&(\"public\"==t||\"private\"==t||\"protected\"==t||\"readonly\"==t||\"abstract\"==t))&&ze.stream.match(/^\\s+[\\w$\\xa1-\\uffff]/,!1)?(ze.marked=\"keyword\",g(ve)):(ze.marked=\"property\",g(Ne?ge:ue,ve)):\"[\"==e?g(S,C(\"]\"),Ne?ge:ue,ve):\"*\"==t?(ze.marked=\"keyword\",g(ve)):\";\"==e?g(ve):\"}\"==e?g():\"@\"==t?g(S,ve):void 0}function ge(e,t){return\"?\"==t?g(ge):\":\"==e?g(Y,ie):\"=\"==t?g(L):v(ue)}function me(e,t){return\"*\"==t?(ze.marked=\"keyword\",g(ke,C(\";\"))):\"default\"==t?(ze.marked=\"keyword\",g(S,C(\";\"))):\"{\"==e?g(U(be,\"}\"),ke,C(\";\")):v(k)}function be(e,t){return\"as\"==t?(ze.marked=\"keyword\",g(C(\"variable\"))):\"variable\"==e?v(L,be):void 0}function ye(e){return\"string\"==e?g():v(we,xe,ke)}function we(e,t){return\"{\"==e?G(we,\"}\"):(\"variable\"==e&&m(t),\"*\"==t&&(ze.marked=\"keyword\"),g(Ce))}function xe(e){if(\",\"==e)return g(we,xe)}function Ce(e,t){if(\"as\"==t)return ze.marked=\"keyword\",g(we)}function ke(e,t){if(\"from\"==t)return ze.marked=\"keyword\",g(S)}function Se(e){return\"]\"==e?g():v(U(L,\"]\"))}function Le(e,t){return\"operator\"==e.lastType||\",\"==e.lastType||He.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}var Me,Te,_e=i.indentUnit,Ae=r.statementIndent,Oe=r.jsonld,De=r.json||Oe,Ne=r.typescript,We=r.wordCharacters||/[\\w$\\xa1-\\uffff]/,Ee=function(){function e(e){return{type:e,style:\"keyword\"}}var t=e(\"keyword a\"),i=e(\"keyword b\"),n=e(\"keyword c\"),r=e(\"operator\"),o={type:\"atom\",style:\"atom\"},a={if:e(\"if\"),while:t,with:t,else:i,do:i,try:i,finally:i,return:n,break:n,continue:n,new:e(\"new\"),delete:n,throw:n,debugger:n,var:e(\"var\"),const:e(\"var\"),let:e(\"var\"),function:e(\"function\"),catch:e(\"catch\"),for:e(\"for\"),switch:e(\"switch\"),case:e(\"case\"),default:e(\"default\"),in:r,typeof:r,instanceof:r,true:o,false:o,null:o,undefined:o,NaN:o,Infinity:o,this:e(\"this\"),class:e(\"class\"),super:e(\"atom\"),yield:n,export:e(\"export\"),import:e(\"import\"),extends:n,await:n,async:e(\"async\")};if(Ne){var l={type:\"variable\",style:\"variable-3\"},s={interface:e(\"class\"),implements:n,namespace:n,module:e(\"module\"),enum:e(\"module\"),public:e(\"modifier\"),private:e(\"modifier\"),protected:e(\"modifier\"),abstract:e(\"modifier\"),as:r,string:l,number:l,boolean:l,any:l};for(var c in s)a[c]=s[c]}return a}(),He=/[+\\-*&%=<>!?|~^@]/,Pe=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/,Ie=\"([{}])\",Re={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,\"jsonld-keyword\":!0},ze={state:null,column:null,marked:null,cc:null},Fe={name:\"this\",next:{name:\"arguments\"}};return x.lex=!0,{startState:function(e){var t={tokenize:l,lastType:\"sof\",cc:[],lexical:new d((e||0)-_e,0,\"block\",!1),localVars:r.localVars,context:r.localVars&&{vars:r.localVars},indented:e||0};return r.globalVars&&\"object\"==n()(r.globalVars)&&(t.globalVars=r.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty(\"align\")||(t.lexical.align=!1),t.indented=e.indentation(),f(e,t)),t.tokenize!=c&&e.eatSpace())return null;var i=t.tokenize(e,t);return\"comment\"==Me?i:(t.lastType=\"operator\"!=Me||\"++\"!=Te&&\"--\"!=Te?Me:\"incdec\",p(t,i,Me,Te,e))},indent:function(t,i){if(t.tokenize==c)return e.Pass;if(t.tokenize!=l)return 0;var n,o=i&&i.charAt(0),a=t.lexical;if(!/^\\s*else\\b/.test(i))for(var s=t.cc.length-1;s>=0;--s){var u=t.cc[s];if(u==x)a=a.prev;else if(u!=re)break}for(;(\"stat\"==a.type||\"form\"==a.type)&&(\"}\"==o||(n=t.cc[t.cc.length-1])&&(n==O||n==D)&&!/^[,\\.=+\\-*:?[\\(]/.test(i));)a=a.prev;Ae&&\")\"==a.type&&\"stat\"==a.prev.type&&(a=a.prev);var f=a.type,d=o==f;return\"vardef\"==f?a.indented+(\"operator\"==t.lastType||\",\"==t.lastType?a.info+1:0):\"form\"==f&&\"{\"==o?a.indented:\"form\"==f?a.indented+_e:\"stat\"==f?a.indented+(Le(t,i)?Ae||_e:0):\"switch\"!=a.info||d||0==r.doubleIndentSwitch?a.align?a.column+(d?0:1):a.indented+(d?0:_e):a.indented+(/^(?:case|default)\\b/.test(i)?_e:2*_e)},electricInput:/^\\s*(?:case .*?:|default:|\\{|\\})$/,blockCommentStart:De?null:\"/*\",blockCommentEnd:De?null:\"*/\",lineComment:De?null:\"//\",fold:\"brace\",closeBrackets:\"()[]{}''\\\"\\\"``\",helperType:De?\"json\":\"javascript\",jsonldMode:Oe,jsonMode:De,expressionAllowed:t,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=S&&t!=L||e.cc.pop()}}}),e.registerHelper(\"wordChars\",\"javascript\",/[\\w$]/),e.defineMIME(\"text/javascript\",\"javascript\"),e.defineMIME(\"text/ecmascript\",\"javascript\"),e.defineMIME(\"application/javascript\",\"javascript\"),e.defineMIME(\"application/x-javascript\",\"javascript\"),e.defineMIME(\"application/ecmascript\",\"javascript\"),e.defineMIME(\"application/json\",{name:\"javascript\",json:!0}),e.defineMIME(\"application/x-json\",{name:\"javascript\",json:!0}),e.defineMIME(\"application/ld+json\",{name:\"javascript\",jsonld:!0}),e.defineMIME(\"text/typescript\",{name:\"javascript\",typescript:!0}),e.defineMIME(\"application/typescript\",{name:\"javascript\",typescript:!0})})}).call(t,i(230)(e))},function(e,t,i){\"use strict\";(function(e){Object.defineProperty(t,\"__esModule\",{value:!0});var n=i(60),r=i(117),o=i.n(r),a=i(115),l=i(116),s=i(80),c=i.n(s),u=i(114);n.a.config.productionTip=!1,n.a.use(u.a),e.axios=c.a,c.a.defaults.baseURL=\"http://localhost:3005/api\",new n.a({el:\"#app\",router:a.a,store:l.a,template:\"<App/>\",components:{App:o.a}})}).call(t,i(46))},function(e,t,i){\"use strict\";var n=i(149),r={add:\"/add\",codeList:\"/codeList\",codeDetail:\"/codeDetail\",getVerify:\"/verify\"};t.a={actions:{add:function(e,t){e.state;return i.i(n.a)(r.add,t)},codeList:function(){return i.i(n.b)(r.codeList)},codeDetail:function(e,t){e.state;return i.i(n.b)(r.codeDetail,{id:t})},getVerify:function(){return i.i(n.b)(r.getVerify)}}}},function(e,t,i){\"use strict\";function n(e,t){return new f.a(function(i,n){h.a.post(e,t).then(function(e){200===e.status?i(e.data):n(e.data.message)}).catch(function(e){n(e)})})}function r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(arguments.length>2&&void 0!==arguments[2]&&arguments[2]){var i=e+t.toString(),n=window.sessionStorage.getItem(i);return new f.a(function(r,a){n?r(JSON.parse(n)):o(e,t).then(function(e){window.sessionStorage.setItem(i,c()(e)),r(e)}).catch(function(e){a(e)})})}return o(e,t)}function o(e,t){return new f.a(function(i,n){if(l()(t).length>0){e+=\"?\";for(var r in t)e+=r+\"=\"+t[r]+\"&\";e=e.substring(0,e.length-1)}h.a.get(e).then(function(e){200===e.status?i(e.data):n(e.data.message)}).catch(function(e){n(e)})})}var a=i(159),l=i.n(a),s=i(156),c=i.n(s),u=i(160),f=i.n(u),d=i(80),h=i.n(d);t.a=n,t.b=r},function(e,t,i){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"app\"}},function(module,__webpack_exports__,__webpack_require__){\"use strict\";Object.defineProperty(__webpack_exports__,\"__esModule\",{value:!0});var __WEBPACK_IMPORTED_MODULE_0__assets_CodeMirror_lib_codemirror__=__webpack_require__(86),__WEBPACK_IMPORTED_MODULE_1__assets_CodeMirror_mode_javascript__=__webpack_require__(146),__WEBPACK_IMPORTED_MODULE_2__popSave_vue__=__webpack_require__(218),__WEBPACK_IMPORTED_MODULE_2__popSave_vue___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__popSave_vue__),__WEBPACK_IMPORTED_MODULE_3__popAlert_vue__=__webpack_require__(217),__WEBPACK_IMPORTED_MODULE_3__popAlert_vue___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__popAlert_vue__),__WEBPACK_IMPORTED_MODULE_4__popShare_vue__=__webpack_require__(219),__WEBPACK_IMPORTED_MODULE_4__popShare_vue___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4__popShare_vue__);__webpack_exports__.default={components:{\"pop-save\":__WEBPACK_IMPORTED_MODULE_2__popSave_vue___default.a,\"pop-alert\":__WEBPACK_IMPORTED_MODULE_3__popAlert_vue___default.a,\"pop-share\":__WEBPACK_IMPORTED_MODULE_4__popShare_vue___default.a},data:function(){return{editor:null,dataConsole:[],dataProject:[],preY:0,boxCodeHeight:300,currentId:\"\",currentTitle:\"\",isShowAside:!0,popSaveOpen:!1,alertText:\"\",shareCodeId:\"\"}},mounted:function(){this.editor=__WEBPACK_IMPORTED_MODULE_0__assets_CodeMirror_lib_codemirror__.default.fromTextArea(this.$refs.codeEditor,{mode:\"text/javascript\",lineNumbers:!0,lineWrapping:!0,indentUnit:4,foldGutter:!0,styleActiveLine:!0,theme:\"blackboard\",gutters:[\"CodeMirror-linenumbers\",\"CodeMirror-foldgutter\"]}),console.log=this.log,window.onmousedown=this.ctrlMouseDown,window.onmousemove=this.ctrlMouseMove,window.onmouseup=this.ctrlMouseUp,document.addEventListener(\"mouseleave\",this.mouseLeaveWindow);var e=this;this.$store.dispatch(\"codeList\").then(function(t){t.success&&(e.dataProject=t.list)});var t=this.$route.query.Cid;t&&this.loadCode(t)},methods:{mouseLeaveWindow:function(e){this.preY=0},ctrlMouseDown:function(e){for(var t=e.target||e.srcElement;t;)t.className&&t.className.indexOf(\"box-control\")>=0&&(this.preY=e.clientY),t=t.parentNode},ctrlMouseMove:function(e){var t=e.clientY;this.preY<=0||(e.preventDefault(),this.boxCodeHeight+=t-this.preY,this.boxCodeHeight<50?this.boxCodeHeight=50:this.boxCodeHeight>document.body.clientHeight-100?this.boxCodeHeight=document.body.clientHeight-100:this.preY=t)},ctrlMouseUp:function(e){this.preY=0},run:function run(){eval(this.editor.getValue())},log:function(e){this.dataConsole.unshift({type:\"log\",time:parseInt(Date.now()/1e3),msg:e})},clearConsole:function(){this.dataConsole=[]},submit:function(e){var t=this;e.content=this.editor.getValue(),this.$store.dispatch(\"add\",e).then(function(e){e.success?t.alertText=\"提交成功!\":t.alertText=e.msg})},loadCode:function(e){var t=this;t.$store.dispatch(\"codeDetail\",e).then(function(i){i.success&&(t.currentId=e,t.currentTitle=i.title,t.editor.setValue(i.content))})},add:function(){this.currentTitle=\"\",this.editor.setValue(\"\"),this.clearConsole()},alertClose:function(){this.alertText=\"\",this.currentId=\"\",this.currentTitle=\"\",this.editor.setValue(\"\")},share:function(e){this.shareCodeId=e},shareClose:function(){this.shareCodeId=\"\"}}}},function(e,t,i){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=i(79),r=i.n(n);t.default={components:{\"pop-window\":r.a},props:{text:{type:String,default:\"\"}},methods:{close:function(){this.$emit(\"close\")}}}},function(e,t,i){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=i(79),r=i.n(n);t.default={components:{\"pop-window\":r.a},props:{open:{type:Boolean,default:!1}},data:function(){return{token:\"\",title:\"\",error:\"\",currentOptionIndex:-1,poem:{options:[\"试试事实上升水\",\"试试事实上升水\",\"试试事实上升水\",\"试试事实上升水\"]}}},mounted:function(){var e=this;this.$store.dispatch(\"getVerify\").then(function(t){t.success&&(e.poem=t.data)})},watch:{open:function(e){e&&this.reset()}},methods:{close:function(){this.$emit(\"close\")},submit:function(){return\"\"===this.title?void(this.error=\"标题必须输入呦\"):this.title.length>20?void(this.error=\"标题长度不能超过20个字符\"):this.currentOptionIndex<0?void(this.error=\"请选择验证\"):(this.$emit(\"sutmit\",{title:this.title,token:this.token,answer:this.poem.answer,option:this.poem.options[this.currentOptionIndex]}),void this.$emit(\"close\"))},reset:function(){this.token=\"\",this.title=\"\",this.error=\"\",this.currentOptionIndex=-1;var e=this;this.$store.dispatch(\"getVerify\").then(function(t){t.success&&(e.poem=t.data)})}}}},function(e,t,i){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=i(79),r=i.n(n);t.default={components:{\"pop-window\":r.a},props:{cid:{type:String,default:\"\"}},data:function(){return{isCopy:!1}},watch:{cid:function(e){\"\"!==e&&(this.isCopy=!1)}},computed:{code:function(){return'<iframe src=\"http://code.smallcfj.club/#/?Cid='+this.cid+'\" width=\"100%\" height=\"500px\" frameborder=\"0\" scrolling=\"no\"> </iframe>'}},methods:{close:function(){this.$emit(\"close\")},copyCode:function(){this.$refs.shareCode.select(),document.execCommand(\"Copy\"),this.isCopy=!0}}}},function(e,t,i){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={props:{open:{type:Boolean,default:!1}},methods:{close:function(){this.$emit(\"close\")}}}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t){},function(e,t){},function(e,t){},function(e,t){},function(e,t){},function(e,t){},,,,function(e,t){e.exports=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADhUlEQVRoQ+1ZS1LbQBCdnirwMuQEIScInCDkBCEnCN7Q8ir4BNgnwKykYWNygpgTACcInCBwgpgdUMU09RzJJcn6y7ZEVabKK8+0+s3rnn7TQ+qND3rj/qv/AJbF4Hg83np6evqulNonoj3YFZE7IppYa097vd5d0rdawcDZ2dmOtfYXEW2nbYi1ttvr9c7j/zcOAM6LyKVSaiuPzSQQjQPwPO8yCJk8AEqpqbV2NxxOjQJwXXdPa43dLzxE5NRxnKNgQaMAjDEDpdRxYe//Tbxh5t1WAPA8b0JEX0sCUMw83/hGGagI4IGZ5wnfKABjDGL5pCQD18w8qxMYjQEwxqBojYocn2GA8aN07QDguIgMsopWBiP3zBwpdmsDkOH4UEQgHz7lhNID6sXh4eFNeF4hAKiWSql3WLixsXHb7XanRePWGLMvIicJO35trT1AUfJ1EFj5kWJ3PrewlIDR5+dnGESiRcq8iFwR0Tkz/0wDgiJFRMcJVfYeNpl5El/ruu621hqAt4kI35yJufiu5zJQQp9MNjc3u2FGMhyHujztdDqDMgzmMb0QQiWcD2xPmPlbluNKqWsiOsrayTxH0/5fAOB53p+yJ4Sv25Ok8IO19ihJBld1ODMHXNc90FqPl2F8FeGS5FeEgYqlPW53ZeGSC8AY87dsZQwZXXm4FAEgNcJnyMyQx2sdkRAyxqBAzQpWhdE8gJo5MGLmfgXgtZZEGKh7CuE4FRF0D65qeVVi8UIdMMag//KhhI2kqejl9NN6OTVtR5anVWLsYNFcgLZJAox8QlgNl+lwZiEL/vTlRC4IEbnodDoHj4+PW1prnEC4pETGqsMqVU77ahRKFL8IGyJyS0SDuKL02yQA8jlh11cSVoXvAy8vL4GkvsuL7QwgmWEFOe13KXZ8OX1DRBel5fSyYjYNiC/++gGDPtvoD80bVmEfcP/QWveTgBRioC4gX2qP4tfGwDERgYDErS9rTInoS6UrZV0AwXq/ziBHKh3TYM5xnI9hf9bCQHwDagJB6KEdMxuNAAg+boxBv3/h6M1hvB2NLThZUXtNmfl9KxioCKA9zd0q7XUUUcdx5idWozngS5bfZU65Vj1wwHFjDDRXkvRIwoVr605rnpjgYVHhiLmtfOQLgUCrMa3ApTYMGs2BeIz4Dx77QUghYZVSVyIyavVDd5kkjs9tFQNVgLx5AK+6gtBACn3O6wAAAABJRU5ErkJggg==\"},function(e,t,i){i(209);var n=i(34)(i(151),i(223),null,null);e.exports=n.exports},function(e,t,i){i(206);var n=i(34)(i(152),i(220),\"data-v-29434224\",null);e.exports=n.exports},function(e,t,i){i(207);var n=i(34)(i(153),i(221),\"data-v-2cb7954a\",null);e.exports=n.exports},function(e,t,i){i(208);var n=i(34)(i(154),i(222),\"data-v-3785a81e\",null);e.exports=n.exports},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(\"pop-window\",{attrs:{open:\"\"!==e.text},on:{close:function(t){e.close()}}},[i(\"div\",{staticClass:\"pop-success\"},[i(\"p\",{staticClass:\"success\"},[e._v(e._s(e.text))]),e._v(\" \"),i(\"button\",{staticClass:\"btn-positive\",on:{click:function(t){e.close()}}},[e._v(\"确定\")])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(\"pop-window\",{attrs:{open:e.open},on:{close:function(t){e.close()}}},[i(\"div\",{staticClass:\"pop-save\"},[i(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.title,expression:\"title\"}],staticClass:\"form-control\",attrs:{type:\"text\",placeholder:\"请输入标题（20个字符以内）\"},domProps:{value:e.title},on:{input:function(t){t.target.composing||(e.title=t.target.value)}}}),e._v(\" \"),i(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.token,expression:\"token\"}],staticClass:\"form-control\",attrs:{type:\"text\",placeholder:\"请输入token（选填）\"},domProps:{value:e.token},on:{input:function(t){t.target.composing||(e.token=t.target.value)}}}),e._v(\" \"),i(\"p\",{staticClass:\"hint\"},[e._v(\"如果未输入token，则您提交的代码将在管理员审核后展现。\")]),e._v(\" \"),i(\"p\",{staticClass:\"hint\"},[i(\"strong\",[e._v(\"验证：\")]),e._v(\"“\"+e._s(e.poem.poem)+\"”的下一句是？\")]),e._v(\" \"),i(\"ul\",{staticClass:\"list-verify\"},e._l(e.poem.options,function(t,n){return i(\"li\",{staticClass:\"item-verify\",class:{current:n===e.currentOptionIndex},on:{click:function(t){e.currentOptionIndex=n}}},[e._v(\"\\n        \"+e._s(t)+\"\\n      \")])})),e._v(\" \"),i(\"div\",{staticClass:\"btn-group\"},[i(\"button\",{staticClass:\"btn\",on:{click:function(t){e.submit()}}},[e._v(\"提交\")])]),e._v(\" \"),i(\"p\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"\"!==e.error,expression:\"error !== ''\"}],staticClass:\"error\"},[e._v(e._s(e.error))])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(\"pop-window\",{attrs:{open:\"\"!==e.cid},on:{close:function(t){e.close()}}},[i(\"div\",{staticClass:\"pop-share\"},[i(\"p\",{staticClass:\"hint\"},[e._v(\"请复制下面代码粘贴到需要的地方\")]),e._v(\" \"),i(\"textarea\",{ref:\"shareCode\",staticClass:\"box-code\",domProps:{innerHTML:e._s(e.code)}}),e._v(\" \"),i(\"p\",{directives:[{name:\"show\",rawName:\"v-show\",value:e.isCopy,expression:\"isCopy\"}],staticClass:\"error\"},[e._v(\"复制好了\\\\(^o^)/~\")]),e._v(\" \"),i(\"button\",{staticClass:\"btn-positive\",on:{click:function(t){e.copyCode()}}},[e._v(\"点击复制\")])])])},staticRenderFns:[]}},function(e,t,i){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(\"div\",{staticClass:\"container-home\",class:{noAside:!e.isShowAside}},[n(\"aside\",[n(\"button\",{staticClass:\"btn-toggle\",class:{open:!e.isShowAside,close:e.isShowAside},on:{click:function(t){e.isShowAside=!e.isShowAside}}}),e._v(\" \"),n(\"h1\",{staticClass:\"title\"},[e._v(\"Javascript Box\")]),e._v(\" \"),n(\"ul\",{staticClass:\"list-project\"},e._l(e.dataProject,function(t,r){return n(\"li\",{staticClass:\"item-project\",class:{current:t.id===e.currentId},on:{click:function(i){e.loadCode(t.id)}}},[e._v(\"\\n        \"+e._s(r+1)+\"、\"+e._s(t.title)+\"\\n        \"),n(\"img\",{staticClass:\"btn-share\",attrs:{src:i(215),alt:\"分享\"},on:{click:function(i){e.share(t.id)}}})])})),e._v(\" \"),n(\"button\",{staticClass:\"btn-add\",on:{click:function(t){e.add()}}})]),e._v(\" \"),n(\"div\",{staticClass:\"box-editor\"},[n(\"div\",{staticClass:\"box-code\",style:{height:e.boxCodeHeight+\"px\"}},[n(\"textarea\",{ref:\"codeEditor\",attrs:{spellcheck:\"false\",autocapitalize:\"none\",autocorrect:\"off\"}})]),e._v(\" \"),n(\"div\",{staticClass:\"box-control\"},[n(\"a\",{staticClass:\"link-site\",attrs:{href:\"http://code.smallcfj.club\",target:\"_blank\"}},[e._v(\"Javascript Box\")]),e._v(\" \"),n(\"div\",{staticClass:\"box-right\"},[n(\"label\",{staticClass:\"text-title\"},[e._v(e._s(e.currentTitle))]),e._v(\" \"),n(\"button\",{staticClass:\"btn-save\",on:{click:function(t){e.popSaveOpen=!0}}},[e._v(\"保存\")]),e._v(\" \"),n(\"button\",{on:{click:function(t){e.clearConsole()}}},[e._v(\"清空\")]),e._v(\" \"),n(\"button\",{on:{click:function(t){e.run()}}},[e._v(\"运行\")])])]),e._v(\" \"),n(\"div\",{staticClass:\"box-console\"},[n(\"ul\",{staticClass:\"list-console\"},e._l(e.dataConsole,function(t){return n(\"li\",{staticClass:\"item-console\"},[n(\"label\",[e._v(e._s(e.$util.parseDate(t.time,\"yyyy-MM-dd hh:mm:ss\"))+\"  :  \")]),e._v(\"\\n          \"+e._s(t.msg)+\"\\n        \")])}))])]),e._v(\" \"),n(\"pop-save\",{attrs:{open:e.popSaveOpen},on:{close:function(t){e.popSaveOpen=!1},sutmit:e.submit}}),e._v(\" \"),n(\"pop-alert\",{attrs:{text:e.alertText},on:{close:function(t){e.alertClose()}}}),e._v(\" \"),n(\"pop-share\",{attrs:{cid:e.shareCodeId},on:{close:function(t){e.shareClose()}}})],1)},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(\"div\",{attrs:{id:\"app\"}},[i(\"router-view\")],1)},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:e.open,expression:\"open\"}],staticClass:\"pop-mask\",on:{click:function(t){if(t.target!==t.currentTarget)return null;e.close()}}},[i(\"div\",{staticClass:\"pop-window\"},[i(\"div\",{staticClass:\"btn-close\",on:{click:function(t){e.close()}}},[e._v(\"×\")]),e._v(\" \"),e._t(\"default\")],2)])},staticRenderFns:[]}}],[147]);"
  },
  {
    "path": "JsBox/public/static/js/app.3d79196da433328c5763.js",
    "content": "webpackJsonp([1],[function(e,t,i){\"use strict\";function n(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function r(e,t,i){t||(t={});for(var n in e)!e.hasOwnProperty(n)||!1===i&&t.hasOwnProperty(n)||(t[n]=e[n]);return t}function o(e,t,i,n,r){null==t&&-1==(t=e.search(/[^\\s\\u00a0]/))&&(t=e.length);for(var o=n||0,a=r||0;;){var l=e.indexOf(\"\\t\",o);if(l<0||l>=t)return a+(t-o);a+=l-o,a+=i-a%i,o=l+1}}function a(e,t){for(var i=0;i<e.length;++i)if(e[i]==t)return i;return-1}function l(e,t,i){for(var n=0,r=0;;){var o=e.indexOf(\"\\t\",n);-1==o&&(o=e.length);var a=o-n;if(o==e.length||r+a>=t)return n+Math.min(a,t-r);if(r+=o-n,r+=i-r%i,n=o+1,r>=t)return n}}function s(e){for(;N.length<=e;)N.push(c(N)+\" \");return N[e]}function c(e){return e[e.length-1]}function u(e,t){for(var i=[],n=0;n<e.length;n++)i[n]=t(e[n],n);return i}function f(e,t,i){for(var n=0,r=i(t);n<e.length&&i(e[n])<=r;)n++;e.splice(n,0,t)}function d(){}function h(e,t){var i=void 0;return x.a?i=x()(e):(d.prototype=e,i=new d),t&&r(t,i),i}function p(e){return/\\w/.test(e)||e>\"\"&&(e.toUpperCase()!=e.toLowerCase()||W.test(e))}function v(e,t){return t?!!(t.source.indexOf(\"\\\\w\")>-1&&p(e))||t.test(e):p(e)}function g(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}function m(e){return e.charCodeAt(0)>=768&&E.test(e)}function b(e,t,i){for(;(i<0?t>0:t<e.length)&&m(e.charAt(t));)t+=i;return t}function y(e,t,i){for(;;){if(Math.abs(t-i)<=1)return e(t)?t:i;var n=Math.floor((t+i)/2);e(n)?i=n:t=n}}var w=i(157),x=i.n(w),C=i(16),k=i.n(C),S=i(17),L=i.n(S);t.n=n,t.p=r,t.b=o,i.d(t,\"o\",function(){return M}),t.a=a,i.d(t,\"i\",function(){return T}),i.d(t,\"e\",function(){return _}),i.d(t,\"h\",function(){return A}),i.d(t,\"t\",function(){return O}),i.d(t,\"q\",function(){return D}),t.c=l,t.m=s,t.f=c,t.g=u,t.u=f,t.r=h,t.d=p,t.v=v,t.s=g,t.j=m,t.l=b,t.k=y;var M=function(){function e(){k()(this,e),this.id=null}return L()(e,[{key:\"set\",value:function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)}}]),e}(),T=30,_={toString:function(){return\"CodeMirror.Pass\"}},A={scroll:!1},O={origin:\"*mouse\"},D={origin:\"+move\"},N=[\"\"],W=/[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/,E=/[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/},function(e,t,i){\"use strict\";function n(e){return new RegExp(\"(^|\\\\s)\"+e+\"(?:$|\\\\s)\\\\s*\")}function r(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function o(e,t){return r(e).appendChild(t)}function a(e,t,i,n){var r=document.createElement(e);if(i&&(r.className=i),n&&(r.style.cssText=n),\"string\"==typeof t)r.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)r.appendChild(t[o]);return r}function l(e,t,i,n){var r=a(e,t,i,n);return r.setAttribute(\"role\",\"presentation\"),r}function s(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function c(){var e=void 0;try{e=document.activeElement}catch(t){e=document.body||null}for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e}function u(e,t){var i=e.className;n(t).test(i)||(e.className+=(i?\" \":\"\")+t)}function f(e,t){for(var i=e.split(\" \"),r=0;r<i.length;r++)i[r]&&!n(i[r]).test(t)&&(t+=\" \"+i[r]);return t}var d=i(5);t.l=n,i.d(t,\"c\",function(){return h}),t.g=r,t.d=o,t.e=a,t.h=l,i.d(t,\"f\",function(){return p}),t.b=s,t.j=c,t.a=u,t.i=f,i.d(t,\"k\",function(){return v});var h=function(e,t){var i=e.className,r=n(t).exec(i);if(r){var o=i.slice(r.index+r[0].length);e.className=i.slice(0,r.index)+(o?r[1]+o:\"\")}},p=void 0;p=document.createRange?function(e,t,i,n){var r=document.createRange();return r.setEnd(n||e,i),r.setStart(e,t),r}:function(e,t,i){var n=document.body.createTextRange();try{n.moveToElementText(e.parentNode)}catch(e){return n}return n.collapse(!0),n.moveEnd(\"character\",i),n.moveStart(\"character\",t),n};var v=function(e){e.select()};d.a?v=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:d.b&&(v=function(e){try{e.select()}catch(e){}})},function(e,t,i){\"use strict\";function n(e,t){return e._handlers&&e._handlers[t]||b}function r(e,t,n){if(e.removeEventListener)e.removeEventListener(t,n,!1);else if(e.detachEvent)e.detachEvent(\"on\"+t,n);else{var r=e._handlers,o=r&&r[t];if(o){var a=i.i(m.a)(o,n);a>-1&&(r[t]=o.slice(0,a).concat(o.slice(a+1)))}}}function o(e,t){var i=n(e,t);if(i.length)for(var r=Array.prototype.slice.call(arguments,2),o=0;o<i.length;++o)i[o].apply(null,r)}function a(e,t,i){return\"string\"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),o(e,i||t.type,e,t),d(t)||t.codemirrorIgnore}function l(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var n=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),r=0;r<t.length;++r)-1==i.i(m.a)(n,t[r])&&n.push(t[r])}function s(e,t){return n(e,t).length>0}function c(e){e.prototype.on=function(e,t){y(this,e,t)},e.prototype.off=function(e,t){r(this,e,t)}}function u(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function f(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function d(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function h(e){u(e),f(e)}function p(e){return e.target||e.srcElement}function v(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),g.c&&e.ctrlKey&&1==t&&(t=3),t}var g=i(5),m=i(0);i.d(t,\"c\",function(){return y}),t.l=n,t.b=r,t.d=o,t.k=a,t.i=l,t.h=s,t.a=c,t.e=u,t.f=f,t.n=d,t.g=h,t.j=p,t.m=v;var b=[],y=function(e,t,i){if(e.addEventListener)e.addEventListener(t,i,!1);else if(e.attachEvent)e.attachEvent(\"on\"+t,i);else{var n=e._handlers||(e._handlers={});n[t]=(n[t]||b).concat(i)}}},function(e,t,i){\"use strict\";function n(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!(this instanceof n))return new n(e,t,i);this.line=e,this.ch=t,this.sticky=i}function r(e,t){return e.line-t.line||e.ch-t.ch}function o(e,t){return e.sticky==t.sticky&&0==r(e,t)}function a(e){return n(e.line,e.ch)}function l(e,t){return r(e,t)<0?t:e}function s(e,t){return r(e,t)<0?e:t}function c(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function u(e,t){if(t.line<e.first)return n(e.first,0);var r=e.first+e.size-1;return t.line>r?n(r,i.i(h.d)(e,r).text.length):f(t,i.i(h.d)(e,t.line).text.length)}function f(e,t){var i=e.ch;return null==i||i>t?n(e.line,t):i<0?n(e.line,0):e}function d(e,t){for(var i=[],n=0;n<t.length;n++)i[n]=u(e,t[n]);return i}var h=i(4);t.a=n,t.b=r,t.f=o,t.e=a,t.h=l,t.g=s,t.d=c,t.c=u,t.i=d},function(e,t,i){\"use strict\";function n(e,t){if((t-=e.first)<0||t>=e.size)throw new Error(\"There is no line \"+(t+e.first)+\" in the document.\");for(var i=e;!i.lines;)for(var n=0;;++n){var r=i.children[n],o=r.chunkSize();if(t<o){i=r;break}t-=o}return i.lines[t]}function r(e,t,i){var n=[],r=t.line;return e.iter(t.line,i.line+1,function(e){var o=e.text;r==i.line&&(o=o.slice(0,i.ch)),r==t.line&&(o=o.slice(t.ch)),n.push(o),++r}),n}function o(e,t,i){var n=[];return e.iter(t,i,function(e){n.push(e.text)}),n}function a(e,t){var i=t-e.height;if(i)for(var n=e;n;n=n.parent)n.height+=i}function l(e){if(null==e.parent)return null;for(var t=e.parent,n=i.i(f.a)(t.lines,e),r=t.parent;r;t=r,r=r.parent)for(var o=0;r.children[o]!=t;++o)n+=r.children[o].chunkSize();return n+t.first}function s(e,t){var i=e.first;e:do{for(var n=0;n<e.children.length;++n){var r=e.children[n],o=r.height;if(t<o){e=r;continue e}t-=o,i+=r.chunkSize()}return i}while(!e.lines);for(var a=0;a<e.lines.length;++a){var l=e.lines[a],s=l.height;if(t<s)break;t-=s}return i+a}function c(e,t){return t>=e.first&&t<e.first+e.size}function u(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}var f=i(0);t.d=n,t.e=r,t.h=o,t.b=a,t.a=l,t.f=s,t.c=c,t.g=u},function(e,t,i){\"use strict\";i.d(t,\"i\",function(){return o}),i.d(t,\"b\",function(){return c}),i.d(t,\"d\",function(){return u}),i.d(t,\"g\",function(){return f}),i.d(t,\"e\",function(){return h}),i.d(t,\"k\",function(){return p}),i.d(t,\"j\",function(){return v}),i.d(t,\"l\",function(){return g}),i.d(t,\"h\",function(){return m}),i.d(t,\"a\",function(){return b}),i.d(t,\"f\",function(){return y}),i.d(t,\"n\",function(){return w}),i.d(t,\"c\",function(){return x}),i.d(t,\"p\",function(){return C}),i.d(t,\"q\",function(){return k}),i.d(t,\"m\",function(){return L}),i.d(t,\"o\",function(){return M});var n=navigator.userAgent,r=navigator.platform,o=/gecko\\/\\d/i.test(n),a=/MSIE \\d/.test(n),l=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(n),s=/Edge\\/(\\d+)/.exec(n),c=a||l||s,u=c&&(a?document.documentMode||6:+(s||l)[1]),f=!s&&/WebKit\\//.test(n),d=f&&/Qt\\/\\d+\\.\\d+/.test(n),h=!s&&/Chrome\\//.test(n),p=/Opera\\//.test(n),v=/Apple Computer/.test(navigator.vendor),g=/Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(n),m=/PhantomJS/.test(n),b=!s&&/AppleWebKit/.test(n)&&/Mobile\\/\\w+/.test(n),y=/Android/.test(n),w=b||y||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(n),x=b||/Mac/.test(r),C=/\\bCrOS\\b/.test(n),k=/win/i.test(r),S=p&&n.match(/Version\\/(\\d*\\.\\d*)/);S&&(S=Number(S[1])),S&&S>=15&&(p=!1,f=!0);var L=x&&(d||p&&(null==S||S<12.11)),M=o||c&&u>=9},function(e,t,i){\"use strict\";function n(e){return e.lineSpace.offsetTop}function r(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function o(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=i.i(X.d)(e.measure,i.i(X.e)(\"pre\",\"x\")),n=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,r={left:parseInt(n.paddingLeft),right:parseInt(n.paddingRight)};return isNaN(r.left)||isNaN(r.right)||(e.cachedPaddingH=r),r}function a(e){return J.i-e.display.nativeBarWidth}function l(e){return e.display.scroller.clientWidth-a(e)-e.display.barWidth}function s(e){return e.display.scroller.clientHeight-a(e)-e.display.barHeight}function c(e,t,i){var n=e.options.lineWrapping,r=n&&l(e);if(!t.measure.heights||n&&t.measure.width!=r){var o=t.measure.heights=[];if(n){t.measure.width=r;for(var a=t.text.firstChild.getClientRects(),s=0;s<a.length-1;s++){var c=a[s],u=a[s+1];Math.abs(c.bottom-u.bottom)>2&&o.push((c.bottom+u.top)/2-i.top)}}o.push(i.bottom-i.top)}}function u(e,t,n){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var r=0;r<e.rest.length;r++)if(e.rest[r]==t)return{map:e.measure.maps[r],cache:e.measure.caches[r]};for(var o=0;o<e.rest.length;o++)if(i.i(q.a)(e.rest[o])>n)return{map:e.measure.maps[o],cache:e.measure.caches[o],before:!0}}function f(e,t){t=i.i(K.e)(t);var n=i.i(q.a)(t),r=e.display.externalMeasured=new U.c(e.doc,t,n);r.lineN=n;var o=r.built=i.i(U.d)(e,r);return r.text=o.pre,i.i(X.d)(e.display.lineMeasure,o.pre),r}function d(e,t,i,n){return v(e,p(e,t),i,n)}function h(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[j(e,t)];var i=e.display.externalMeasured;return i&&t>=i.lineN&&t<i.lineN+i.size?i:void 0}function p(e,t){var n=i.i(q.a)(t),r=h(e,n);r&&!r.text?r=null:r&&r.changes&&(i.i(ee.a)(e,r,n,I(e)),e.curOp.forceUpdate=!0),r||(r=f(e,t));var o=u(r,t,n);return{line:t,view:r,rect:null,map:o.map,cache:o.cache,before:o.before,hasHeights:!1}}function v(e,t,i,n,r){t.before&&(i=-1);var o=i+(n||\"\"),a=void 0;return t.cache.hasOwnProperty(o)?a=t.cache[o]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(c(e,t.view,t.rect),t.hasHeights=!0),a=b(e,t,i,n),a.bogus||(t.cache[o]=a)),{left:a.left,right:a.right,top:r?a.rtop:a.top,bottom:r?a.rbottom:a.bottom}}function g(e,t,i){for(var n=void 0,r=void 0,o=void 0,a=void 0,l=void 0,s=void 0,c=0;c<e.length;c+=3)if(l=e[c],s=e[c+1],t<l?(r=0,o=1,a=\"left\"):t<s?(r=t-l,o=r+1):(c==e.length-3||t==s&&e[c+3]>t)&&(o=s-l,r=o-1,t>=s&&(a=\"right\")),null!=r){if(n=e[c+2],l==s&&i==(n.insertLeft?\"left\":\"right\")&&(a=i),\"left\"==i&&0==r)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)n=e[2+(c-=3)],a=\"left\";if(\"right\"==i&&r==s-l)for(;c<e.length-3&&e[c+3]==e[c+4]&&!e[c+5].insertLeft;)n=e[(c+=3)+2],a=\"right\";break}return{node:n,start:r,end:o,collapse:a,coverStart:l,coverEnd:s}}function m(e,t){var i=ie;if(\"left\"==t)for(var n=0;n<e.length&&(i=e[n]).left==i.right;n++);else for(var r=e.length-1;r>=0&&(i=e[r]).left==i.right;r--);return i}function b(e,t,n,r){var o=g(t.map,n,r),a=o.node,l=o.start,s=o.end,c=o.collapse,u=void 0;if(3==a.nodeType){for(var f=0;f<4;f++){for(;l&&i.i(J.j)(t.line.text.charAt(o.coverStart+l));)--l;for(;o.coverStart+s<o.coverEnd&&i.i(J.j)(t.line.text.charAt(o.coverStart+s));)++s;if(u=$.b&&$.d<9&&0==l&&s==o.coverEnd-o.coverStart?a.parentNode.getBoundingClientRect():m(i.i(X.f)(a,l,s).getClientRects(),r),u.left||u.right||0==l)break;s=l,l-=1,c=\"right\"}$.b&&$.d<11&&(u=y(e.display.measure,u))}else{l>0&&(c=r=\"right\");var d=void 0;u=e.options.lineWrapping&&(d=a.getClientRects()).length>1?d[\"right\"==r?d.length-1:0]:a.getBoundingClientRect()}if($.b&&$.d<9&&!l&&(!u||!u.left&&!u.right)){var h=a.parentNode.getClientRects()[0];u=h?{left:h.left,right:h.left+P(e.display),top:h.top,bottom:h.bottom}:ie}for(var p=u.top-t.rect.top,v=u.bottom-t.rect.top,b=(p+v)/2,w=t.view.measure.heights,x=0;x<w.length-1&&!(b<w[x]);x++);var C=x?w[x-1]:0,k=w[x],S={left:(\"right\"==c?u.right:u.left)-t.rect.left,right:(\"left\"==c?u.left:u.right)-t.rect.left,top:C,bottom:k};return u.left||u.right||(S.bogus=!0),e.options.singleCursorHeightPerLine||(S.rtop=p,S.rbottom=v),S}function y(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!i.i(Z.b)(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}function w(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function x(e){e.display.externalMeasure=null,i.i(X.g)(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)w(e.display.view[t])}function C(e){x(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function k(){return $.e&&$.f?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function S(){return $.e&&$.f?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function L(e,t,r,o,a){if(!a&&t.widgets)for(var l=0;l<t.widgets.length;++l)if(t.widgets[l].above){var s=i.i(te.a)(t.widgets[l]);r.top+=s,r.bottom+=s}if(\"line\"==o)return r;o||(o=\"local\");var c=i.i(K.a)(t);if(\"local\"==o?c+=n(e.display):c-=e.display.viewOffset,\"page\"==o||\"window\"==o){var u=e.display.lineSpace.getBoundingClientRect();c+=u.top+(\"window\"==o?0:S());var f=u.left+(\"window\"==o?0:k());r.left+=f,r.right+=f}return r.top+=c,r.bottom+=c,r}function M(e,t,i){if(\"div\"==i)return t;var n=t.left,r=t.top;if(\"page\"==i)n-=k(),r-=S();else if(\"local\"==i||!i){var o=e.display.sizer.getBoundingClientRect();n+=o.left,r+=o.top}var a=e.display.lineSpace.getBoundingClientRect();return{left:n-a.left,top:r-a.top}}function T(e,t,n,r,o){return r||(r=i.i(q.d)(e.doc,t.line)),L(e,r,d(e,r,t.ch,o),n)}function _(e,t,n,r,o,a){function l(t,i){var l=v(e,o,t,i?\"right\":\"left\",a);return i?l.left=l.right:l.right=l.left,L(e,r,l,n)}function s(e,t,i){var n=c[t],r=n.level%2!=0;return l(i?e-1:e,r!=i)}r=r||i.i(q.d)(e.doc,t.line),o||(o=p(e,r));var c=i.i(Y.a)(r,e.doc.direction),u=t.ch,f=t.sticky;if(u>=r.text.length?(u=r.text.length,f=\"before\"):u<=0&&(u=0,f=\"after\"),!c)return l(\"before\"==f?u-1:u,\"before\"==f);var d=i.i(Y.b)(c,u,f),h=Y.c,g=s(u,d,\"before\"==f);return null!=h&&(g.other=s(u,h,\"before\"!=f)),g}function A(e,t){var r=0;t=i.i(G.c)(e.doc,t),e.options.lineWrapping||(r=P(e.display)*t.ch);var o=i.i(q.d)(e.doc,t.line),a=i.i(K.a)(o)+n(e.display);return{left:r,right:r,top:a,bottom:a+o.height}}function O(e,t,n,r,o){var a=i.i(G.a)(e,t,n);return a.xRel=o,r&&(a.outside=!0),a}function D(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return O(r.first,0,null,!0,-1);var o=i.i(q.f)(r,n),a=r.first+r.size-1;if(o>a)return O(r.first+r.size-1,i.i(q.d)(r,a).text.length,null,!0,1);t<0&&(t=0);for(var l=i.i(q.d)(r,o);;){var s=E(e,l,o,t,n),c=i.i(K.h)(l),u=c&&c.find(0,!0);if(!c||!(s.ch>u.from.ch||s.ch==u.from.ch&&s.xRel>0))return s;o=i.i(q.a)(l=u.to.line)}}function N(e,t,n,r){var o=function(i){return L(e,t,v(e,n,i),\"line\")},a=t.text.length,l=i.i(J.k)(function(e){return o(e-1).bottom<=r},a,0);return a=i.i(J.k)(function(e){return o(e).top>r},l,a),{begin:l,end:a}}function W(e,t,i,n){return N(e,t,i,L(e,t,v(e,i,n),\"line\").top)}function E(e,t,n,r,o){o-=i.i(K.a)(t);var a=0,l=t.text.length,s=p(e,t),c=void 0;if(i.i(Y.a)(t,e.doc.direction)){if(e.options.lineWrapping){var u=N(e,t,s,o);a=u.begin,l=u.end}c=new G.a(n,a);var f=_(e,c,\"line\",t,s).left,d=f<r?1:-1,h=void 0,g=f-r,m=void 0;do{if(h=g,m=c,null==(c=i.i(V.a)(e,t,c,d))||c.ch<a||l<=(\"before\"==c.sticky?c.ch-1:c.ch)){c=m;break}g=_(e,c,\"line\",t,s).left-r}while(d<0!=g<0&&Math.abs(g)<=Math.abs(h));if(Math.abs(g)>Math.abs(h)){if(g<0==h<0)throw new Error(\"Broke out of infinite loop in coordsCharInner\");c=m}}else{var b=i.i(J.k)(function(i){var n=L(e,t,v(e,s,i),\"line\");return n.top>o?(l=Math.min(i,l),!0):!(n.bottom<=o)&&(n.left>r||!(n.right<r)&&r-n.left<n.right-r)},a,l);b=i.i(J.l)(t.text,b,1),c=new G.a(n,b,b==l?\"before\":\"after\")}var y=_(e,c,\"line\",t,s);return(o<y.top||y.bottom<o)&&(c.outside=!0),c.xRel=r<y.left?-1:r>y.right?1:0,c}function H(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==ne){ne=i.i(X.e)(\"pre\");for(var t=0;t<49;++t)ne.appendChild(document.createTextNode(\"x\")),ne.appendChild(i.i(X.e)(\"br\"));ne.appendChild(document.createTextNode(\"x\"))}i.i(X.d)(e.measure,ne);var n=ne.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),i.i(X.g)(e.measure),n||1}function P(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=i.i(X.e)(\"span\",\"xxxxxxxxxx\"),n=i.i(X.e)(\"pre\",[t]);i.i(X.d)(e.measure,n);var r=t.getBoundingClientRect(),o=(r.right-r.left)/10;return o>2&&(e.cachedCharWidth=o),o||10}function I(e){for(var t=e.display,i={},n={},r=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a)i[e.options.gutters[a]]=o.offsetLeft+o.clientLeft+r,n[e.options.gutters[a]]=o.clientWidth;return{fixedPos:R(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:i,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function R(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function z(e){var t=H(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/P(e.display)-3);return function(o){if(i.i(K.b)(e.doc,o))return 0;var a=0;if(o.widgets)for(var l=0;l<o.widgets.length;l++)o.widgets[l].height&&(a+=o.widgets[l].height);return n?a+(Math.ceil(o.text.length/r)||1)*t:a+t}}function F(e){var t=e.doc,n=z(e);t.iter(function(e){var t=n(e);t!=e.height&&i.i(q.b)(e,t)})}function B(e,t,n,r){var a=e.display;if(!n&&\"true\"==i.i(Q.j)(t).getAttribute(\"cm-not-content\"))return null;var l=void 0,s=void 0,c=a.lineSpace.getBoundingClientRect();try{l=t.clientX-c.left,s=t.clientY-c.top}catch(t){return null}var u=D(e,l,s),f=void 0;if(r&&1==u.xRel&&(f=i.i(q.d)(e.doc,u.line).text).length==u.ch){var d=i.i(J.b)(f,f.length,e.options.tabSize)-f.length;u=i.i(G.a)(u.line,Math.max(0,Math.round((l-o(e.display).left)/P(e.display))-d))}return u}function j(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var i=e.display.view,n=0;n<i.length;n++)if((t-=i[n].size)<0)return n}var V=i(64),U=i(21),G=i(3),K=i(7),q=i(4),Y=i(32),$=i(5),X=i(1),Q=i(2),Z=i(24),J=i(0),ee=i(89),te=i(22);t.f=n,t.k=r,t.p=o,t.g=a,t.l=l,t.j=s,t.v=u,t.s=d,t.t=h,t.c=p,t.d=v,t.w=g,t.u=w,t.D=x,t.y=C,t.B=L,t.z=M,t.q=T,t.h=_,t.m=A,t.A=D,t.e=W,t.i=H,t.C=P,t.o=I,t.n=R,t.a=z,t.b=F,t.x=B,t.r=j;var ie={left:0,right:0,top:0,bottom:0},ne=void 0},function(e,t,i){\"use strict\";function n(e,t,i){this.marker=e,this.from=t,this.to=i}function r(e,t){if(e)for(var i=0;i<e.length;++i){var n=e[i];if(n.marker==t)return n}}function o(e,t){for(var i=void 0,n=0;n<e.length;++n)e[n]!=t&&(i||(i=[])).push(e[n]);return i}function a(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}function l(e,t,i){var r=void 0;if(e)for(var o=0;o<e.length;++o){var a=e[o],l=a.marker,s=null==a.from||(l.inclusiveLeft?a.from<=t:a.from<t);if(s||a.from==t&&\"bookmark\"==l.type&&(!i||!a.marker.insertLeft)){var c=null==a.to||(l.inclusiveRight?a.to>=t:a.to>t);(r||(r=[])).push(new n(l,a.from,c?null:a.to))}}return r}function s(e,t,i){var r=void 0;if(e)for(var o=0;o<e.length;++o){var a=e[o],l=a.marker,s=null==a.to||(l.inclusiveRight?a.to>=t:a.to>t);if(s||a.from==t&&\"bookmark\"==l.type&&(!i||a.marker.insertLeft)){var c=null==a.from||(l.inclusiveLeft?a.from<=t:a.from<t);(r||(r=[])).push(new n(l,c?null:a.from-t,null==a.to?null:a.to-t))}}return r}function c(e,t){if(t.full)return null;var o=i.i(E.c)(e,t.from.line)&&i.i(E.d)(e,t.from.line).markedSpans,a=i.i(E.c)(e,t.to.line)&&i.i(E.d)(e,t.to.line).markedSpans;if(!o&&!a)return null;var c=t.from.ch,f=t.to.ch,d=0==i.i(N.b)(t.from,t.to),h=l(o,c,d),p=s(a,f,d),v=1==t.text.length,g=i.i(D.f)(t.text).length+(v?c:0);if(h)for(var m=0;m<h.length;++m){var b=h[m];if(null==b.to){var y=r(p,b.marker);y?v&&(b.to=null==y.to?null:y.to+g):b.to=c}}if(p)for(var w=0;w<p.length;++w){var x=p[w];if(null!=x.to&&(x.to+=g),null==x.from){var C=r(h,x.marker);C||(x.from=g,v&&(h||(h=[])).push(x))}else x.from+=g,v&&(h||(h=[])).push(x)}h&&(h=u(h)),p&&p!=h&&(p=u(p));var k=[h];if(!v){var S=t.text.length-2,L=void 0;if(S>0&&h)for(var M=0;M<h.length;++M)null==h[M].to&&(L||(L=[])).push(new n(h[M].marker,null,null));for(var T=0;T<S;++T)k.push(L);k.push(p)}return k}function u(e){for(var t=0;t<e.length;++t){var i=e[t];null!=i.from&&i.from==i.to&&!1!==i.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function f(e,t,n){var r=null;if(e.iter(t.line,n.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var n=e.markedSpans[t].marker;!n.readOnly||r&&-1!=i.i(D.a)(r,n)||(r||(r=[])).push(n)}}),!r)return null;for(var o=[{from:t,to:n}],a=0;a<r.length;++a)for(var l=r[a],s=l.find(0),c=0;c<o.length;++c){var u=o[c];if(!(i.i(N.b)(u.to,s.from)<0||i.i(N.b)(u.from,s.to)>0)){var f=[c,1],d=i.i(N.b)(u.from,s.from),h=i.i(N.b)(u.to,s.to);(d<0||!l.inclusiveLeft&&!d)&&f.push({from:u.from,to:s.from}),(h>0||!l.inclusiveRight&&!h)&&f.push({from:s.to,to:u.to}),o.splice.apply(o,f),c+=f.length-3}}return o}function d(e){var t=e.markedSpans;if(t){for(var i=0;i<t.length;++i)t[i].marker.detachLine(e);e.markedSpans=null}}function h(e,t){if(t){for(var i=0;i<t.length;++i)t[i].marker.attachLine(e);e.markedSpans=t}}function p(e){return e.inclusiveLeft?-1:0}function v(e){return e.inclusiveRight?1:0}function g(e,t){var n=e.lines.length-t.lines.length;if(0!=n)return n;var r=e.find(),o=t.find(),a=i.i(N.b)(r.from,o.from)||p(e)-p(t);if(a)return-a;var l=i.i(N.b)(r.to,o.to)||v(e)-v(t);return l||t.id-e.id}function m(e,t){var i=W.a&&e.markedSpans,n=void 0;if(i)for(var r,o=0;o<i.length;++o)r=i[o],r.marker.collapsed&&null==(t?r.from:r.to)&&(!n||g(n,r.marker)<0)&&(n=r.marker);return n}function b(e){return m(e,!0)}function y(e){return m(e,!1)}function w(e,t,n,r,o){var a=i.i(E.d)(e,t),l=W.a&&a.markedSpans;if(l)for(var s=0;s<l.length;++s){var c=l[s];if(c.marker.collapsed){var u=c.marker.find(0),f=i.i(N.b)(u.from,n)||p(c.marker)-p(o),d=i.i(N.b)(u.to,r)||v(c.marker)-v(o);if(!(f>=0&&d<=0||f<=0&&d>=0)&&(f<=0&&(c.marker.inclusiveRight&&o.inclusiveLeft?i.i(N.b)(u.to,n)>=0:i.i(N.b)(u.to,n)>0)||f>=0&&(c.marker.inclusiveRight&&o.inclusiveLeft?i.i(N.b)(u.from,r)<=0:i.i(N.b)(u.from,r)<0)))return!0}}}function x(e){for(var t=void 0;t=b(e);)e=t.find(-1,!0).line;return e}function C(e){for(var t=void 0;t=y(e);)e=t.find(1,!0).line;return e}function k(e){for(var t=void 0,i=void 0;t=y(e);)e=t.find(1,!0).line,(i||(i=[])).push(e);return i}function S(e,t){var n=i.i(E.d)(e,t),r=x(n);return n==r?t:i.i(E.a)(r)}function L(e,t){if(t>e.lastLine())return t;var n=i.i(E.d)(e,t),r=void 0;if(!M(e,n))return t;for(;r=y(n);)n=r.find(1,!0).line;return i.i(E.a)(n)+1}function M(e,t){var i=W.a&&t.markedSpans;if(i)for(var n,r=0;r<i.length;++r)if(n=i[r],n.marker.collapsed){if(null==n.from)return!0;if(!n.marker.widgetNode&&0==n.from&&n.marker.inclusiveLeft&&T(e,t,n))return!0}}function T(e,t,i){if(null==i.to){var n=i.marker.find(1,!0);return T(e,n.line,r(n.line.markedSpans,i.marker))}if(i.marker.inclusiveRight&&i.to==t.text.length)return!0;for(var o,a=0;a<t.markedSpans.length;++a)if(o=t.markedSpans[a],o.marker.collapsed&&!o.marker.widgetNode&&o.from==i.to&&(null==o.to||o.to!=i.from)&&(o.marker.inclusiveLeft||i.marker.inclusiveRight)&&T(e,t,o))return!0}function _(e){e=x(e);for(var t=0,i=e.parent,n=0;n<i.lines.length;++n){var r=i.lines[n];if(r==e)break;t+=r.height}for(var o=i.parent;o;i=o,o=i.parent)for(var a=0;a<o.children.length;++a){var l=o.children[a];if(l==i)break;t+=l.height}return t}function A(e){if(0==e.height)return 0;for(var t=e.text.length,i=void 0,n=e;i=b(n);){var r=i.find(0,!0);n=r.from.line,t+=r.from.ch-r.to.ch}for(n=e;i=y(n);){var o=i.find(0,!0);t-=n.text.length-o.from.ch,n=o.to.line,t+=n.text.length-o.to.ch}return t}function O(e){var t=e.display,n=e.doc;t.maxLine=i.i(E.d)(n,n.first),t.maxLineLength=A(t.maxLine),t.maxLineChanged=!0,n.iter(function(e){var i=A(e);i>t.maxLineLength&&(t.maxLineLength=i,t.maxLine=e)})}var D=i(0),N=i(3),W=i(39),E=i(4);t.s=n,t.o=r,t.p=o,t.r=a,t.d=c,t.c=f,t.j=d,t.i=h,t.k=g,t.h=y,t.q=w,t.e=x,t.t=C,t.l=k,t.m=S,t.n=L,t.b=M,t.a=_,t.f=A,t.g=O},function(e,t,i){\"use strict\";function n(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++_},i.i(w.b)(e.curOp)}function r(e){var t=e.curOp;i.i(w.c)(t,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;o(e)})}function o(e){for(var t=e.ops,i=0;i<t.length;i++)a(t[i]);for(var n=0;n<t.length;n++)l(t[n]);for(var r=0;r<t.length;r++)s(t[r]);for(var o=0;o<t.length;o++)c(t[o]);for(var f=0;f<t.length;f++)u(t[f])}function a(e){var t=e.cm,n=t.display;i.i(M.c)(t),e.updateMaxLine&&i.i(g.g)(t),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<n.viewFrom||e.scrollToPos.to.line>=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new M.d(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function l(e){e.updatedDisplay=e.mustUpdate&&i.i(M.e)(e.cm,e.update)}function s(e){var t=e.cm,n=t.display;e.updatedDisplay&&i.i(T.b)(t),e.barMeasure=i.i(C.b)(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=i.i(m.s)(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+i.i(m.g)(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-i.i(m.l)(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection(e.focus))}function c(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+\"px\",e.maxScrollLeft<t.doc.scrollLeft&&i.i(k.c)(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var n=e.focus&&e.focus==i.i(y.j)()&&(!document.hasFocus||document.hasFocus());e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,n),(e.updatedDisplay||e.startHeight!=t.doc.height)&&i.i(C.c)(t,e.barMeasure),e.updatedDisplay&&i.i(M.f)(t,e.barMeasure),e.selectionChanged&&i.i(S.b)(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),n&&i.i(x.a)(e.cm)}function u(e){var t=e.cm,n=t.display,r=t.doc;if(e.updatedDisplay&&i.i(M.g)(t,e.update),null==n.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(n.wheelStartX=n.wheelStartY=null),null==e.scrollTop||n.scroller.scrollTop==e.scrollTop&&!e.forceScroll||(r.scrollTop=Math.max(0,Math.min(n.scroller.scrollHeight-n.scroller.clientHeight,e.scrollTop)),n.scrollbars.setScrollTop(r.scrollTop),n.scroller.scrollTop=r.scrollTop),null!=e.scrollLeft&&i.i(k.c)(t,e.scrollLeft,!0,!0),e.scrollToPos){var o=i.i(L.c)(t,i.i(v.c)(r,e.scrollToPos.from),i.i(v.c)(r,e.scrollToPos.to),e.scrollToPos.margin);i.i(L.d)(t,o)}var a=e.maybeHiddenMarkers,l=e.maybeUnhiddenMarkers;if(a)for(var s=0;s<a.length;++s)a[s].lines.length||i.i(b.d)(a[s],\"hide\");if(l)for(var c=0;c<l.length;++c)l[c].lines.length&&i.i(b.d)(l[c],\"unhide\");n.wrapper.offsetHeight&&(r.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&i.i(b.d)(t,\"changes\",t,e.changeObjs),e.update&&e.update.finish()}function f(e,t){if(e.curOp)return t();n(e);try{return t()}finally{r(e)}}function d(e,t){return function(){if(e.curOp)return t.apply(e,arguments);n(e);try{return t.apply(e,arguments)}finally{r(e)}}}function h(e){return function(){if(this.curOp)return e.apply(this,arguments);n(this);try{return e.apply(this,arguments)}finally{r(this)}}}function p(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);n(t);try{return e.apply(this,arguments)}finally{r(t)}}}var v=i(3),g=i(7),m=i(6),b=i(2),y=i(1),w=i(15),x=i(35),C=i(37),k=i(36),S=i(20),L=i(19),M=i(38),T=i(49);t.c=n,t.d=r,t.a=f,t.b=d,t.f=h,t.e=p;var _=0},function(e,t,i){\"use strict\";function n(e,t){var n=e[t];e.sort(function(e,t){return i.i(c.b)(e.from(),t.from())}),t=i.i(u.a)(e,n);for(var r=1;r<e.length;r++){var o=e[r],a=e[r-1];if(i.i(c.b)(a.to(),o.from())>=0){var l=i.i(c.g)(a.from(),o.from()),s=i.i(c.h)(a.to(),o.to()),h=a.empty()?o.from()==o.head:a.from()==a.head;r<=t&&--t,e.splice(--r,2,new d(h?s:l,h?l:s))}}return new f(e,t)}function r(e,t){return new f([new d(e,t||e)],0)}var o=i(16),a=i.n(o),l=i(17),s=i.n(l),c=i(3),u=i(0);i.d(t,\"a\",function(){return f}),i.d(t,\"b\",function(){return d}),t.c=n,t.d=r;var f=function(){function e(t,i){a()(this,e),this.ranges=t,this.primIndex=i}return s()(e,[{key:\"primary\",value:function(){return this.ranges[this.primIndex]}},{key:\"equals\",value:function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var n=this.ranges[t],r=e.ranges[t];if(!i.i(c.f)(n.anchor,r.anchor)||!i.i(c.f)(n.head,r.head))return!1}return!0}},{key:\"deepCopy\",value:function(){for(var t=[],n=0;n<this.ranges.length;n++)t[n]=new d(i.i(c.e)(this.ranges[n].anchor),i.i(c.e)(this.ranges[n].head));return new e(t,this.primIndex)}},{key:\"somethingSelected\",value:function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1}},{key:\"contains\",value:function(e,t){t||(t=e);for(var n=0;n<this.ranges.length;n++){var r=this.ranges[n];if(i.i(c.b)(t,r.from())>=0&&i.i(c.b)(e,r.to())<=0)return n}return-1}}]),e}(),d=function(){function e(t,i){a()(this,e),this.anchor=t,this.head=i}return s()(e,[{key:\"from\",value:function(){return i.i(c.g)(this.anchor,this.head)}},{key:\"to\",value:function(){return i.i(c.h)(this.anchor,this.head)}},{key:\"empty\",value:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}}]),e}()},,,,,function(e,t,i){\"use strict\";function n(e,t,n,r){if(e.cm&&e.cm.display.shift||e.extend){var o=t.anchor;if(r){var a=i.i(x.b)(n,o)<0;a!=i.i(x.b)(r,o)<0?(o=n,n=r):a!=i.i(x.b)(n,r)<0&&(n=r)}return new M.b(o,n)}return new M.b(r||n,n)}function r(e,t,i,r){u(e,new M.a([n(e,e.sel.primary(),t,i)],0),r)}function o(e,t,r){for(var o=[],a=0;a<e.sel.ranges.length;a++)o[a]=n(e,e.sel.ranges[a],t[a],null);u(e,i.i(M.c)(o,e.sel.primIndex),r)}function a(e,t,n,r){var o=e.sel.ranges.slice(0);o[t]=n,u(e,i.i(M.c)(o,e.sel.primIndex),r)}function l(e,t,n,r){u(e,i.i(M.d)(t,n),r)}function s(e,t,n){var r={ranges:t.ranges,update:function(t){this.ranges=[];for(var n=0;n<t.length;n++)this.ranges[n]=new M.b(i.i(x.c)(e,t[n].anchor),i.i(x.c)(e,t[n].head))},origin:n&&n.origin};return i.i(k.d)(e,\"beforeSelectionChange\",e,r),e.cm&&i.i(k.d)(e.cm,\"beforeSelectionChange\",e.cm,r),r.ranges!=t.ranges?i.i(M.c)(r.ranges,r.ranges.length-1):t}function c(e,t,n){var r=e.history.done,o=i.i(S.f)(r);o&&o.ranges?(r[r.length-1]=t,f(e,t,n)):u(e,t,n)}function u(e,t,n){f(e,t,n),i.i(L.e)(e,e.sel,e.cm?e.cm.curOp.id:NaN,n)}function f(e,t,n){(i.i(k.h)(e,\"beforeSelectionChange\")||e.cm&&i.i(k.h)(e.cm,\"beforeSelectionChange\"))&&(t=s(e,t,n)),d(e,p(e,t,n&&n.bias||(i.i(x.b)(t.primary().head,e.sel.primary().head)<0?-1:1),!0)),n&&!1===n.scroll||!e.cm||i.i(w.b)(e.cm)}function d(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,i.i(k.i)(e.cm)),i.i(y.a)(e,\"cursorActivity\",e))}function h(e){d(e,p(e,e.sel,null,!1),S.h)}function p(e,t,n,r){for(var o=void 0,a=0;a<t.ranges.length;a++){var l=t.ranges[a],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[a],c=g(e,l.anchor,s&&s.anchor,n,r),u=g(e,l.head,s&&s.head,n,r);(o||c!=l.anchor||u!=l.head)&&(o||(o=t.ranges.slice(0,a)),o[a]=new M.b(c,u))}return o?i.i(M.c)(o,t.primIndex):t}function v(e,t,n,r,o){var a=i.i(C.d)(e,t.line);if(a.markedSpans)for(var l=0;l<a.markedSpans.length;++l){var s=a.markedSpans[l],c=s.marker;if((null==s.from||(c.inclusiveLeft?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(c.inclusiveRight?s.to>=t.ch:s.to>t.ch))){if(o&&(i.i(k.d)(c,\"beforeCursorEnter\"),c.explicitlyCleared)){if(a.markedSpans){--l;continue}break}if(!c.atomic)continue;if(n){var u=c.find(r<0?1:-1),f=void 0;if((r<0?c.inclusiveRight:c.inclusiveLeft)&&(u=m(e,u,-r,u&&u.line==t.line?a:null)),u&&u.line==t.line&&(f=i.i(x.b)(u,n))&&(r<0?f<0:f>0))return v(e,u,t,r,o)}var d=c.find(r<0?-1:1);return(r<0?c.inclusiveLeft:c.inclusiveRight)&&(d=m(e,d,r,d.line==t.line?a:null)),d?v(e,d,t,r,o):null}}return t}function g(e,t,n,r,o){var a=r||1,l=v(e,t,n,a,o)||!o&&v(e,t,n,a,!0)||v(e,t,n,-a,o)||!o&&v(e,t,n,-a,!0);return l||(e.cantEdit=!0,i.i(x.a)(e.first,0))}function m(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?i.i(x.c)(e,i.i(x.a)(t.line-1)):null:n>0&&t.ch==(r||i.i(C.d)(e,t.line)).text.length?t.line<e.first+e.size-1?i.i(x.a)(t.line+1,0):null:new x.a(t.line,t.ch+n)}function b(e){e.setSelection(i.i(x.a)(e.firstLine(),0),i.i(x.a)(e.lastLine()),S.h)}var y=i(15),w=i(19),x=i(3),C=i(4),k=i(2),S=i(0),L=i(53),M=i(9);t.j=n,t.g=r,t.h=o,t.e=a,t.f=l,t.i=c,t.a=u,t.b=f,t.c=h,t.k=g,t.d=b},function(e,t,i){\"use strict\";function n(e){c?c.ops.push(e):e.ownsGroup=c={ops:[e],delayedCallbacks:[]}}function r(e){var t=e.delayedCallbacks,i=0;do{for(;i<t.length;i++)t[i].call(null);for(var n=0;n<e.ops.length;n++){var r=e.ops[n];if(r.cursorActivityHandlers)for(;r.cursorActivityCalled<r.cursorActivityHandlers.length;)r.cursorActivityHandlers[r.cursorActivityCalled++].call(null,r.cm)}}while(i<t.length)}function o(e,t){var i=e.ownsGroup;if(i)try{r(i)}finally{c=null,t(i)}}function a(e,t){var n=i.i(s.l)(e,t);if(n.length){var r=Array.prototype.slice.call(arguments,2),o=void 0;c?o=c.delayedCallbacks:u?o=u:(o=u=[],setTimeout(l,0));for(var a=0;a<n.length;++a)!function(e){o.push(function(){return n[e].apply(null,r)})}(a)}}function l(){var e=u;u=null;for(var t=0;t<e.length;++t)e[t]()}var s=i(2);t.b=n,t.c=o,t.a=a;var c=null,u=null},,,function(e,t,i){\"use strict\";function n(e,t,n,r){null==t&&(t=e.doc.first),null==n&&(n=e.doc.first+e.doc.size),r||(r=0);var l=e.display;if(r&&n<l.viewTo&&(null==l.updateLineNumbers||l.updateLineNumbers>t)&&(l.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=l.viewTo)u.a&&i.i(f.m)(e.doc,t)<l.viewTo&&o(e);else if(n<=l.viewFrom)u.a&&i.i(f.n)(e.doc,n+r)>l.viewFrom?o(e):(l.viewFrom+=r,l.viewTo+=r);else if(t<=l.viewFrom&&n>=l.viewTo)o(e);else if(t<=l.viewFrom){var s=a(e,n,n+r,1);s?(l.view=l.view.slice(s.index),l.viewFrom=s.lineN,l.viewTo+=r):o(e)}else if(n>=l.viewTo){var d=a(e,t,t,-1);d?(l.view=l.view.slice(0,d.index),l.viewTo=d.lineN):o(e)}else{var h=a(e,t,t,-1),p=a(e,n,n+r,1);h&&p?(l.view=l.view.slice(0,h.index).concat(i.i(c.e)(e,h.lineN,p.lineN)).concat(l.view.slice(p.index)),l.viewTo+=r):o(e)}var v=l.externalMeasured;v&&(n<v.lineN?v.lineN+=r:t<v.lineN+v.size&&(l.externalMeasured=null))}function r(e,t,n){e.curOp.viewChanged=!0;var r=e.display,o=e.display.externalMeasured;if(o&&t>=o.lineN&&t<o.lineN+o.size&&(r.externalMeasured=null),!(t<r.viewFrom||t>=r.viewTo)){var a=r.view[i.i(d.r)(e,t)];if(null!=a.node){var l=a.changes||(a.changes=[]);-1==i.i(h.a)(l,n)&&l.push(n)}}}function o(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function a(e,t,n,r){var o=i.i(d.r)(e,t),a=void 0,l=e.display.view;if(!u.a||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var s=e.display.viewFrom,c=0;c<o;c++)s+=l[c].size;if(s!=t){if(r>0){if(o==l.length-1)return null;a=s+l[o].size-t,o++}else a=s-t;t+=a,n+=a}for(;i.i(f.m)(e.doc,n)!=n;){if(o==(r<0?0:l.length-1))return null;n+=r*l[o-(r<0?1:0)].size,o+=r}return{index:o,lineN:n}}function l(e,t,n){var r=e.display;0==r.view.length||t>=r.viewTo||n<=r.viewFrom?(r.view=i.i(c.e)(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=i.i(c.e)(e,t,r.viewFrom).concat(r.view):r.viewFrom<t&&(r.view=r.view.slice(i.i(d.r)(e,t))),r.viewFrom=t,r.viewTo<n?r.view=r.view.concat(i.i(c.e)(e,r.viewTo,n)):r.viewTo>n&&(r.view=r.view.slice(0,i.i(d.r)(e,n)))),r.viewTo=n}function s(e){for(var t=e.display.view,i=0,n=0;n<t.length;n++){var r=t[n];r.hidden||r.node&&!r.changes||++i}return i}var c=i(21),u=i(39),f=i(7),d=i(6),h=i(0);t.b=n,t.a=r,t.c=o,t.e=l,t.d=s},function(e,t,i){\"use strict\";function n(e,t){if(!i.i(p.k)(e,\"scrollCursorIntoView\")){var n=e.display,r=n.sizer.getBoundingClientRect(),o=null;if(t.top+r.top<0?o=!0:t.bottom+r.top>(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!d.h){var a=i.i(h.e)(\"div\",\"​\",null,\"position: absolute;\\n                         top: \"+(t.top-n.viewOffset-i.i(f.f)(e.display))+\"px;\\n                         height: \"+(t.bottom-t.top+i.i(f.g)(e)+n.barHeight)+\"px;\\n                         left: \"+t.left+\"px; width: \"+Math.max(2,t.right-t.left)+\"px;\");e.display.lineSpace.appendChild(a),a.scrollIntoView(o),e.display.lineSpace.removeChild(a)}}}function r(e,t,n,r){null==r&&(r=0);for(var o=void 0,l=0;l<5;l++){var s=!1,c=i.i(f.h)(e,t),u=n&&n!=t?i.i(f.h)(e,n):c;o={left:Math.min(c.left,u.left),top:Math.min(c.top,u.top)-r,right:Math.max(c.left,u.left),bottom:Math.max(c.bottom,u.bottom)+r};var d=a(e,o),h=e.doc.scrollTop,p=e.doc.scrollLeft;if(null!=d.scrollTop&&(i.i(v.b)(e,d.scrollTop),Math.abs(e.doc.scrollTop-h)>1&&(s=!0)),null!=d.scrollLeft&&(i.i(v.c)(e,d.scrollLeft),Math.abs(e.doc.scrollLeft-p)>1&&(s=!0)),!s)break}return o}function o(e,t){var n=a(e,t);null!=n.scrollTop&&i.i(v.b)(e,n.scrollTop),null!=n.scrollLeft&&i.i(v.c)(e,n.scrollLeft)}function a(e,t){var n=e.display,r=i.i(f.i)(e.display);t.top<0&&(t.top=0);var o=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,a=i.i(f.j)(e),l={};t.bottom-t.top>a&&(t.bottom=t.top+a);var s=e.doc.height+i.i(f.k)(n),c=t.top<r,u=t.bottom>s-r;if(t.top<o)l.scrollTop=c?0:t.top;else if(t.bottom>o+a){var d=Math.min(t.top,(u?s:t.bottom)-a);d!=o&&(l.scrollTop=d)}var h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft,p=i.i(f.l)(e)-(e.options.fixedGutter?n.gutters.offsetWidth:0),v=t.right-t.left>p;return v&&(t.right=t.left+p),t.left<10?l.scrollLeft=0:t.left<h?l.scrollLeft=Math.max(0,t.left-(v?0:10)):t.right>p+h-3&&(l.scrollLeft=t.right+(v?0:10)-p),l}function l(e,t,i){null==t&&null==i||c(e),null!=t&&(e.curOp.scrollLeft=(null==e.curOp.scrollLeft?e.doc.scrollLeft:e.curOp.scrollLeft)+t),null!=i&&(e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+i)}function s(e){c(e);var t=e.getCursor(),n=t,r=t;e.options.lineWrapping||(n=t.ch?i.i(u.a)(t.line,t.ch-1):t,r=i.i(u.a)(t.line,t.ch+1)),e.curOp.scrollToPos={from:n,to:r,margin:e.options.cursorScrollMargin}}function c(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;var n=i.i(f.m)(e,t.from),r=i.i(f.m)(e,t.to),o=a(e,{left:Math.min(n.left,r.left),top:Math.min(n.top,r.top)-t.margin,right:Math.max(n.right,r.right),bottom:Math.max(n.bottom,r.bottom)+t.margin});e.scrollTo(o.scrollLeft,o.scrollTop)}}var u=i(3),f=i(6),d=i(5),h=i(1),p=i(2),v=i(36);t.d=n,t.c=r,t.e=o,t.g=a,t.a=l,t.b=s,t.f=c},function(e,t,i){\"use strict\";function n(e){e.display.input.showSelection(e.display.input.prepareSelection())}function r(e,t){for(var i=e.doc,n={},r=n.cursors=document.createDocumentFragment(),l=n.selection=document.createDocumentFragment(),s=0;s<i.sel.ranges.length;s++)if(!1!==t||s!=i.sel.primIndex){var c=i.sel.ranges[s];if(!(c.from().line>=e.display.viewTo||c.to().line<e.display.viewFrom)){var u=c.empty();(u||e.options.showCursorWhenSelecting)&&o(e,c.head,r),u||a(e,c,l)}}return n}function o(e,t,n){var r=i.i(f.h)(e,t,\"div\",null,null,!e.options.singleCursorHeightPerLine),o=n.appendChild(i.i(h.e)(\"div\",\" \",\"CodeMirror-cursor\"));if(o.style.left=r.left+\"px\",o.style.top=r.top+\"px\",o.style.height=Math.max(0,r.bottom-r.top)*e.options.cursorHeight+\"px\",r.other){var a=n.appendChild(i.i(h.e)(\"div\",\" \",\"CodeMirror-cursor CodeMirror-secondarycursor\"));a.style.display=\"\",a.style.left=r.other.left+\"px\",a.style.top=r.other.top+\"px\",a.style.height=.85*(r.other.bottom-r.other.top)+\"px\"}}function a(e,t,n){function r(e,t,n,r){t<0&&(t=0),t=Math.round(t),r=Math.round(r),p.appendChild(i.i(h.e)(\"div\",null,\"CodeMirror-selected\",\"position: absolute; left: \"+e+\"px;\\n                             top: \"+t+\"px; width: \"+(null==n?m-e:n)+\"px;\\n                             height: \"+(r-t)+\"px\"))}function o(t,n,o){function a(n,r){return i.i(f.q)(e,i.i(s.a)(t,n),\"div\",c,r)}var c=i.i(u.d)(l,t),h=c.text.length,p=void 0,v=void 0;return i.i(d.d)(i.i(d.a)(c,l.direction),n||0,null==o?h:o,function(e,t,i){var l=a(e,\"left\"),s=void 0,c=void 0,u=void 0;if(e==t)s=l,c=u=l.left;else{if(s=a(t-1,\"right\"),\"rtl\"==i){var f=l;l=s,s=f}c=l.left,u=s.right}null==n&&0==e&&(c=g),s.top-l.top>3&&(r(c,l.top,null,l.bottom),c=g,l.bottom<s.top&&r(c,l.bottom,null,s.top)),null==o&&t==h&&(u=m),(!p||l.top<p.top||l.top==p.top&&l.left<p.left)&&(p=l),(!v||s.bottom>v.bottom||s.bottom==v.bottom&&s.right>v.right)&&(v=s),c<g+1&&(c=g),r(c,s.top,u-c,s.bottom)}),{start:p,end:v}}var a=e.display,l=e.doc,p=document.createDocumentFragment(),v=i.i(f.p)(e.display),g=v.left,m=Math.max(a.sizerWidth,i.i(f.l)(e)-a.sizer.offsetLeft)-v.right,b=t.from(),y=t.to();if(b.line==y.line)o(b.line,b.ch,y.ch);else{var w=i.i(u.d)(l,b.line),x=i.i(u.d)(l,y.line),C=i.i(c.e)(w)==i.i(c.e)(x),k=o(b.line,b.ch,C?w.text.length+1:null).end,S=o(y.line,C?0:null,y.ch).start;C&&(k.top<S.top-2?(r(k.right,k.top,null,k.bottom),r(g,S.top,S.left,S.bottom)):r(k.right,k.top,S.left-k.right,k.bottom)),k.bottom<S.top&&r(g,k.bottom,null,S.top)}n.appendChild(p)}function l(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var i=!0;t.cursorDiv.style.visibility=\"\",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(i=!i)?\"\":\"hidden\"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility=\"hidden\")}}var s=i(3),c=i(7),u=i(4),f=i(6),d=i(32),h=i(1);t.a=n,t.c=r,t.d=o,t.b=l},function(e,t,i){\"use strict\";function n(e,t,n,r){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),i.i(M.j)(e),i.i(M.i)(e,n);var o=r?r(e):1;o!=e.height&&i.i(T.b)(e,o)}function r(e){e.parent=null,i.i(M.j)(e)}function o(e,t){if(!e||/^\\s*$/.test(e))return null;var i=t.addModeClass?O:A;return i[e]||(i[e]=e.replace(/\\S+/g,\"cm-$&\"))}function a(e,t){var n=i.i(x.h)(\"span\",null,null,w.g?\"padding-right: .1px\":null),r={pre:i.i(x.h)(\"pre\",[n],\"CodeMirror-line\"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:(w.b||w.g)&&e.getOption(\"lineWrapping\")};t.measure={};for(var o=0;o<=(t.rest?t.rest.length:0);o++){var a=o?t.rest[o-1]:t.line,l=void 0;r.pos=0,r.addToken=s,i.i(k.c)(e.display.measure)&&(l=i.i(y.a)(a,e.doc.direction))&&(r.addToken=u(r.addToken,l)),r.map=[];var c=t!=e.display.externalMeasured&&i.i(T.a)(a);d(a,r,i.i(L.a)(e,a,c)),a.styleClasses&&(a.styleClasses.bgClass&&(r.bgClass=i.i(x.i)(a.styleClasses.bgClass,r.bgClass||\"\")),a.styleClasses.textClass&&(r.textClass=i.i(x.i)(a.styleClasses.textClass,r.textClass||\"\"))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(i.i(k.d)(e.display.measure))),0==o?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(w.g){var f=r.content.lastChild;(/\\bcm-tab\\b/.test(f.className)||f.querySelector&&f.querySelector(\".cm-tab\"))&&(r.content.className=\"cm-tab-wrap-hack\")}return i.i(C.d)(e,\"renderLine\",e,t.line,r.pre),r.pre.className&&(r.textClass=i.i(x.i)(r.pre.className,r.textClass||\"\")),r}function l(e){var t=i.i(x.e)(\"span\",\"•\",\"cm-invalidchar\");return t.title=\"\\\\u\"+e.charCodeAt(0).toString(16),t.setAttribute(\"aria-label\",t.title),t}function s(e,t,n,r,o,a,l){if(t){var s=e.splitSpaces?c(t,e.trailingSpace):t,u=e.cm.state.specialChars,f=!1,d=void 0;if(u.test(t)){d=document.createDocumentFragment();for(var h=0;;){u.lastIndex=h;var p=u.exec(t),v=p?p.index-h:t.length-h;if(v){var g=document.createTextNode(s.slice(h,h+v));w.b&&w.d<9?d.appendChild(i.i(x.e)(\"span\",[g])):d.appendChild(g),e.map.push(e.pos,e.pos+v,g),e.col+=v,e.pos+=v}if(!p)break;h+=v+1;var m=void 0;if(\"\\t\"==p[0]){var b=e.cm.options.tabSize,y=b-e.col%b;m=d.appendChild(i.i(x.e)(\"span\",i.i(S.m)(y),\"cm-tab\")),m.setAttribute(\"role\",\"presentation\"),m.setAttribute(\"cm-text\",\"\\t\"),e.col+=y}else\"\\r\"==p[0]||\"\\n\"==p[0]?(m=d.appendChild(i.i(x.e)(\"span\",\"\\r\"==p[0]?\"␍\":\"␤\",\"cm-invalidchar\")),m.setAttribute(\"cm-text\",p[0]),e.col+=1):(m=e.cm.options.specialCharPlaceholder(p[0]),m.setAttribute(\"cm-text\",p[0]),w.b&&w.d<9?d.appendChild(i.i(x.e)(\"span\",[m])):d.appendChild(m),e.col+=1);e.map.push(e.pos,e.pos+1,m),e.pos++}}else e.col+=t.length,d=document.createTextNode(s),e.map.push(e.pos,e.pos+t.length,d),w.b&&w.d<9&&(f=!0),e.pos+=t.length;if(e.trailingSpace=32==s.charCodeAt(t.length-1),n||r||o||f||l){var C=n||\"\";r&&(C+=r),o&&(C+=o);var k=i.i(x.e)(\"span\",[d],C,l);return a&&(k.title=a),e.content.appendChild(k)}e.content.appendChild(d)}}function c(e,t){if(e.length>1&&!/  /.test(e))return e;for(var i=t,n=\"\",r=0;r<e.length;r++){var o=e.charAt(r);\" \"!=o||!i||r!=e.length-1&&32!=e.charCodeAt(r+1)||(o=\" \"),n+=o,i=\" \"==o}return n}function u(e,t){return function(i,n,r,o,a,l,s){r=r?r+\" cm-force-border\":\"cm-force-border\";for(var c=i.pos,u=c+n.length;;){for(var f=void 0,d=0;d<t.length&&(f=t[d],!(f.to>c&&f.from<=c));d++);if(f.to>=u)return e(i,n,r,o,a,l,s);e(i,n.slice(0,f.to-c),r,o,null,l,s),o=null,n=n.slice(f.to-c),c=f.to}}}function f(e,t,i,n){var r=!n&&i.widgetNode;r&&e.map.push(e.pos,e.pos+t,r),!n&&e.cm.display.input.needsContentAttribute&&(r||(r=e.content.appendChild(document.createElement(\"span\"))),r.setAttribute(\"cm-marker\",i.id)),r&&(e.cm.display.input.setUneditable(r),e.content.appendChild(r)),e.pos+=t,e.trailingSpace=!1}function d(e,t,n){var r=e.markedSpans,a=e.text,l=0;if(r)for(var s=a.length,c=0,u=1,d=\"\",h=void 0,p=void 0,v=0,g=void 0,m=void 0,b=void 0,y=void 0,w=void 0;;){if(v==c){g=m=b=y=p=\"\",w=null,v=1/0;for(var x=[],C=void 0,k=0;k<r.length;++k){var S=r[k],L=S.marker;\"bookmark\"==L.type&&S.from==c&&L.widgetNode?x.push(L):S.from<=c&&(null==S.to||S.to>c||L.collapsed&&S.to==c&&S.from==c)?(null!=S.to&&S.to!=c&&v>S.to&&(v=S.to,m=\"\"),L.className&&(g+=\" \"+L.className),L.css&&(p=(p?p+\";\":\"\")+L.css),L.startStyle&&S.from==c&&(b+=\" \"+L.startStyle),L.endStyle&&S.to==v&&(C||(C=[])).push(L.endStyle,S.to),L.title&&!y&&(y=L.title),L.collapsed&&(!w||i.i(M.k)(w.marker,L)<0)&&(w=S)):S.from>c&&v>S.from&&(v=S.from)}if(C)for(var T=0;T<C.length;T+=2)C[T+1]==v&&(m+=\" \"+C[T]);if(!w||w.from==c)for(var _=0;_<x.length;++_)f(t,0,x[_]);if(w&&(w.from||0)==c){if(f(t,(null==w.to?s+1:w.to)-c,w.marker,null==w.from),null==w.to)return;w.to==c&&(w=!1)}}if(c>=s)break;for(var A=Math.min(s,v);;){if(d){var O=c+d.length;if(!w){var D=O>A?d.slice(0,A-c):d;t.addToken(t,D,h?h+g:g,b,c+D.length==v?m:\"\",y,p)}if(O>=A){d=d.slice(A-c),c=A;break}c=O,b=\"\"}d=a.slice(l,l=n[u++]),h=o(n[u++],t.cm.options)}}else for(var N=1;N<n.length;N+=2)t.addToken(t,a.slice(l,l=n[N]),o(n[N+1],t.cm.options))}function h(e,t,n){this.line=t,this.rest=i.i(M.l)(t),this.size=this.rest?i.i(T.a)(i.i(S.f)(this.rest))-n+1:1,this.node=this.text=null,this.hidden=i.i(M.b)(e,t)}function p(e,t,n){for(var r=[],o=void 0,a=t;a<n;a=o){var l=new h(e.doc,i.i(T.d)(e.doc,a),a);o=a+l.size,r.push(l)}return r}var v=i(16),g=i.n(v),m=i(17),b=i.n(m),y=i(32),w=i(5),x=i(1),C=i(2),k=i(24),S=i(0),L=i(52),M=i(7),T=i(4);i.d(t,\"a\",function(){return _}),t.b=n,t.g=r,t.d=a,t.f=l,t.c=h,t.e=p;var _=function(){function e(t,n,r){g()(this,e),this.text=t,i.i(M.i)(this,n),this.height=r?r(this):1}return b()(e,[{key:\"lineNo\",value:function(){return i.i(T.a)(this)}}]),e}();i.i(C.a)(_);var A={},O={}},function(e,t,i){\"use strict\";function n(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!i.i(o.b)(document.body,e.node)){var n=\"position: relative;\";e.coverGutter&&(n+=\"margin-left: -\"+t.display.gutters.offsetWidth+\"px;\"),e.noHScroll&&(n+=\"width: \"+t.display.wrapper.clientWidth+\"px;\"),i.i(o.d)(t.display.measure,i.i(o.e)(\"div\",[e.node],null,n))}return e.height=e.node.parentNode.offsetHeight}function r(e,t){for(var n=i.i(a.j)(t);n!=e.wrapper;n=n.parentNode)if(!n||1==n.nodeType&&\"true\"==n.getAttribute(\"cm-ignore-events\")||n.parentNode==e.sizer&&n!=e.mover)return!0}var o=i(1),a=i(2);t.a=n,t.b=r},function(e,t,i){\"use strict\";function n(e,t,n){var r={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return r.canceled=!0}};return n&&(r.update=function(t,n,o,a){t&&(r.from=i.i(w.c)(e,t)),n&&(r.to=i.i(w.c)(e,n)),o&&(r.text=o),void 0!==a&&(r.origin=a)}),i.i(L.d)(e,\"beforeChange\",e,r),e.cm&&i.i(L.d)(e.cm,\"beforeChange\",e.cm,r),r.canceled?null:{from:r.from,to:r.to,text:r.text,origin:r.origin}}function r(e,t,a){if(e.cm){if(!e.cm.curOp)return i.i(b.b)(e.cm,r)(e,t,a);if(e.cm.state.suppressEdits)return}if(!(i.i(L.h)(e,\"beforeChange\")||e.cm&&i.i(L.h)(e.cm,\"beforeChange\"))||(t=n(e,t,!0))){var l=x.b&&!a&&i.i(C.c)(e,t.from,t.to);if(l)for(var s=l.length-1;s>=0;--s)o(e,{from:l[s].from,to:l[s].to,text:s?[\"\"]:t.text});else o(e,t)}}function o(e,t){if(1!=t.text.length||\"\"!=t.text[0]||0!=i.i(w.b)(t.from,t.to)){var n=i.i(_.b)(e,t);i.i(O.a)(e,t,n,e.cm?e.cm.curOp.id:NaN),s(e,t,n,i.i(C.d)(e,t));var r=[];i.i(A.a)(e,function(e,n){n||-1!=i.i(M.a)(r,e.history)||(h(e.history,t),r.push(e.history)),s(e,t,null,i.i(C.d)(e,t))})}}function a(e,t,r){if(!e.cm||!e.cm.state.suppressEdits||r){for(var o=e.history,a=void 0,l=e.sel,c=\"undo\"==t?o.done:o.undone,u=\"undo\"==t?o.undone:o.done,f=0;f<c.length&&(a=c[f],r?!a.ranges||a.equals(e.sel):a.ranges);f++);if(f!=c.length){for(o.lastOrigin=o.lastSelOrigin=null;a=c.pop(),a.ranges;){if(i.i(O.b)(a,u),r&&!a.equals(e.sel))return void i.i(N.a)(e,a,{clearRedo:!1});l=a}var d=[];i.i(O.b)(l,u),u.push({changes:d,generation:o.generation}),o.generation=a.generation||++o.maxGeneration;for(var p=i.i(L.h)(e,\"beforeChange\")||e.cm&&i.i(L.h)(e.cm,\"beforeChange\"),v=a.changes.length-1;v>=0;--v){var m=function(r){var o=a.changes[r];if(o.origin=t,p&&!n(e,o,!1))return c.length=0,{v:void 0};d.push(i.i(O.c)(e,o));var l=r?i.i(_.b)(e,o):i.i(M.f)(c);s(e,o,l,i.i(O.d)(e,o)),!r&&e.cm&&e.cm.scrollIntoView({from:o.from,to:i.i(_.a)(o)});var u=[];i.i(A.a)(e,function(e,t){t||-1!=i.i(M.a)(u,e.history)||(h(e.history,o),u.push(e.history)),s(e,o,null,i.i(O.d)(e,o))})}(v);if(\"object\"===(void 0===m?\"undefined\":g()(m)))return m.v}}}}function l(e,t){if(0!=t&&(e.first+=t,e.sel=new D.a(i.i(M.g)(e.sel.ranges,function(e){return new D.b(i.i(w.a)(e.anchor.line+t,e.anchor.ch),i.i(w.a)(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){i.i(y.b)(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;r<n.viewTo;r++)i.i(y.a)(e.cm,r,\"gutter\")}}function s(e,t,n,r){if(e.cm&&!e.cm.curOp)return i.i(b.b)(e.cm,s)(e,t,n,r);if(t.to.line<e.first)return void l(e,t.text.length-1-(t.to.line-t.from.line));if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var o=t.text.length-1-(e.first-t.from.line);l(e,o),t={from:i.i(w.a)(e.first,0),to:i.i(w.a)(t.to.line+o,t.to.ch),text:[i.i(M.f)(t.text)],origin:t.origin}}var a=e.lastLine();t.to.line>a&&(t={from:t.from,to:i.i(w.a)(a,i.i(k.d)(e,a).text.length),text:[t.text[0]],origin:t.origin}),t.removed=i.i(k.e)(e,t.from,t.to),n||(n=i.i(_.b)(e,t)),e.cm?c(e.cm,t,r):i.i(A.b)(e,t,r),i.i(N.b)(e,n,M.h)}}function c(e,t,n){var r=e.doc,o=e.display,a=t.from,l=t.to,s=!1,c=a.line;e.options.lineWrapping||(c=i.i(k.a)(i.i(C.e)(i.i(k.d)(r,a.line))),r.iter(c,l.line+1,function(e){if(e==o.maxLine)return s=!0,!0})),r.sel.contains(t.from,t.to)>-1&&i.i(L.i)(e),i.i(A.b)(r,t,n,i.i(S.a)(e)),e.options.lineWrapping||(r.iter(c,a.line+t.text.length,function(e){var t=i.i(C.f)(e);t>o.maxLineLength&&(o.maxLine=e,o.maxLineLength=t,o.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0)),r.frontier=Math.min(r.frontier,a.line),i.i(m.a)(e,400);var u=t.text.length-(l.line-a.line)-1;t.full?i.i(y.b)(e):a.line!=l.line||1!=t.text.length||i.i(A.c)(e.doc,t)?i.i(y.b)(e,a.line,l.line+1,u):i.i(y.a)(e,a.line,\"text\");var f=i.i(L.h)(e,\"changes\"),d=i.i(L.h)(e,\"change\");if(d||f){var h={from:a,to:l,text:t.text,removed:t.removed,origin:t.origin};d&&i.i(T.a)(e,\"change\",e,h),f&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(h)}e.display.selForContextMenu=null}function u(e,t,n,o,a){if(o||(o=n),i.i(w.b)(o,n)<0){var l=o;o=n,n=l}\"string\"==typeof t&&(t=e.splitLines(t)),r(e,{from:n,to:o,text:t,origin:a})}function f(e,t,i,n){i<e.line?e.line+=n:t<e.line&&(e.line=t,e.ch=0)}function d(e,t,n,r){for(var o=0;o<e.length;++o){var a=e[o],l=!0;if(a.ranges){a.copied||(a=e[o]=a.deepCopy(),a.copied=!0);for(var s=0;s<a.ranges.length;s++)f(a.ranges[s].anchor,t,n,r),f(a.ranges[s].head,t,n,r)}else{for(var c=0;c<a.changes.length;++c){var u=a.changes[c];if(n<u.from.line)u.from=i.i(w.a)(u.from.line+r,u.from.ch),u.to=i.i(w.a)(u.to.line+r,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,o+1),o=0)}}}function h(e,t){var i=t.from.line,n=t.to.line,r=t.text.length-(n-i)-1;d(e.done,i,n,r),d(e.undone,i,n,r)}function p(e,t,n,r){var o=t,a=t;return\"number\"==typeof t?a=i.i(k.d)(e,i.i(w.d)(e,t)):o=i.i(k.a)(t),null==o?null:(r(a,o)&&e.cm&&i.i(y.a)(e.cm,o,n),a)}var v=i(66),g=i.n(v),m=i(47),b=i(8),y=i(18),w=i(3),x=i(39),C=i(7),k=i(4),S=i(6),L=i(2),M=i(0),T=i(15),_=i(40),A=i(31),O=i(53),D=i(9),N=i(14);t.c=r,t.d=a,t.b=u,t.a=p},function(e,t,i){\"use strict\";function n(e){if(null==c){var t=i.i(a.e)(\"span\",\"​\");i.i(a.d)(e,i.i(a.e)(\"span\",[t,document.createTextNode(\"x\")])),0!=e.firstChild.offsetHeight&&(c=t.offsetWidth<=1&&t.offsetHeight>2&&!(l.b&&l.d<8))}var n=c?i.i(a.e)(\"span\",\"​\"):i.i(a.e)(\"span\",\" \",null,\"display: inline-block; width: 1px; margin-right: -1px\");return n.setAttribute(\"cm-text\",\"\"),n}function r(e){if(null!=u)return u;var t=i.i(a.d)(e,document.createTextNode(\"AخA\")),n=i.i(a.f)(t,0,1).getBoundingClientRect(),r=i.i(a.f)(t,1,2).getBoundingClientRect();return i.i(a.g)(e),!(!n||n.left==n.right)&&(u=r.right-n.right<3)}function o(e){if(null!=p)return p;var t=i.i(a.d)(e,i.i(a.e)(\"span\",\"x\")),n=t.getBoundingClientRect(),r=i.i(a.f)(t,0,1).getBoundingClientRect();return p=Math.abs(n.left-r.left)>1}var a=i(1),l=i(5);i.d(t,\"g\",function(){return s}),t.d=n,t.c=r,i.d(t,\"a\",function(){return f}),i.d(t,\"f\",function(){return d}),i.d(t,\"e\",function(){return h}),t.b=o;var s=function(){if(l.b&&l.d<9)return!1;var e=i.i(a.e)(\"div\");return\"draggable\"in e||\"dragDrop\"in e}(),c=void 0,u=void 0,f=3!=\"\\n\\nb\".split(/\\n/).length?function(e){for(var t=0,i=[],n=e.length;t<=n;){var r=e.indexOf(\"\\n\",t);-1==r&&(r=e.length);var o=e.slice(t,\"\\r\"==e.charAt(r-1)?r-1:r),a=o.indexOf(\"\\r\");-1!=a?(i.push(o.slice(0,a)),t+=a+1):(i.push(o),t=r+1)}return i}:function(e){return e.split(/\\r\\n?|\\n/)},d=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t=void 0;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints(\"StartToEnd\",t)},h=function(){var e=i.i(a.e)(\"div\");return\"oncopy\"in e||(e.setAttribute(\"oncopy\",\"return;\"),\"function\"==typeof e.oncopy)}(),p=null},,,,,,,function(e,t,i){\"use strict\";function n(e,t){return 0==t.from.ch&&0==t.to.ch&&\"\"==i.i(m.f)(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function r(e,t,r,o){function a(e){return r?r[e]:null}function l(e,n,r){i.i(d.b)(e,n,r,o),i.i(b.a)(e,\"change\",e,t)}function s(e,t){for(var i=[],n=e;n<t;++n)i.push(new d.a(f[n],a(n),o));return i}var c=t.from,u=t.to,f=t.text,h=i.i(p.d)(e,c.line),v=i.i(p.d)(e,u.line),g=i.i(m.f)(f),y=a(f.length-1),w=u.line-c.line;if(t.full)e.insert(0,s(0,f.length)),e.remove(f.length,e.size-f.length);else if(n(e,t)){var x=s(0,f.length-1);l(v,v.text,y),w&&e.remove(c.line,w),x.length&&e.insert(c.line,x)}else if(h==v)if(1==f.length)l(h,h.text.slice(0,c.ch)+g+h.text.slice(u.ch),y);else{var C=s(1,f.length-1);C.push(new d.a(g+h.text.slice(u.ch),y,o)),l(h,h.text.slice(0,c.ch)+f[0],a(0)),e.insert(c.line+1,C)}else if(1==f.length)l(h,h.text.slice(0,c.ch)+f[0]+v.text.slice(u.ch),a(0)),e.remove(c.line+1,w);else{l(h,h.text.slice(0,c.ch)+f[0],a(0)),l(v,g+v.text.slice(u.ch),y);var k=s(1,f.length-1);w>1&&e.remove(c.line+1,w-1),e.insert(c.line+1,k)}i.i(b.a)(e,\"change\",e,t)}function o(e,t,i){function n(e,r,o){if(e.linked)for(var a=0;a<e.linked.length;++a){var l=e.linked[a];if(l.doc!=r){var s=o&&l.sharedHist;i&&!s||(t(l.doc,s),n(l.doc,e,s))}}}n(e,null,!0)}function a(e,t){if(t.cm)throw new Error(\"This document is already in use.\");e.doc=t,t.cm=e,i.i(v.b)(e),i.i(c.a)(e),l(e),e.options.lineWrapping||i.i(h.g)(e),e.options.mode=t.modeOption,i.i(f.b)(e)}function l(e){(\"rtl\"==e.doc.direction?g.a:g.c)(e.display.lineDiv,\"CodeMirror-rtl\")}function s(e){i.i(u.a)(e,function(){l(e),i.i(f.b)(e)})}var c=i(88),u=i(8),f=i(18),d=i(21),h=i(7),p=i(4),v=i(6),g=i(1),m=i(0),b=i(15);t.c=n,t.b=r,t.a=o,t.e=a,t.d=s},function(e,t,i){\"use strict\";function n(e,t,i,n){if(!e)return n(t,i,\"ltr\");for(var r=!1,o=0;o<e.length;++o){var a=e[o];(a.from<i&&a.to>t||t==i&&a.to==t)&&(n(Math.max(a.from,t),Math.min(a.to,i),1==a.level?\"rtl\":\"ltr\"),r=!0)}r||n(t,i,\"ltr\")}function r(e,t,i){var n=void 0;l=null;for(var r=0;r<e.length;++r){var o=e[r];if(o.from<t&&o.to>t)return r;o.to==t&&(o.from!=o.to&&\"before\"==i?n=r:l=r),o.from==t&&(o.from!=o.to&&\"before\"!=i?n=r:l=r)}return null!=n?n:l}function o(e,t){var i=e.order;return null==i&&(i=e.order=s(e.text,t)),i}var a=i(0);t.d=n,i.d(t,\"c\",function(){return l}),t.b=r,t.a=o;var l=null,s=function(){function e(e){return e<=247?n.charAt(e):1424<=e&&e<=1524?\"R\":1536<=e&&e<=1785?r.charAt(e-1536):1774<=e&&e<=2220?\"r\":8192<=e&&e<=8203?\"w\":8204==e?\"b\":\"L\"}function t(e,t,i){this.level=e,this.from=t,this.to=i}var n=\"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\",r=\"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\",o=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/,l=/[stwN]/,s=/[LRr]/,c=/[Lb1n]/,u=/[1n]/;return function(n,r){var f=\"ltr\"==r?\"L\":\"R\";if(0==n.length||\"ltr\"==r&&!o.test(n))return!1;for(var d=n.length,h=[],p=0;p<d;++p)h.push(e(n.charCodeAt(p)));for(var v=0,g=f;v<d;++v){var m=h[v];\"m\"==m?h[v]=g:g=m}for(var b=0,y=f;b<d;++b){var w=h[b];\"1\"==w&&\"r\"==y?h[b]=\"n\":s.test(w)&&(y=w,\"r\"==w&&(h[b]=\"R\"))}for(var x=1,C=h[0];x<d-1;++x){var k=h[x];\"+\"==k&&\"1\"==C&&\"1\"==h[x+1]?h[x]=\"1\":\",\"!=k||C!=h[x+1]||\"1\"!=C&&\"n\"!=C||(h[x]=C),C=k}for(var S=0;S<d;++S){var L=h[S];if(\",\"==L)h[S]=\"N\";else if(\"%\"==L){var M=void 0;for(M=S+1;M<d&&\"%\"==h[M];++M);for(var T=S&&\"!\"==h[S-1]||M<d&&\"1\"==h[M]?\"1\":\"N\",_=S;_<M;++_)h[_]=T;S=M-1}}for(var A=0,O=f;A<d;++A){var D=h[A];\"L\"==O&&\"1\"==D?h[A]=\"L\":s.test(D)&&(O=D)}for(var N=0;N<d;++N)if(l.test(h[N])){var W=void 0;for(W=N+1;W<d&&l.test(h[W]);++W);for(var E=\"L\"==(N?h[N-1]:f),H=\"L\"==(W<d?h[W]:f),P=E==H?E?\"L\":\"R\":f,I=N;I<W;++I)h[I]=P;N=W-1}for(var R=[],z=void 0,F=0;F<d;)if(c.test(h[F])){var B=F;for(++F;F<d&&c.test(h[F]);++F);R.push(new t(0,B,F))}else{var j=F,V=R.length;for(++F;F<d&&\"L\"!=h[F];++F);for(var U=j;U<F;)if(u.test(h[U])){j<U&&R.splice(V,0,new t(1,j,U));var G=U;for(++U;U<F&&u.test(h[U]);++U);R.splice(V,0,new t(2,G,U)),j=U}else++U;j<F&&R.splice(V,0,new t(1,j,F))}return 1==R[0].level&&(z=n.match(/^\\s+/))&&(R[0].from=z[0].length,R.unshift(new t(0,0,z[0].length))),1==i.i(a.f)(R).level&&(z=n.match(/\\s+$/))&&(i.i(a.f)(R).to-=z[0].length,R.push(new t(0,d-z[0].length,d))),\"rtl\"==r?R.reverse():R}}()},,,function(e,t,i){\"use strict\";function n(e){e.state.focused||(e.display.input.focus(),o(e))}function r(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,a(e))},100)}function o(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),\"nocursor\"!=e.options.readOnly&&(e.state.focused||(i.i(u.d)(e,\"focus\",e,t),e.state.focused=!0,i.i(c.a)(e.display.wrapper,\"CodeMirror-focused\"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),s.g&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),i.i(l.b)(e))}function a(e,t){e.state.delayingBlurEvent||(e.state.focused&&(i.i(u.d)(e,\"blur\",e,t),e.state.focused=!1,i.i(c.c)(e.display.wrapper,\"CodeMirror-focused\")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}var l=i(20),s=i(5),c=i(1),u=i(2);t.a=n,t.d=r,t.b=o,t.c=a},function(e,t,i){\"use strict\";function n(e,t){Math.abs(e.doc.scrollTop-t)<2||(e.doc.scrollTop=t,s.i||i.i(d.a)(e,{top:t}),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t),e.display.scrollbars.setScrollTop(t),s.i&&i.i(d.a)(e),i.i(u.a)(e,100))}function r(e,t,n,r){(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),e.doc.scrollLeft=t,i.i(f.a)(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function o(e){var t=e.wheelDeltaX,i=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==i&&e.detail&&e.axis==e.VERTICAL_AXIS?i=e.detail:null==i&&(i=e.wheelDelta),{x:t,y:i}}function a(e){var t=o(e);return t.x*=p,t.y*=p,t}function l(e,t){var a=o(t),l=a.x,u=a.y,f=e.display,v=f.scroller,g=v.scrollWidth>v.clientWidth,m=v.scrollHeight>v.clientHeight;if(l&&g||u&&m){if(u&&s.c&&s.g)e:for(var b=t.target,y=f.view;b!=v;b=b.parentNode)for(var w=0;w<y.length;w++)if(y[w].node==b){e.display.currentWheelTarget=b;break e}if(l&&!s.i&&!s.k&&null!=p)return u&&m&&n(e,Math.max(0,Math.min(v.scrollTop+u*p,v.scrollHeight-v.clientHeight))),r(e,Math.max(0,Math.min(v.scrollLeft+l*p,v.scrollWidth-v.clientWidth))),(!u||u&&m)&&i.i(c.e)(t),void(f.wheelStartX=null);if(u&&null!=p){var x=u*p,C=e.doc.scrollTop,k=C+f.wrapper.clientHeight;x<0?C=Math.max(0,C+x-50):k=Math.min(e.doc.height,k+x+50),i.i(d.a)(e,{top:C,bottom:k})}h<20&&(null==f.wheelStartX?(f.wheelStartX=v.scrollLeft,f.wheelStartY=v.scrollTop,f.wheelDX=l,f.wheelDY=u,setTimeout(function(){if(null!=f.wheelStartX){var e=v.scrollLeft-f.wheelStartX,t=v.scrollTop-f.wheelStartY,i=t&&f.wheelDY&&t/f.wheelDY||e&&f.wheelDX&&e/f.wheelDX;f.wheelStartX=f.wheelStartY=null,i&&(p=(p*h+i)/(h+1),++h)}},200)):(f.wheelDX+=l,f.wheelDY+=u))}}var s=i(5),c=i(2),u=i(47),f=i(48),d=i(38);t.b=n,t.c=r,t.a=a,t.d=l;var h=0,p=null;s.b?p=-.53:s.i?p=15:s.e?p=-.7:s.j&&(p=-1/3)},function(e,t,i){\"use strict\";function n(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+i.i(h.k)(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+i.i(h.g)(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}function r(e,t){t||(t=n(e));var r=e.display.barWidth,a=e.display.barHeight;o(e,t);for(var l=0;l<4&&r!=e.display.barWidth||a!=e.display.barHeight;l++)r!=e.display.barWidth&&e.options.lineWrapping&&i.i(v.b)(e),o(e,n(e)),r=e.display.barWidth,a=e.display.barHeight}function o(e,t){var i=e.display,n=i.scrollbars.update(t);i.sizer.style.paddingRight=(i.barWidth=n.right)+\"px\",i.sizer.style.paddingBottom=(i.barHeight=n.bottom)+\"px\",i.heightForcer.style.borderBottom=n.bottom+\"px solid transparent\",n.right&&n.bottom?(i.scrollbarFiller.style.display=\"block\",i.scrollbarFiller.style.height=n.bottom+\"px\",i.scrollbarFiller.style.width=n.right+\"px\"):i.scrollbarFiller.style.display=\"\",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(i.gutterFiller.style.display=\"block\",i.gutterFiller.style.height=n.bottom+\"px\",i.gutterFiller.style.width=t.gutterWidth+\"px\"):i.gutterFiller.style.display=\"\"}function a(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&i.i(f.c)(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new w[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),i.i(d.c)(t,\"mousedown\",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute(\"cm-not-content\",\"true\")},function(t,n){\"horizontal\"==n?i.i(m.c)(e,t):i.i(m.b)(e,t)},e),e.display.scrollbars.addClass&&i.i(f.a)(e.display.wrapper,e.display.scrollbars.addClass)}var l=i(16),s=i.n(l),c=i(17),u=i.n(c),f=i(1),d=i(2),h=i(6),p=i(5),v=i(49),g=i(0),m=i(36);t.b=n,t.c=r,i.d(t,\"a\",function(){return w}),t.d=a;var b=function(){function e(t,n,r){s()(this,e),this.cm=r;var o=this.vert=i.i(f.e)(\"div\",[i.i(f.e)(\"div\",null,null,\"min-width: 1px\")],\"CodeMirror-vscrollbar\"),a=this.horiz=i.i(f.e)(\"div\",[i.i(f.e)(\"div\",null,null,\"height: 100%; min-height: 1px\")],\"CodeMirror-hscrollbar\");t(o),t(a),i.i(d.c)(o,\"scroll\",function(){o.clientHeight&&n(o.scrollTop,\"vertical\")}),i.i(d.c)(a,\"scroll\",function(){a.clientWidth&&n(a.scrollLeft,\"horizontal\")}),this.checkedZeroWidth=!1,p.b&&p.d<8&&(this.horiz.style.minHeight=this.vert.style.minWidth=\"18px\")}return u()(e,[{key:\"update\",value:function(e){var t=e.scrollWidth>e.clientWidth+1,i=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(i){this.vert.style.display=\"block\",this.vert.style.bottom=t?n+\"px\":\"0\";var r=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+r)+\"px\"}else this.vert.style.display=\"\",this.vert.firstChild.style.height=\"0\";if(t){this.horiz.style.display=\"block\",this.horiz.style.right=i?n+\"px\":\"0\",this.horiz.style.left=e.barLeft+\"px\";var o=e.viewWidth-e.barLeft-(i?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+\"px\"}else this.horiz.style.display=\"\",this.horiz.firstChild.style.width=\"0\";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:i?n:0,bottom:t?n:0}}},{key:\"setScrollLeft\",value:function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,\"horiz\")}},{key:\"setScrollTop\",value:function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,\"vert\")}},{key:\"zeroWidthHack\",value:function(){var e=p.c&&!p.l?\"12px\":\"18px\";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents=\"none\",this.disableHoriz=new g.o,this.disableVert=new g.o}},{key:\"enableZeroWidthBar\",value:function(e,t,i){function n(){var r=e.getBoundingClientRect();(\"vert\"==i?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1))!=e?e.style.pointerEvents=\"none\":t.set(1e3,n)}e.style.pointerEvents=\"auto\",t.set(1e3,n)}},{key:\"clear\",value:function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)}}]),e}(),y=function(){function e(){s()(this,e)}return u()(e,[{key:\"update\",value:function(){return{bottom:0,right:0}}},{key:\"setScrollLeft\",value:function(){}},{key:\"setScrollTop\",value:function(){}},{key:\"clear\",value:function(){}}]),e}(),w={native:b,null:y}},function(e,t,i){\"use strict\";function n(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=i.i(m.g)(e)+\"px\",t.sizer.style.marginBottom=-t.nativeBarWidth+\"px\",t.sizer.style.borderRightWidth=i.i(m.g)(e)+\"px\",t.scrollbarsClipped=!0)}function r(e,t){var n=e.display,r=e.doc;if(t.editorIsHidden)return i.i(_.c)(e),!1;if(!t.force&&t.visible.from>=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==i.i(_.d)(e))return!1;i.i(S.b)(e)&&(i.i(_.c)(e),t.dims=i.i(m.o)(e));var o=r.first+r.size,a=Math.max(t.visible.from-e.options.viewportMargin,r.first),s=Math.min(o,t.visible.to+e.options.viewportMargin);n.viewFrom<a&&a-n.viewFrom<20&&(a=Math.max(r.first,n.viewFrom)),n.viewTo>s&&n.viewTo-s<20&&(s=Math.min(o,n.viewTo)),p.a&&(a=i.i(v.m)(e.doc,a),s=i.i(v.n)(e.doc,s));var c=a!=n.viewFrom||s!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;i.i(_.e)(e,a,s),n.viewOffset=i.i(v.a)(i.i(g.d)(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+\"px\";var u=i.i(_.d)(e);if(!c&&0==u&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var f=i.i(y.j)();return u>4&&(n.lineDiv.style.display=\"none\"),l(e,n.updateLineNumbers,t.dims),u>4&&(n.lineDiv.style.display=\"\"),n.renderedView=n.view,f&&i.i(y.j)()!=f&&f.offsetHeight&&f.focus(),i.i(y.g)(n.cursorDiv),i.i(y.g)(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,c&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,i.i(k.a)(e,400)),n.updateLineNumbers=null,!0}function o(e,t){for(var n=t.viewport,o=!0;(o&&e.options.lineWrapping&&t.oldDisplayWidth!=i.i(m.l)(e)||(n&&null!=n.top&&(n={top:Math.min(e.doc.height+i.i(m.k)(e.display)-i.i(m.j)(e),n.top)}),t.visible=i.i(T.a)(e.display,e.doc,n),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&r(e,t);o=!1){i.i(T.b)(e);var a=i.i(L.b)(e);i.i(M.a)(e),i.i(L.c)(e,a),c(e,a)}t.signal(e,\"update\",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,\"viewportChange\",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function a(e,t){var n=new A(e,t);if(r(e,n)){i.i(T.b)(e),o(e,n);var a=i.i(L.b)(e);i.i(M.a)(e),i.i(L.c)(e,a),c(e,a),n.finish()}}function l(e,t,n){function r(t){var i=t.nextSibling;return b.g&&b.c&&e.display.currentWheelTarget==t?t.style.display=\"none\":t.parentNode.removeChild(t),i}for(var o=e.display,a=e.options.lineNumbers,l=o.lineDiv,s=l.firstChild,c=o.view,u=o.viewFrom,f=0;f<c.length;f++){var d=c[f];if(d.hidden);else if(d.node&&d.node.parentNode==l){for(;s!=d.node;)s=r(s);var h=a&&null!=t&&t<=u&&d.lineNumber;d.changes&&(i.i(x.a)(d.changes,\"gutter\")>-1&&(h=!1),i.i(C.a)(e,d,u,n)),h&&(i.i(y.g)(d.lineNumber),d.lineNumber.appendChild(document.createTextNode(i.i(g.g)(e.options,u)))),s=d.node.nextSibling}else{var p=i.i(C.b)(e,d,u,n);l.insertBefore(p,s)}u+=d.size}for(;s;)s=r(s)}function s(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+\"px\"}function c(e,t){e.display.sizer.style.minHeight=t.docHeight+\"px\",e.display.heightForcer.style.top=t.docHeight+\"px\",e.display.gutters.style.height=t.docHeight+e.display.barHeight+i.i(m.g)(e)+\"px\"}var u=i(16),f=i.n(u),d=i(17),h=i.n(d),p=i(39),v=i(7),g=i(4),m=i(6),b=i(5),y=i(1),w=i(2),x=i(0),C=i(89),k=i(47),S=i(48),L=i(37),M=i(20),T=i(49),_=i(18);i.d(t,\"d\",function(){return A}),t.c=n,t.e=r,t.g=o,t.a=a,t.b=s,t.f=c;var A=function(){function e(t,n,r){f()(this,e);var o=t.display;this.viewport=n,this.visible=i.i(T.a)(o,t.doc,n),this.editorIsHidden=!o.wrapper.offsetWidth,this.wrapperHeight=o.wrapper.clientHeight,this.wrapperWidth=o.wrapper.clientWidth,this.oldDisplayWidth=i.i(m.l)(t),this.force=r,this.dims=i.i(m.o)(t),this.events=[]}return h()(e,[{key:\"signal\",value:function(e,t){i.i(w.h)(e,t)&&this.events.push(arguments)}},{key:\"finish\",value:function(){for(var e=0;e<this.events.length;e++)w.d.apply(null,this.events[e])}}]),e}()},function(e,t,i){\"use strict\";function n(){o=!0}function r(){a=!0}i.d(t,\"b\",function(){return o}),i.d(t,\"a\",function(){return a}),t.d=n,t.c=r;var o=!1,a=!1},function(e,t,i){\"use strict\";function n(e){return e.text?i.i(s.a)(e.from.line+e.text.length-1,i.i(c.f)(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function r(e,t){if(i.i(s.b)(e,t.from)<0)return e;if(i.i(s.b)(e,t.to)<=0)return n(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,o=e.ch;return e.line==t.to.line&&(o+=n(t).ch-t.to.ch),i.i(s.a)(r,o)}function o(e,t){for(var n=[],o=0;o<e.sel.ranges.length;o++){var a=e.sel.ranges[o];n.push(new u.b(r(a.anchor,t),r(a.head,t)))}return i.i(u.c)(n,e.sel.primIndex)}function a(e,t,n){return e.line==t.line?i.i(s.a)(n.line,e.ch-t.ch+n.ch):i.i(s.a)(n.line+(e.line-t.line),e.ch)}function l(e,t,r){for(var o=[],l=i.i(s.a)(e.first,0),c=l,f=0;f<t.length;f++){var d=t[f],h=a(d.from,l,c),p=a(n(d),l,c);if(l=d.to,c=p,\"around\"==r){var v=e.sel.ranges[f],g=i.i(s.b)(v.head,v.anchor)<0;o[f]=new u.b(g?p:h,g?h:p)}else o[f]=new u.b(h,h)}return new u.a(o,e.sel.primIndex)}var s=i(3),c=i(0),u=i(9);t.a=n,t.b=o,t.c=l},function(e,t,i){\"use strict\";function n(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),d[e]=t}function r(e,t){h[e]=t}function o(e){if(\"string\"==typeof e&&h.hasOwnProperty(e))e=h[e];else if(e&&\"string\"==typeof e.name&&h.hasOwnProperty(e.name)){var t=h[e.name];\"string\"==typeof t&&(t={name:t}),e=i.i(f.r)(t,e),e.name=t.name}else{if(\"string\"==typeof e&&/^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(e))return o(\"application/xml\");if(\"string\"==typeof e&&/^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(e))return o(\"application/json\")}return\"string\"==typeof e?{name:e}:e||{name:\"null\"}}function a(e,t){t=o(t);var i=d[t.name];if(!i)return a(e,\"text/plain\");var n=i(e,t);if(p.hasOwnProperty(t.name)){var r=p[t.name];for(var l in r)r.hasOwnProperty(l)&&(n.hasOwnProperty(l)&&(n[\"_\"+l]=n[l]),n[l]=r[l])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var s in t.modeProps)n[s]=t.modeProps[s];return n}function l(e,t){var n=p.hasOwnProperty(e)?p[e]:p[e]={};i.i(f.p)(t,n)}function s(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var i={};for(var n in t){var r=t[n];r instanceof Array&&(r=r.concat([])),i[n]=r}return i}function c(e,t){for(var i=void 0;e.innerMode&&(i=e.innerMode(t))&&i.mode!=e;)t=i.state,e=i.mode;return i||{mode:e,state:t}}function u(e,t,i){return!e.startState||e.startState(t,i)}var f=i(0);i.d(t,\"c\",function(){return d}),i.d(t,\"d\",function(){return h}),t.a=n,t.b=r,t.e=o,t.f=a,i.d(t,\"g\",function(){return p}),t.h=l,t.i=s,t.k=c,t.j=u;var d={},h={},p={}},,,,,,function(e,t,i){\"use strict\";function n(e,t){e.doc.mode.startState&&e.doc.frontier<e.display.viewTo&&e.state.highlight.set(t,i.i(l.n)(r,e))}function r(e){var t=e.doc;if(t.frontier<t.first&&(t.frontier=t.first),!(t.frontier>=e.display.viewTo)){var r=+new Date+e.options.workTime,l=i.i(a.i)(t.mode,i.i(o.b)(e,t.frontier)),u=[];t.iter(t.frontier,Math.min(t.first+t.size,e.display.viewTo+500),function(s){if(t.frontier>=e.display.viewFrom){var c=s.styles,f=s.text.length>e.options.maxHighlightLength,d=i.i(o.c)(e,s,f?i.i(a.i)(t.mode,l):l,!0);s.styles=d.styles;var h=s.styleClasses,p=d.classes;p?s.styleClasses=p:h&&(s.styleClasses=null);for(var v=!c||c.length!=s.styles.length||h!=p&&(!h||!p||h.bgClass!=p.bgClass||h.textClass!=p.textClass),g=0;!v&&g<c.length;++g)v=c[g]!=s.styles[g];v&&u.push(t.frontier),s.stateAfter=f?l:i.i(a.i)(t.mode,l)}else s.text.length<=e.options.maxHighlightLength&&i.i(o.d)(e,s.text,l),s.stateAfter=t.frontier%5==0?i.i(a.i)(t.mode,l):null;if(++t.frontier,+new Date>r)return n(e,e.options.workDelay),!0}),u.length&&i.i(s.a)(e,function(){for(var t=0;t<u.length;t++)i.i(c.a)(e,u[t],\"text\")})}}var o=i(52),a=i(41),l=i(0),s=i(8),c=i(18);t.a=n},function(e,t,i){\"use strict\";function n(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=i.i(a.n)(t)-t.scroller.scrollLeft+e.doc.scrollLeft,o=t.gutters.offsetWidth,l=r+\"px\",s=0;s<n.length;s++)if(!n[s].hidden){e.options.fixedGutter&&(n[s].gutter&&(n[s].gutter.style.left=l),n[s].gutterBackground&&(n[s].gutterBackground.style.left=l));var c=n[s].alignable;if(c)for(var u=0;u<c.length;u++)c[u].style.left=l}e.options.fixedGutter&&(t.gutters.style.left=r+o+\"px\")}}function r(e){if(!e.options.lineNumbers)return!1;var t=e.doc,n=i.i(o.g)(e.options,t.first+t.size-1),r=e.display;if(n.length!=r.lineNumChars){var a=r.measure.appendChild(i.i(l.e)(\"div\",[i.i(l.e)(\"div\",n)],\"CodeMirror-linenumber CodeMirror-gutter-elt\")),c=a.firstChild.offsetWidth,u=a.offsetWidth-c;return r.lineGutter.style.width=\"\",r.lineNumInnerWidth=Math.max(c,r.lineGutter.offsetWidth-u)+1,r.lineNumWidth=r.lineNumInnerWidth+u,r.lineNumChars=r.lineNumInnerWidth?n.length:-1,r.lineGutter.style.width=r.lineNumWidth+\"px\",i.i(s.b)(e),!0}return!1}var o=i(4),a=i(6),l=i(1),s=i(38);t.a=n,t.b=r},function(e,t,i){\"use strict\";function n(e){for(var t=e.display,n=t.lineDiv.offsetTop,o=0;o<t.view.length;o++){var a=t.view[o],u=void 0;if(!a.hidden){if(c.b&&c.d<8){var f=a.node.offsetTop+a.node.offsetHeight;u=f-n,n=f}else{var d=a.node.getBoundingClientRect();u=d.bottom-d.top}var h=a.line.height-u;if(u<2&&(u=i.i(s.i)(t)),(h>.001||h<-.001)&&(i.i(l.b)(a.line,u),r(a.line),a.rest))for(var p=0;p<a.rest.length;p++)r(a.rest[p])}}}function r(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t)e.widgets[t].height=e.widgets[t].node.parentNode.offsetHeight}function o(e,t,n){var r=n&&null!=n.top?Math.max(0,n.top):e.scroller.scrollTop;r=Math.floor(r-i.i(s.f)(e));var o=n&&null!=n.bottom?n.bottom:r+e.wrapper.clientHeight,c=i.i(l.f)(t,r),u=i.i(l.f)(t,o);if(n&&n.ensure){var f=n.ensure.from.line,d=n.ensure.to.line;f<c?(c=f,u=i.i(l.f)(t,i.i(a.a)(i.i(l.d)(t,f))+e.wrapper.clientHeight)):Math.min(d,t.lastLine())>=u&&(c=i.i(l.f)(t,i.i(a.a)(i.i(l.d)(t,d))-e.wrapper.clientHeight),u=d)}return{from:c,to:Math.max(u,c+1)}}var a=i(7),l=i(4),s=i(6),c=i(5);t.b=n,t.a=o},function(e,t,i){\"use strict\";function n(e,t){var f=this;if(!(this instanceof n))return new n(e,t);this.options=t=t?i.i(x.p)(t):{},i.i(x.p)(T.b,t,!1),i.i(l.a)(t);var d=t.value;\"string\"==typeof d&&(d=new v.a(d,t.mode,null,t.lineSeparator,t.direction)),this.doc=d;var h=new n.inputStyles[t.inputStyle](this),p=this.display=new o.a(e,d,h);p.wrapper.CodeMirror=this,i.i(l.b)(this),i.i(M.a)(this),t.lineWrapping&&(this.display.wrapper.className+=\" CodeMirror-wrap\"),i.i(u.d)(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new x.o,keySeq:null,specialChars:null},t.autofocus&&!y.n&&p.input.focus(),y.b&&y.d<11&&setTimeout(function(){return f.display.input.reset(!0)},20),r(this),i.i(k.a)(),i.i(c.c)(this),this.curOp.forceUpdate=!0,i.i(g.e)(this,d),t.autofocus&&!y.n||this.hasFocus()?setTimeout(i.i(x.n)(a.b,this),20):i.i(a.c)(this);for(var m in T.c)T.c.hasOwnProperty(m)&&T.c[m](this,t[m],T.d);i.i(s.b)(this),t.finishInit&&t.finishInit(this);for(var b=0;b<_.length;++b)_[b](this);i.i(c.d)(this),y.g&&t.lineWrapping&&\"optimizelegibility\"==getComputedStyle(p.lineDiv).textRendering&&(p.lineDiv.style.textRendering=\"auto\")}function r(e){function t(){o.activeTouch&&(l=setTimeout(function(){return o.activeTouch=null},1e3),s=o.activeTouch,s.end=+new Date)}function n(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function r(e,t){if(null==t.left)return!0;var i=t.left-e.left,n=t.top-e.top;return i*i+n*n>400}var o=e.display;i.i(w.c)(o.scroller,\"mousedown\",i.i(c.b)(e,L.a)),y.b&&y.d<11?i.i(w.c)(o.scroller,\"dblclick\",i.i(c.b)(e,function(t){if(!i.i(w.k)(e,t)){var n=i.i(h.x)(e,t);if(n&&!i.i(L.b)(e,t)&&!i.i(p.b)(e.display,t)){i.i(w.e)(t);var r=e.findWordAt(n);i.i(b.g)(e.doc,r.anchor,r.head)}}})):i.i(w.c)(o.scroller,\"dblclick\",function(t){return i.i(w.k)(e,t)||i.i(w.e)(t)}),y.o||i.i(w.c)(o.scroller,\"contextmenu\",function(t){return i.i(L.c)(e,t)});var l=void 0,s={end:0};i.i(w.c)(o.scroller,\"touchstart\",function(t){if(!i.i(w.k)(e,t)&&!n(t)){o.input.ensurePolled(),clearTimeout(l);var r=+new Date;o.activeTouch={start:r,moved:!1,prev:r-s.end<=300?s:null},1==t.touches.length&&(o.activeTouch.left=t.touches[0].pageX,o.activeTouch.top=t.touches[0].pageY)}}),i.i(w.c)(o.scroller,\"touchmove\",function(){o.activeTouch&&(o.activeTouch.moved=!0)}),i.i(w.c)(o.scroller,\"touchend\",function(n){var a=o.activeTouch;if(a&&!i.i(p.b)(o,n)&&null!=a.left&&!a.moved&&new Date-a.start<300){var l=e.coordsChar(o.activeTouch,\"page\"),s=void 0;s=!a.prev||r(a,a.prev)?new m.b(l,l):!a.prev.prev||r(a,a.prev.prev)?e.findWordAt(l):new m.b(i.i(d.a)(l.line,0),i.i(d.c)(e.doc,i.i(d.a)(l.line+1,0))),e.setSelection(s.anchor,s.head),e.focus(),i.i(w.e)(n)}t()}),i.i(w.c)(o.scroller,\"touchcancel\",t),i.i(w.c)(o.scroller,\"scroll\",function(){o.scroller.clientHeight&&(i.i(f.b)(e,o.scroller.scrollTop),i.i(f.c)(e,o.scroller.scrollLeft,!0),i.i(w.d)(e,\"scroll\",e))}),i.i(w.c)(o.scroller,\"mousewheel\",function(t){return i.i(f.d)(e,t)}),i.i(w.c)(o.scroller,\"DOMMouseScroll\",function(t){return i.i(f.d)(e,t)}),i.i(w.c)(o.wrapper,\"scroll\",function(){return o.wrapper.scrollTop=o.wrapper.scrollLeft=0}),o.dragFunctions={enter:function(t){i.i(w.k)(e,t)||i.i(w.g)(t)},over:function(t){i.i(w.k)(e,t)||(i.i(C.a)(e,t),i.i(w.g)(t))},start:function(t){return i.i(C.b)(e,t)},drop:i.i(c.b)(e,C.c),leave:function(t){i.i(w.k)(e,t)||i.i(C.d)(e)}};var u=o.input.getField();i.i(w.c)(u,\"keyup\",function(t){return S.a.call(e,t)}),i.i(w.c)(u,\"keydown\",i.i(c.b)(e,S.b)),i.i(w.c)(u,\"keypress\",i.i(c.b)(e,S.c)),i.i(w.c)(u,\"focus\",function(t){return i.i(a.b)(e,t)}),i.i(w.c)(u,\"blur\",function(t){return i.i(a.c)(e,t)})}var o=i(135),a=i(35),l=i(87),s=i(48),c=i(8),u=i(37),f=i(36),d=i(3),h=i(6),p=i(22),v=i(65),g=i(31),m=i(9),b=i(14),y=i(5),w=i(2),x=i(0),C=i(136),k=i(138),S=i(91),L=i(142),M=i(93),T=i(92);t.a=n,n.defaults=T.b,n.optionHandlers=T.c,t.b=n;var _=[];n.defineInitHook=function(e){return _.push(e)}},function(e,t,i){\"use strict\";function n(e){var t=e.split(/-(?!$)/);e=t[t.length-1];for(var i=void 0,n=void 0,r=void 0,o=void 0,a=0;a<t.length-1;a++){var l=t[a];if(/^(cmd|meta|m)$/i.test(l))o=!0;else if(/^a(lt)?$/i.test(l))i=!0;else if(/^(c|ctrl|control)$/i.test(l))n=!0;else{if(!/^s(hift)?$/i.test(l))throw new Error(\"Unrecognized modifier name: \"+l);r=!0}}return i&&(e=\"Alt-\"+e),n&&(e=\"Ctrl-\"+e),o&&(e=\"Cmd-\"+e),r&&(e=\"Shift-\"+e),e}function r(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var o=e[r];if(/^(name|fallthrough|(de|at)tach)$/.test(r))continue;if(\"...\"==o){delete e[r];continue}for(var a=i.i(u.g)(r.split(\" \"),n),l=0;l<a.length;l++){var s=void 0,c=void 0;l==a.length-1?(c=a.join(\" \"),s=o):(c=a.slice(0,l+1).join(\" \"),s=\"...\");var f=t[c];if(f){if(f!=s)throw new Error(\"Inconsistent bindings for \"+c)}else t[c]=s}delete e[r]}for(var d in t)e[d]=t[d];return e}function o(e,t,i,n){t=s(t);var r=t.call?t.call(e,n):t[e];if(!1===r)return\"nothing\";if(\"...\"===r)return\"multi\";if(null!=r&&i(r))return\"handled\";if(t.fallthrough){if(\"[object Array]\"!=Object.prototype.toString.call(t.fallthrough))return o(e,t.fallthrough,i,n);for(var a=0;a<t.fallthrough.length;a++){var l=o(e,t.fallthrough[a],i,n);if(l)return l}}}function a(e){var t=\"string\"==typeof e?e:f.a[e.keyCode];return\"Ctrl\"==t||\"Alt\"==t||\"Shift\"==t||\"Mod\"==t}function l(e,t){if(c.k&&34==e.keyCode&&e.char)return!1;var i=f.a[e.keyCode],n=i;return null!=n&&!e.altGraphKey&&(e.altKey&&\"Alt\"!=i&&(n=\"Alt-\"+n),(c.m?e.metaKey:e.ctrlKey)&&\"Ctrl\"!=i&&(n=\"Ctrl-\"+n),(c.m?e.ctrlKey:e.metaKey)&&\"Cmd\"!=i&&(n=\"Cmd-\"+n),!t&&e.shiftKey&&\"Shift\"!=i&&(n=\"Shift-\"+n),n)}function s(e){return\"string\"==typeof e?d[e]:e}var c=i(5),u=i(0),f=i(95);i.d(t,\"a\",function(){return d}),t.e=r,t.d=o,t.c=a,t.b=l,t.f=s;var d={};d.basic={Left:\"goCharLeft\",Right:\"goCharRight\",Up:\"goLineUp\",Down:\"goLineDown\",End:\"goLineEnd\",Home:\"goLineStartSmart\",PageUp:\"goPageUp\",PageDown:\"goPageDown\",Delete:\"delCharAfter\",Backspace:\"delCharBefore\",\"Shift-Backspace\":\"delCharBefore\",Tab:\"defaultTab\",\"Shift-Tab\":\"indentAuto\",Enter:\"newlineAndIndent\",Insert:\"toggleOverwrite\",Esc:\"singleSelection\"},d.pcDefault={\"Ctrl-A\":\"selectAll\",\"Ctrl-D\":\"deleteLine\",\"Ctrl-Z\":\"undo\",\"Shift-Ctrl-Z\":\"redo\",\"Ctrl-Y\":\"redo\",\"Ctrl-Home\":\"goDocStart\",\"Ctrl-End\":\"goDocEnd\",\"Ctrl-Up\":\"goLineUp\",\"Ctrl-Down\":\"goLineDown\",\"Ctrl-Left\":\"goGroupLeft\",\"Ctrl-Right\":\"goGroupRight\",\"Alt-Left\":\"goLineStart\",\"Alt-Right\":\"goLineEnd\",\"Ctrl-Backspace\":\"delGroupBefore\",\"Ctrl-Delete\":\"delGroupAfter\",\"Ctrl-S\":\"save\",\"Ctrl-F\":\"find\",\"Ctrl-G\":\"findNext\",\"Shift-Ctrl-G\":\"findPrev\",\"Shift-Ctrl-F\":\"replace\",\"Shift-Ctrl-R\":\"replaceAll\",\"Ctrl-[\":\"indentLess\",\"Ctrl-]\":\"indentMore\",\"Ctrl-U\":\"undoSelection\",\"Shift-Ctrl-U\":\"redoSelection\",\"Alt-U\":\"redoSelection\",fallthrough:\"basic\"},d.emacsy={\"Ctrl-F\":\"goCharRight\",\"Ctrl-B\":\"goCharLeft\",\"Ctrl-P\":\"goLineUp\",\"Ctrl-N\":\"goLineDown\",\"Alt-F\":\"goWordRight\",\"Alt-B\":\"goWordLeft\",\"Ctrl-A\":\"goLineStart\",\"Ctrl-E\":\"goLineEnd\",\"Ctrl-V\":\"goPageDown\",\"Shift-Ctrl-V\":\"goPageUp\",\"Ctrl-D\":\"delCharAfter\",\"Ctrl-H\":\"delCharBefore\",\"Alt-D\":\"delWordAfter\",\"Alt-Backspace\":\"delWordBefore\",\"Ctrl-K\":\"killLine\",\"Ctrl-T\":\"transposeChars\",\"Ctrl-O\":\"openLine\"},d.macDefault={\"Cmd-A\":\"selectAll\",\"Cmd-D\":\"deleteLine\",\"Cmd-Z\":\"undo\",\"Shift-Cmd-Z\":\"redo\",\"Cmd-Y\":\"redo\",\"Cmd-Home\":\"goDocStart\",\"Cmd-Up\":\"goDocStart\",\"Cmd-End\":\"goDocEnd\",\"Cmd-Down\":\"goDocEnd\",\"Alt-Left\":\"goGroupLeft\",\"Alt-Right\":\"goGroupRight\",\"Cmd-Left\":\"goLineLeft\",\"Cmd-Right\":\"goLineRight\",\"Alt-Backspace\":\"delGroupBefore\",\"Ctrl-Alt-Backspace\":\"delGroupAfter\",\"Alt-Delete\":\"delGroupAfter\",\"Cmd-S\":\"save\",\"Cmd-F\":\"find\",\"Cmd-G\":\"findNext\",\"Shift-Cmd-G\":\"findPrev\",\"Cmd-Alt-F\":\"replace\",\"Shift-Cmd-Alt-F\":\"replaceAll\",\"Cmd-[\":\"indentLess\",\"Cmd-]\":\"indentMore\",\"Cmd-Backspace\":\"delWrappedLineLeft\",\"Cmd-Delete\":\"delWrappedLineRight\",\"Cmd-U\":\"undoSelection\",\"Shift-Cmd-U\":\"redoSelection\",\"Ctrl-Up\":\"goDocStart\",\"Ctrl-Down\":\"goDocEnd\",fallthrough:[\"basic\",\"emacsy\"]},d.default=c.c?d.macDefault:d.pcDefault},function(e,t,i){\"use strict\";function n(e,t,i,n){var r=[e.state.modeGen],o={};f(e,t.text,e.doc.mode,i,function(e,t){return r.push(e,t)},o,n);for(var a=0;a<e.state.overlays.length;++a)!function(i){var n=e.state.overlays[i],a=1,l=0;f(e,t.text,n.mode,!0,function(e,t){for(var i=a;l<e;){var o=r[a];o>e&&r.splice(a,1,e,r[a+1],o),a+=2,l=Math.min(e,o)}if(t)if(n.opaque)r.splice(i,a-i,e,\"overlay \"+t),a=i+2;else for(;i<a;i+=2){var s=r[i+1];r[i+1]=(s?s+\" \":\"\")+\"overlay \"+t}},o)}(a);return{styles:r,classes:o.bgClass||o.textClass?o:null}}function r(e,t,r){if(!t.styles||t.styles[0]!=e.state.modeGen){var a=o(e,i.i(g.a)(t)),l=n(e,t,t.text.length>e.options.maxHighlightLength?i.i(p.i)(e.doc.mode,a):a);t.stateAfter=a,t.styles=l.styles,l.classes?t.styleClasses=l.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.frontier&&e.doc.frontier++}return t.styles}function o(e,t,n){var r=e.doc,o=e.display;if(!r.mode.startState)return!0;var l=d(e,t,n),s=l>r.first&&i.i(g.d)(r,l-1).stateAfter;return s=s?i.i(p.i)(r.mode,s):i.i(p.j)(r.mode),r.iter(l,t,function(n){a(e,n.text,s);var c=l==t-1||l%5==0||l>=o.viewFrom&&l<o.viewTo;n.stateAfter=c?i.i(p.i)(r.mode,s):null,++l}),n&&(r.frontier=l),s}function a(e,t,i,n){var r=e.doc.mode,o=new v.a(t,e.options.tabSize);for(o.start=o.pos=n||0,\"\"==t&&l(r,i);!o.eol();)s(r,o,i),o.start=o.pos}function l(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var n=i.i(p.k)(e,t);return n.mode.blankLine?n.mode.blankLine(n.state):void 0}}function s(e,t,n,r){for(var o=0;o<10;o++){r&&(r[0]=i.i(p.k)(e,n).mode);var a=e.token(t,n);if(t.pos>t.start)return a}throw new Error(\"Mode \"+e.name+\" failed to advance stream.\")}function c(e,t,n,r){var a=function(e){return{start:h.start,end:h.pos,string:h.current(),type:u||null,state:e?i.i(p.i)(l.mode,d):d}},l=e.doc,c=l.mode,u=void 0;t=i.i(m.c)(l,t);var f=i.i(g.d)(l,t.line),d=o(e,t.line,n),h=new v.a(f.text,e.options.tabSize),b=void 0;for(r&&(b=[]);(r||h.pos<t.ch)&&!h.eol();)h.start=h.pos,u=s(c,h,d),r&&b.push(a(!0));return r?b:a()}function u(e,t){if(e)for(;;){var i=e.match(/(?:^|\\s+)line-(background-)?(\\S+)/);if(!i)break;e=e.slice(0,i.index)+e.slice(i.index+i[0].length);var n=i[1]?\"bgClass\":\"textClass\";null==t[n]?t[n]=i[2]:new RegExp(\"(?:^|s)\"+i[2]+\"(?:$|s)\").test(t[n])||(t[n]+=\" \"+i[2])}return e}function f(e,t,i,n,r,o,c){var f=i.flattenSpans;null==f&&(f=e.options.flattenSpans);var d=0,h=null,p=new v.a(t,e.options.tabSize),g=void 0,m=e.options.addModeClass&&[null];for(\"\"==t&&u(l(i,n),o);!p.eol();){if(p.pos>e.options.maxHighlightLength?(f=!1,c&&a(e,t,n,p.pos),p.pos=t.length,g=null):g=u(s(i,p,n,m),o),m){var b=m[0].name;b&&(g=\"m-\"+(g?b+\" \"+g:b))}if(!f||h!=g){for(;d<p.start;)d=Math.min(p.start,d+5e3),r(d,h);h=g}p.start=p.pos}for(;d<p.pos;){var y=Math.min(p.pos,d+5e3);r(y,h),d=y}}function d(e,t,n){for(var r=void 0,o=void 0,a=e.doc,l=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=a.first)return a.first;var c=i.i(g.d)(a,s-1);if(c.stateAfter&&(!n||s<=a.frontier))return s;var u=i.i(h.b)(c.text,null,e.options.tabSize);(null==o||r>u)&&(o=s-1,r=u)}return o}var h=i(0),p=i(41),v=i(98),g=i(4),m=i(3);t.c=n,t.a=r,t.b=o,t.d=a,t.e=c},function(e,t,i){\"use strict\";function n(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function r(e,t){var n={from:i.i(g.e)(t.from),to:i.i(x.a)(t),text:i.i(b.e)(e,t.from,t.to)};return f(e,n,t.from.line,t.to.line+1),i.i(C.a)(e,function(e){return f(e,n,t.from.line,t.to.line+1)},!0),n}function o(e){for(;e.length;){if(!i.i(w.f)(e).ranges)break;e.pop()}}function a(e,t){return t?(o(e.done),i.i(w.f)(e.done)):e.done.length&&!i.i(w.f)(e.done).ranges?i.i(w.f)(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),i.i(w.f)(e.done)):void 0}function l(e,t,n,o){var l=e.history;l.undone.length=0;var s=+new Date,c=void 0,f=void 0;if((l.lastOp==o||l.lastOrigin==t.origin&&t.origin&&(\"+\"==t.origin.charAt(0)&&e.cm&&l.lastModTime>s-e.cm.options.historyEventDelay||\"*\"==t.origin.charAt(0)))&&(c=a(l,l.lastOp==o)))f=i.i(w.f)(c.changes),0==i.i(g.b)(t.from,t.to)&&0==i.i(g.b)(t.from,f.to)?f.to=i.i(x.a)(t):c.changes.push(r(e,t));else{var d=i.i(w.f)(l.done);for(d&&d.ranges||u(e.sel,l.done),c={changes:[r(e,t)],generation:l.generation},l.done.push(c);l.done.length>l.undoDepth;)l.done.shift(),l.done[0].ranges||l.done.shift()}l.done.push(n),l.generation=++l.maxGeneration,l.lastModTime=l.lastSelTime=s,l.lastOp=l.lastSelOp=o,l.lastOrigin=l.lastSelOrigin=t.origin,f||i.i(y.d)(e,\"historyAdded\")}function s(e,t,i,n){var r=t.charAt(0);return\"*\"==r||\"+\"==r&&i.ranges.length==n.ranges.length&&i.somethingSelected()==n.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}function c(e,t,n,r){var a=e.history,l=r&&r.origin;n==a.lastSelOp||l&&a.lastSelOrigin==l&&(a.lastModTime==a.lastSelTime&&a.lastOrigin==l||s(e,l,i.i(w.f)(a.done),t))?a.done[a.done.length-1]=t:u(t,a.done),a.lastSelTime=+new Date,a.lastSelOrigin=l,a.lastSelOp=n,r&&!1!==r.clearRedo&&o(a.undone)}function u(e,t){var n=i.i(w.f)(t);n&&n.ranges&&n.equals(e)||t.push(e)}function f(e,t,i,n){var r=t[\"spans_\"+e.id],o=0;e.iter(Math.max(e.first,i),Math.min(e.first+e.size,n),function(i){i.markedSpans&&((r||(r=t[\"spans_\"+e.id]={}))[o]=i.markedSpans),++o})}function d(e){if(!e)return null;for(var t=void 0,i=0;i<e.length;++i)e[i].marker.explicitlyCleared?t||(t=e.slice(0,i)):t&&t.push(e[i]);return t?t.length?t:null:e}function h(e,t){var i=t[\"spans_\"+e.id];if(!i)return null;for(var n=[],r=0;r<t.text.length;++r)n.push(d(i[r]));return n}function p(e,t){var n=h(e,t),r=i.i(m.d)(e,t);if(!n)return r;if(!r)return n;for(var o=0;o<n.length;++o){var a=n[o],l=r[o];if(a&&l)e:for(var s=0;s<l.length;++s){for(var c=l[s],u=0;u<a.length;++u)if(a[u].marker==c.marker)continue e;a.push(c)}else l&&(n[o]=l)}return n}function v(e,t,n){for(var r=[],o=0;o<e.length;++o){var a=e[o];if(a.ranges)r.push(n?k.a.prototype.deepCopy.call(a):a);else{var l=a.changes,s=[];r.push({changes:s});for(var c=0;c<l.length;++c){var u=l[c],f=void 0;if(s.push({from:u.from,to:u.to,text:u.text}),t)for(var d in u)(f=d.match(/^spans_(\\d+)$/))&&i.i(w.a)(t,Number(f[1]))>-1&&(i.i(w.f)(s)[d]=u[d],delete u[d])}}}return r}var g=i(3),m=i(7),b=i(4),y=i(2),w=i(0),x=i(40),C=i(31),k=i(9);t.f=n,t.c=r,t.a=l,t.e=c,t.b=u,t.d=p,t.g=v},,,,,,,,,function(e,t,i){\"use strict\";function n(e,t){var n=i.i(d.d)(e.doc,t),r=i.i(f.e)(n);return r!=n&&(t=i.i(d.a)(r)),i.i(c.b)(!0,e,r,t,1)}function r(e,t){var n=i.i(d.d)(e.doc,t),r=i.i(f.t)(n);return r!=n&&(t=i.i(d.a)(r)),i.i(c.b)(!0,e,n,t,-1)}function o(e,t){var r=n(e,t.line),o=i.i(d.d)(e.doc,r.line),a=i.i(g.a)(o,e.doc.direction);if(!a||0==a[0].level){var l=Math.max(0,o.text.search(/\\S/)),s=t.line==r.line&&t.ch<=l&&t.ch;return i.i(u.a)(r.line,s?0:l,r.sticky)}return r}var a=i(90),l=i(8),s=i(19),c=i(64),u=i(3),f=i(7),d=i(4),h=i(9),p=i(14),v=i(0),g=i(32);i.d(t,\"a\",function(){return m});var m={selectAll:p.d,singleSelection:function(e){return e.setSelection(e.getCursor(\"anchor\"),e.getCursor(\"head\"),v.h)},killLine:function(e){return i.i(a.a)(e,function(t){if(t.empty()){var n=i.i(d.d)(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line<e.lastLine()?{from:t.head,to:i.i(u.a)(t.head.line+1,0)}:{from:t.head,to:i.i(u.a)(t.head.line,n)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){return i.i(a.a)(e,function(t){return{from:i.i(u.a)(t.from().line,0),to:i.i(u.c)(e.doc,i.i(u.a)(t.to().line+1,0))}})},delLineLeft:function(e){return i.i(a.a)(e,function(e){return{from:i.i(u.a)(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){return i.i(a.a)(e,function(t){var i=e.charCoords(t.head,\"div\").top+5;return{from:e.coordsChar({left:0,top:i},\"div\"),to:t.from()}})},delWrappedLineRight:function(e){return i.i(a.a)(e,function(t){var i=e.charCoords(t.head,\"div\").top+5,n=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:i},\"div\");return{from:t.from(),to:n}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(i.i(u.a)(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(i.i(u.a)(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy(function(t){return n(e,t.head.line)},{origin:\"+move\",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy(function(t){return o(e,t.head)},{origin:\"+move\",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy(function(t){return r(e,t.head.line)},{origin:\"+move\",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy(function(t){var i=e.charCoords(t.head,\"div\").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:i},\"div\")},v.q)},goLineLeft:function(e){return e.extendSelectionsBy(function(t){var i=e.charCoords(t.head,\"div\").top+5;return e.coordsChar({left:0,top:i},\"div\")},v.q)},goLineLeftSmart:function(e){return e.extendSelectionsBy(function(t){var i=e.charCoords(t.head,\"div\").top+5,n=e.coordsChar({left:0,top:i},\"div\");return n.ch<e.getLine(n.line).search(/\\S/)?o(e,t.head):n},v.q)},goLineUp:function(e){return e.moveV(-1,\"line\")},goLineDown:function(e){return e.moveV(1,\"line\")},goPageUp:function(e){return e.moveV(-1,\"page\")},goPageDown:function(e){return e.moveV(1,\"page\")},goCharLeft:function(e){return e.moveH(-1,\"char\")},goCharRight:function(e){return e.moveH(1,\"char\")},goColumnLeft:function(e){return e.moveH(-1,\"column\")},goColumnRight:function(e){return e.moveH(1,\"column\")},goWordLeft:function(e){return e.moveH(-1,\"word\")},goGroupRight:function(e){return e.moveH(1,\"group\")},goGroupLeft:function(e){return e.moveH(-1,\"group\")},goWordRight:function(e){return e.moveH(1,\"word\")},delCharBefore:function(e){return e.deleteH(-1,\"char\")},delCharAfter:function(e){return e.deleteH(1,\"char\")},delWordBefore:function(e){return e.deleteH(-1,\"word\")},delWordAfter:function(e){return e.deleteH(1,\"word\")},delGroupBefore:function(e){return e.deleteH(-1,\"group\")},delGroupAfter:function(e){return e.deleteH(1,\"group\")},indentAuto:function(e){return e.indentSelection(\"smart\")},indentMore:function(e){return e.indentSelection(\"add\")},indentLess:function(e){return e.indentSelection(\"subtract\")},insertTab:function(e){return e.replaceSelection(\"\\t\")},insertSoftTab:function(e){for(var t=[],n=e.listSelections(),r=e.options.tabSize,o=0;o<n.length;o++){var a=n[o].from(),l=i.i(v.b)(e.getLine(a.line),a.ch,r);t.push(i.i(v.m)(r-l%r))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection(\"add\"):e.execCommand(\"insertTab\")},transposeChars:function(e){return i.i(l.a)(e,function(){for(var t=e.listSelections(),n=[],r=0;r<t.length;r++)if(t[r].empty()){var o=t[r].head,a=i.i(d.d)(e.doc,o.line).text;if(a)if(o.ch==a.length&&(o=new u.a(o.line,o.ch-1)),o.ch>0)o=new u.a(o.line,o.ch+1),e.replaceRange(a.charAt(o.ch-1)+a.charAt(o.ch-2),i.i(u.a)(o.line,o.ch-2),o,\"+transpose\");else if(o.line>e.doc.first){var l=i.i(d.d)(e.doc,o.line-1).text;l&&(o=new u.a(o.line,1),e.replaceRange(a.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),i.i(u.a)(o.line-1,l.length-1),o,\"+transpose\"))}n.push(new h.b(o,o))}e.setSelections(n)})},newlineAndIndent:function(e){return i.i(l.a)(e,function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,\"+input\");t=e.listSelections();for(var r=0;r<t.length;r++)e.indentLine(t[r].from().line,null,!0);i.i(s.b)(e)})},openLine:function(e){return e.replaceSelection(\"\\n\",\"start\")},toggleOverwrite:function(e){return e.toggleOverwrite()}}},function(e,t,i){\"use strict\";function n(e){x=e}function r(e,t,n,r,o){var l=e.doc;e.display.shift=!1,r||(r=l.sel);var s=e.state.pasteIncoming||\"paste\"==o,c=i.i(y.a)(t),u=null;if(s&&r.ranges.length>1)if(x&&x.text.join(\"\\n\")==t){if(r.ranges.length%x.text.length==0){u=[];for(var v=0;v<x.text.length;v++)u.push(l.splitLines(x.text[v]))}}else c.length==r.ranges.length&&(u=i.i(m.g)(c,function(e){return[e]}));for(var g=void 0,w=r.ranges.length-1;w>=0;w--){var C=r.ranges[w],k=C.from(),S=C.to();C.empty()&&(n&&n>0?k=i.i(d.a)(k.line,k.ch-n):e.state.overwrite&&!s?S=i.i(d.a)(S.line,Math.min(i.i(h.d)(l,S.line).text.length,S.ch+i.i(m.f)(c).length)):x&&x.lineWise&&x.text.join(\"\\n\")==t&&(k=S=i.i(d.a)(k.line,0))),g=e.curOp.updateInput;var L={from:k,to:S,text:u?u[w%u.length]:c,origin:o||(s?\"paste\":e.state.cutIncoming?\"cut\":\"+input\")};i.i(p.c)(e.doc,L),i.i(b.a)(e,\"inputRead\",e,L)}t&&!s&&a(e,t),i.i(f.b)(e),e.curOp.updateInput=g,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function o(e,t){var n=e.clipboardData&&e.clipboardData.getData(\"Text\");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||i.i(u.a)(t,function(){return r(t,n,0,null,\"paste\")}),!0}function a(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var o=n.ranges[r];if(!(o.head.ch>100||r&&n.ranges[r-1].head.line==o.head.line)){var a=e.getModeAt(o.head),l=!1;if(a.electricChars){for(var s=0;s<a.electricChars.length;s++)if(t.indexOf(a.electricChars.charAt(s))>-1){l=i.i(w.a)(e,o.head.line,\"smart\");break}}else a.electricInput&&a.electricInput.test(i.i(h.d)(e.doc,o.head.line).text.slice(0,o.head.ch))&&(l=i.i(w.a)(e,o.head.line,\"smart\"));l&&i.i(b.a)(e,\"electricInput\",e,o.head.line)}}}function l(e){for(var t=[],n=[],r=0;r<e.doc.sel.ranges.length;r++){var o=e.doc.sel.ranges[r].head.line,a={anchor:i.i(d.a)(o,0),head:i.i(d.a)(o+1,0)};n.push(a),t.push(e.getRange(a.anchor,a.head))}return{text:t,ranges:n}}function s(e,t){e.setAttribute(\"autocorrect\",\"off\"),e.setAttribute(\"autocapitalize\",\"off\"),e.setAttribute(\"spellcheck\",!!t)}function c(){var e=i.i(g.e)(\"textarea\",null,null,\"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\"),t=i.i(g.e)(\"div\",[e],null,\"overflow: hidden; position: relative; width: 3px; height: 0px;\");return v.g?e.style.width=\"1000px\":e.setAttribute(\"wrap\",\"off\"),v.a&&(e.style.border=\"1px solid black\"),s(e),t}var u=i(8),f=i(19),d=i(3),h=i(4),p=i(23),v=i(5),g=i(1),m=i(0),b=i(15),y=i(24),w=i(94);i.d(t,\"e\",function(){return x}),t.c=n,t.g=r,t.b=o,t.h=a,t.d=l,t.a=s,t.f=c;var x=null},function(e,t,i){\"use strict\";function n(e,t,n){var r=i.i(u.l)(e.text,t+n,n);return r<0||r>e.text.length?null:r}function r(e,t,i){var r=n(e,t.ch,i);return null==r?null:new l.a(t.line,r,i<0?\"after\":\"before\")}function o(e,t,r,o,a){if(e){var f=i.i(c.a)(r,t.doc.direction);if(f){var d=a<0?i.i(u.f)(f):f[0],h=a<0==(1==d.level),p=h?\"after\":\"before\",v=void 0;if(d.level>0){var g=i.i(s.c)(t,r);v=a<0?r.text.length-1:0;var m=i.i(s.d)(t,g,v).top;v=i.i(u.k)(function(e){return i.i(s.d)(t,g,e).top==m},a<0==(1==d.level)?d.from:d.to-1,v),\"before\"==p&&(v=n(r,v,1,!0))}else v=a<0?d.to:d.from;return new l.a(o,v,p)}}return new l.a(o,a<0?r.text.length:0,a<0?\"before\":\"after\")}function a(e,t,o,a){var u=i.i(c.a)(t,e.doc.direction);if(!u)return r(t,o,a);o.ch>=t.text.length?(o.ch=t.text.length,o.sticky=\"before\"):o.ch<=0&&(o.ch=0,o.sticky=\"after\");var f=i.i(c.b)(u,o.ch,o.sticky),d=u[f];if(\"ltr\"==e.doc.direction&&d.level%2==0&&(a>0?d.to>o.ch:d.from<o.ch))return r(t,o,a);var h=function(e,i){return n(t,e instanceof l.a?e.ch:e,i)},p=void 0,v=function(n){return e.options.lineWrapping?(p=p||i.i(s.c)(e,t),i.i(s.e)(e,t,p,n)):{begin:0,end:t.text.length}},g=v(\"before\"==o.sticky?h(o,-1):o.ch);if(\"rtl\"==e.doc.direction||1==d.level){var m=1==d.level==a<0,b=h(o,m?1:-1);if(null!=b&&(m?b<=d.to&&b<=g.end:b>=d.from&&b>=g.begin)){var y=m?\"before\":\"after\";return new l.a(o.line,b,y)}}var w=function(e,t,i){for(var n=function(e,t){return t?new l.a(o.line,h(e,1),\"before\"):new l.a(o.line,e,\"after\")};e>=0&&e<u.length;e+=t){var r=u[e],a=t>0==(1!=r.level),s=a?i.begin:h(i.end,-1);if(r.from<=s&&s<r.to)return n(s,a);if(s=a?r.from:h(r.to,-1),i.begin<=s&&s<i.end)return n(s,a)}},x=w(f+a,a,g);if(x)return x;var C=a>0?g.end:h(g.begin,-1);return null==C||a>0&&C==t.text.length||!(x=w(a>0?0:u.length-1,a,v(C)))?null:x}var l=i(3),s=i(6),c=i(32),u=i(0);t.c=r,t.b=o,t.a=a},function(e,t,i){\"use strict\";var n=i(50),r=i(8),o=i(21),a=i(3),l=i(7),s=i(4),c=i(1),u=i(24),f=i(0),d=i(19),h=i(23),p=i(40),v=i(145),g=i(31),m=i(53),b=i(96),y=i(97),w=i(9),x=i(14),C=0,k=function e(t,n,r,l,s){if(!(this instanceof e))return new e(t,n,r,l,s);null==r&&(r=0),v.a.call(this,[new v.b([new o.a(\"\",null)])]),this.first=r,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.frontier=r;var c=i.i(a.a)(r,0);this.sel=i.i(w.d)(c),this.history=new m.f(null),this.id=++C,this.modeOption=n,this.lineSep=l,this.direction=\"rtl\"==s?\"rtl\":\"ltr\",this.extend=!1,\"string\"==typeof t&&(t=this.splitLines(t)),i.i(g.b)(this,{from:c,to:c,text:t}),i.i(x.a)(this,i.i(w.d)(c),f.h)};k.prototype=i.i(f.r)(v.a.prototype,{constructor:k,iter:function(e,t,i){i?this.iterN(e-this.first,t-e,i):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var i=0,n=0;n<t.length;++n)i+=t[n].height;this.insertInner(e-this.first,t,i)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=i.i(s.h)(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:i.i(r.e)(function(e){var t=i.i(a.a)(this.first,0),n=this.first+this.size-1;i.i(h.c)(this,{from:t,to:i.i(a.a)(n,i.i(s.d)(this,n).text.length),text:this.splitLines(e),origin:\"setValue\",full:!0},!0),this.cm&&this.cm.scrollTo(0,0),i.i(x.a)(this,i.i(w.d)(t),f.h)}),replaceRange:function(e,t,n,r){t=i.i(a.c)(this,t),n=n?i.i(a.c)(this,n):t,i.i(h.b)(this,e,t,n,r)},getRange:function(e,t,n){var r=i.i(s.e)(this,i.i(a.c)(this,e),i.i(a.c)(this,t));return!1===n?r:r.join(n||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(i.i(s.c)(this,e))return i.i(s.d)(this,e)},getLineNumber:function(e){return i.i(s.a)(e)},getLineHandleVisualStart:function(e){return\"number\"==typeof e&&(e=i.i(s.d)(this,e)),i.i(l.e)(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return i.i(a.c)(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||\"head\"==e?t.head:\"anchor\"==e?t.anchor:\"end\"==e||\"to\"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:i.i(r.e)(function(e,t,n){i.i(x.f)(this,i.i(a.c)(this,\"number\"==typeof e?i.i(a.a)(e,t||0):e),null,n)}),setSelection:i.i(r.e)(function(e,t,n){i.i(x.f)(this,i.i(a.c)(this,e),i.i(a.c)(this,t||e),n)}),extendSelection:i.i(r.e)(function(e,t,n){i.i(x.g)(this,i.i(a.c)(this,e),t&&i.i(a.c)(this,t),n)}),extendSelections:i.i(r.e)(function(e,t){i.i(x.h)(this,i.i(a.i)(this,e),t)}),extendSelectionsBy:i.i(r.e)(function(e,t){var n=i.i(f.g)(this.sel.ranges,e);i.i(x.h)(this,i.i(a.i)(this,n),t)}),setSelections:i.i(r.e)(function(e,t,n){if(e.length){for(var r=[],o=0;o<e.length;o++)r[o]=new w.b(i.i(a.c)(this,e[o].anchor),i.i(a.c)(this,e[o].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),i.i(x.a)(this,i.i(w.c)(r,t),n)}}),addSelection:i.i(r.e)(function(e,t,n){var r=this.sel.ranges.slice(0);r.push(new w.b(i.i(a.c)(this,e),i.i(a.c)(this,t||e))),i.i(x.a)(this,i.i(w.c)(r,r.length-1),n)}),getSelection:function(e){for(var t=this.sel.ranges,n=void 0,r=0;r<t.length;r++){var o=i.i(s.e)(this,t[r].from(),t[r].to());n=n?n.concat(o):o}return!1===e?n:n.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],n=this.sel.ranges,r=0;r<n.length;r++){var o=i.i(s.e)(this,n[r].from(),n[r].to());!1!==e&&(o=o.join(e||this.lineSeparator())),t[r]=o}return t},replaceSelection:function(e,t,i){for(var n=[],r=0;r<this.sel.ranges.length;r++)n[r]=e;this.replaceSelections(n,t,i||\"+input\")},replaceSelections:i.i(r.e)(function(e,t,n){for(var r=[],o=this.sel,a=0;a<o.ranges.length;a++){var l=o.ranges[a];r[a]={from:l.from(),to:l.to(),text:this.splitLines(e[a]),origin:n}}for(var s=t&&\"end\"!=t&&i.i(p.c)(this,r,t),c=r.length-1;c>=0;c--)i.i(h.c)(this,r[c]);s?i.i(x.i)(this,s):this.cm&&i.i(d.b)(this.cm)}),undo:i.i(r.e)(function(){i.i(h.d)(this,\"undo\")}),redo:i.i(r.e)(function(){i.i(h.d)(this,\"redo\")}),undoSelection:i.i(r.e)(function(){i.i(h.d)(this,\"undo\",!0)}),redoSelection:i.i(r.e)(function(){i.i(h.d)(this,\"redo\",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,i=0,n=0;n<e.done.length;n++)e.done[n].ranges||++t;for(var r=0;r<e.undone.length;r++)e.undone[r].ranges||++i;return{undo:t,redo:i}},clearHistory:function(){this.history=new m.f(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:i.i(m.g)(this.history.done),undone:i.i(m.g)(this.history.undone)}},setHistory:function(e){var t=this.history=new m.f(this.history.maxGeneration);t.done=i.i(m.g)(e.done.slice(0),null,!0),t.undone=i.i(m.g)(e.undone.slice(0),null,!0)},setGutterMarker:i.i(r.e)(function(e,t,n){return i.i(h.a)(this,e,\"gutter\",function(e){var r=e.gutterMarkers||(e.gutterMarkers={});return r[t]=n,!n&&i.i(f.s)(r)&&(e.gutterMarkers=null),!0})}),clearGutter:i.i(r.e)(function(e){var t=this;this.iter(function(n){n.gutterMarkers&&n.gutterMarkers[e]&&i.i(h.a)(t,n,\"gutter\",function(){return n.gutterMarkers[e]=null,i.i(f.s)(n.gutterMarkers)&&(n.gutterMarkers=null),!0})})}),lineInfo:function(e){var t=void 0;if(\"number\"==typeof e){if(!i.i(s.c)(this,e))return null;if(t=e,!(e=i.i(s.d)(this,e)))return null}else if(null==(t=i.i(s.a)(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:i.i(r.e)(function(e,t,n){return i.i(h.a)(this,e,\"gutter\"==t?\"gutter\":\"class\",function(e){var r=\"text\"==t?\"textClass\":\"background\"==t?\"bgClass\":\"gutter\"==t?\"gutterClass\":\"wrapClass\";if(e[r]){if(i.i(c.l)(n).test(e[r]))return!1;e[r]+=\" \"+n}else e[r]=n;return!0})}),removeLineClass:i.i(r.e)(function(e,t,n){return i.i(h.a)(this,e,\"gutter\"==t?\"gutter\":\"class\",function(e){var r=\"text\"==t?\"textClass\":\"background\"==t?\"bgClass\":\"gutter\"==t?\"gutterClass\":\"wrapClass\",o=e[r];if(!o)return!1;if(null==n)e[r]=null;else{var a=o.match(i.i(c.l)(n));if(!a)return!1;var l=a.index+a[0].length;e[r]=o.slice(0,a.index)+(a.index&&l!=o.length?\" \":\"\")+o.slice(l)||null}return!0})}),addLineWidget:i.i(r.e)(function(e,t,n){return i.i(b.b)(this,e,t,n)}),removeLineWidget:function(e){e.clear()},markText:function(e,t,n){return i.i(y.c)(this,i.i(a.c)(this,e),i.i(a.c)(this,t),n,n&&n.type||\"range\")},setBookmark:function(e,t){var n={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=i.i(a.c)(this,e),i.i(y.c)(this,e,e,n,\"bookmark\")},findMarksAt:function(e){e=i.i(a.c)(this,e);var t=[],n=i.i(s.d)(this,e.line).markedSpans;if(n)for(var r=0;r<n.length;++r){var o=n[r];(null==o.from||o.from<=e.ch)&&(null==o.to||o.to>=e.ch)&&t.push(o.marker.parent||o.marker)}return t},findMarks:function(e,t,n){e=i.i(a.c)(this,e),t=i.i(a.c)(this,t);var r=[],o=e.line;return this.iter(e.line,t.line+1,function(i){var a=i.markedSpans;if(a)for(var l=0;l<a.length;l++){var s=a[l];null!=s.to&&o==e.line&&e.ch>=s.to||null==s.from&&o!=e.line||null!=s.from&&o==t.line&&s.from>=t.ch||n&&!n(s.marker)||r.push(s.marker.parent||s.marker)}++o}),r},getAllMarks:function(){var e=[];return this.iter(function(t){var i=t.markedSpans;if(i)for(var n=0;n<i.length;++n)null!=i[n].from&&e.push(i[n].marker)}),e},posFromIndex:function(e){var t=void 0,n=this.first,r=this.lineSeparator().length;return this.iter(function(i){var o=i.text.length+r;if(o>e)return t=e,!0;e-=o,++n}),i.i(a.c)(this,i.i(a.a)(n,t))},indexFromPos:function(e){e=i.i(a.c)(this,e);var t=e.ch;if(e.line<this.first||e.ch<0)return 0;var n=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+n}),t},copy:function(e){var t=new k(i.i(s.h)(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,n=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<n&&(n=e.to);var r=new k(i.i(s.h)(this,t,n),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(r.history=this.history),(this.linked||(this.linked=[])).push({doc:r,sharedHist:e.sharedHist}),r.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],i.i(y.d)(r,i.i(y.e)(this)),r},unlinkDoc:function(e){if(e instanceof n.b&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){var r=this.linked[t];if(r.doc==e){this.linked.splice(t,1),e.unlinkDoc(this),i.i(y.f)(i.i(y.e)(this));break}}if(e.history==this.history){var o=[e.id];i.i(g.a)(e,function(e){return o.push(e.id)},!0),e.history=new m.f(null),e.history.done=i.i(m.g)(this.history.done,o),e.history.undone=i.i(m.g)(this.history.undone,o)}},iterLinkedDocs:function(e){i.i(g.a)(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):i.i(u.a)(e)},lineSeparator:function(){return this.lineSep||\"\\n\"},setDirection:i.i(r.e)(function(e){\"rtl\"!=e&&(e=\"ltr\"),e!=this.direction&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&i.i(g.d)(this.cm))})}),k.prototype.eachLine=k.prototype.iter,t.a=k},,,,,,,,,,,,,,function(e,t,i){i(211);var n=i(34)(i(155),i(225),null,null);e.exports=n.exports},,,,,,,function(e,t,i){\"use strict\";(function(e){Object.defineProperty(t,\"__esModule\",{value:!0});var n=i(140);e.CodeMirror=n.a,t.default=n.a}).call(t,i(46))},function(e,t,i){\"use strict\";function n(e){var t=e.display.gutters,n=e.options.gutters;i.i(o.g)(t);for(var r=0;r<n.length;++r){var a=n[r],s=t.appendChild(i.i(o.e)(\"div\",null,\"CodeMirror-gutter \"+a));\"CodeMirror-linenumbers\"==a&&(e.display.lineGutter=s,s.style.width=(e.display.lineNumWidth||1)+\"px\")}t.style.display=r?\"\":\"none\",i.i(l.b)(e)}function r(e){var t=i.i(a.a)(e.gutters,\"CodeMirror-linenumbers\");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat([\"CodeMirror-linenumbers\"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}var o=i(1),a=i(0),l=i(38);t.b=n,t.a=r},function(e,t,i){\"use strict\";function n(e){e.doc.mode=i.i(o.f)(e.options,e.doc.modeOption),r(e)}function r(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.frontier=e.doc.first,i.i(a.a)(e,100),e.state.modeGen++,e.curOp&&i.i(l.b)(e)}var o=i(41),a=i(47),l=i(18);t.a=n,t.b=r},function(e,t,i){\"use strict\";function n(e,t,i,n){for(var r=0;r<t.changes.length;r++){var o=t.changes[r];\"text\"==o?l(e,t):\"gutter\"==o?c(e,t,i,n):\"class\"==o?s(e,t):\"widget\"==o&&u(e,t,n)}t.changes=null}function r(e){return e.node==e.text&&(e.node=i.i(b.e)(\"div\",null,null,\"position: relative\"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),m.b&&m.d<8&&(e.node.style.zIndex=2)),e.node}function o(e,t){var n=t.bgClass?t.bgClass+\" \"+(t.line.bgClass||\"\"):t.line.bgClass;if(n&&(n+=\" CodeMirror-linebackground\"),t.background)n?t.background.className=n:(t.background.parentNode.removeChild(t.background),t.background=null);else if(n){var o=r(t);t.background=o.insertBefore(i.i(b.e)(\"div\",null,n),o.firstChild),e.display.input.setUneditable(t.background)}}function a(e,t){var n=e.display.externalMeasured;return n&&n.line==t.line?(e.display.externalMeasured=null,t.measure=n.measure,n.built):i.i(v.d)(e,t)}function l(e,t){var i=t.text.className,n=a(e,t);t.text==t.node&&(t.node=n.pre),t.text.parentNode.replaceChild(n.pre,t.text),t.text=n.pre,n.bgClass!=t.bgClass||n.textClass!=t.textClass?(t.bgClass=n.bgClass,t.textClass=n.textClass,s(e,t)):i&&(t.text.className=i)}function s(e,t){o(e,t),t.line.wrapClass?r(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className=\"\");var i=t.textClass?t.textClass+\" \"+(t.line.textClass||\"\"):t.line.textClass;t.text.className=i||\"\"}function c(e,t,n,o){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var a=r(t);t.gutterBackground=i.i(b.e)(\"div\",null,\"CodeMirror-gutter-background \"+t.line.gutterClass,\"left: \"+(e.options.fixedGutter?o.fixedPos:-o.gutterTotalWidth)+\"px; width: \"+o.gutterTotalWidth+\"px\"),e.display.input.setUneditable(t.gutterBackground),a.insertBefore(t.gutterBackground,t.text)}var l=t.line.gutterMarkers;if(e.options.lineNumbers||l){var s=r(t),c=t.gutter=i.i(b.e)(\"div\",null,\"CodeMirror-gutter-wrapper\",\"left: \"+(e.options.fixedGutter?o.fixedPos:-o.gutterTotalWidth)+\"px\");if(e.display.input.setUneditable(c),s.insertBefore(c,t.text),t.line.gutterClass&&(c.className+=\" \"+t.line.gutterClass),!e.options.lineNumbers||l&&l[\"CodeMirror-linenumbers\"]||(t.lineNumber=c.appendChild(i.i(b.e)(\"div\",i.i(g.g)(e.options,n),\"CodeMirror-linenumber CodeMirror-gutter-elt\",\"left: \"+o.gutterLeft[\"CodeMirror-linenumbers\"]+\"px; width: \"+e.display.lineNumInnerWidth+\"px\"))),l)for(var u=0;u<e.options.gutters.length;++u){var f=e.options.gutters[u],d=l.hasOwnProperty(f)&&l[f];d&&c.appendChild(i.i(b.e)(\"div\",[d],\"CodeMirror-gutter-elt\",\"left: \"+o.gutterLeft[f]+\"px; width: \"+o.gutterWidth[f]+\"px\"))}}}function u(e,t,i){t.alignable&&(t.alignable=null);for(var n,r=t.node.firstChild;r;r=n)n=r.nextSibling,\"CodeMirror-linewidget\"==r.className&&t.node.removeChild(r);d(e,t,i)}function f(e,t,i,n){var r=a(e,t);return t.text=t.node=r.pre,r.bgClass&&(t.bgClass=r.bgClass),r.textClass&&(t.textClass=r.textClass),s(e,t),c(e,t,i,n),d(e,t,n),t.node}function d(e,t,i){if(h(e,t.line,t,i,!0),t.rest)for(var n=0;n<t.rest.length;n++)h(e,t.rest[n],t,i,!1)}function h(e,t,n,o,a){if(t.widgets)for(var l=r(n),s=0,c=t.widgets;s<c.length;++s){var u=c[s],f=i.i(b.e)(\"div\",[u.node],\"CodeMirror-linewidget\");u.handleMouseEvents||f.setAttribute(\"cm-ignore-events\",\"true\"),p(u,f,n,o),e.display.input.setUneditable(f),a&&u.above?l.insertBefore(f,n.gutter||n.text):l.appendChild(f),i.i(y.a)(u,\"redraw\")}}function p(e,t,i,n){if(e.noHScroll){(i.alignable||(i.alignable=[])).push(t);var r=n.wrapperWidth;t.style.left=n.fixedPos+\"px\",e.coverGutter||(r-=n.gutterTotalWidth,t.style.paddingLeft=n.gutterTotalWidth+\"px\"),t.style.width=r+\"px\"}e.coverGutter&&(t.style.zIndex=5,t.style.position=\"relative\",e.noHScroll||(t.style.marginLeft=-n.gutterTotalWidth+\"px\"))}var v=i(21),g=i(4),m=i(5),b=i(1),y=i(15);t.a=n,t.b=f},function(e,t,i){\"use strict\";function n(e,t){for(var n=e.doc.sel.ranges,c=[],u=0;u<n.length;u++){for(var f=t(n[u]);c.length&&i.i(a.b)(f.from,i.i(s.f)(c).to)<=0;){var d=c.pop();if(i.i(a.b)(d.from,f.from)<0){f.from=d.from;break}}c.push(f)}i.i(r.a)(e,function(){for(var t=c.length-1;t>=0;t--)i.i(l.b)(e.doc,\"\",c[t].from,c[t].to,\"+delete\");i.i(o.b)(e)})}var r=i(8),o=i(19),a=i(3),l=i(23),s=i(0);t.a=n},function(e,t,i){\"use strict\";function n(e,t,i){if(\"string\"==typeof t&&!(t=x.a[t]))return!1;e.display.input.ensurePolled();var n=e.display.shift,r=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),i&&(e.display.shift=!1),r=t(e)!=w.e}finally{e.display.shift=n,e.state.suppressEdits=!1}return r}function r(e,t,n){for(var r=0;r<e.state.keyMaps.length;r++){var o=i.i(p.d)(t,e.state.keyMaps[r],n,e);if(o)return o}return e.options.extraKeys&&i.i(p.d)(t,e.options.extraKeys,n,e)||i.i(p.d)(t,e.options.keyMap,n,e)}function o(e,t,n,o){var a=e.state.keySeq;if(a){if(i.i(p.c)(t))return\"handled\";C.set(50,function(){e.state.keySeq==a&&(e.state.keySeq=null,e.display.input.reset())}),t=a+\" \"+t}var l=r(e,t,o);return\"multi\"==l&&(e.state.keySeq=t),\"handled\"==l&&i.i(d.a)(e,\"keyHandled\",e,t,n),\"handled\"!=l&&\"multi\"!=l||(i.i(b.e)(n),i.i(h.b)(e)),a&&!l&&/\\'$/.test(t)?(i.i(b.e)(n),!0):!!l}function a(e,t){var r=i.i(p.b)(t,!0);return!!r&&(t.shiftKey&&!e.state.keySeq?o(e,\"Shift-\"+r,t,function(t){return n(e,t,!0)})||o(e,r,t,function(t){if(\"string\"==typeof t?/^go[A-Z]/.test(t):t.motion)return n(e,t)}):o(e,r,t,function(t){return n(e,t)}))}function l(e,t,i){return o(e,\"'\"+i+\"'\",t,function(t){return n(e,t,!0)})}function s(e){var t=this;if(t.curOp.focus=i.i(m.j)(),!i.i(b.k)(t,e)){g.b&&g.d<11&&27==e.keyCode&&(e.returnValue=!1);var n=e.keyCode;t.display.shift=16==n||e.shiftKey;var r=a(t,e);g.k&&(k=r?n:null,!r&&88==n&&!y.e&&(g.c?e.metaKey:e.ctrlKey)&&t.replaceSelection(\"\",null,\"cut\")),18!=n||/\\bCodeMirror-crosshair\\b/.test(t.display.lineDiv.className)||c(t)}}function c(e){function t(e){18!=e.keyCode&&e.altKey||(i.i(m.c)(n,\"CodeMirror-crosshair\"),i.i(b.b)(document,\"keyup\",t),i.i(b.b)(document,\"mouseover\",t))}var n=e.display.lineDiv;i.i(m.a)(n,\"CodeMirror-crosshair\"),i.i(b.c)(document,\"keyup\",t),i.i(b.c)(document,\"mouseover\",t)}function u(e){16==e.keyCode&&(this.doc.sel.shift=!1),i.i(b.k)(this,e)}function f(e){var t=this;if(!(i.i(v.b)(t.display,e)||i.i(b.k)(t,e)||e.ctrlKey&&!e.altKey||g.c&&e.metaKey)){var n=e.keyCode,r=e.charCode;if(g.k&&n==k)return k=null,void i.i(b.e)(e);if(!g.k||e.which&&!(e.which<10)||!a(t,e)){var o=String.fromCharCode(null==r?n:r);\"\\b\"!=o&&(l(t,e,o)||t.display.input.onKeyPress(e))}}}var d=i(15),h=i(20),p=i(51),v=i(22),g=i(5),m=i(1),b=i(2),y=i(24),w=i(0),x=i(62);t.b=s,t.a=u,t.c=f;var C=new w.o,k=null},function(e,t,i){\"use strict\";function n(e){function t(t,i,r,o){e.defaults[t]=i,r&&(n[t]=o?function(e,t,i){i!=S&&r(e,t,i)}:r)}var n=e.optionHandlers;e.defineOption=t,e.Init=S,t(\"value\",\"\",function(e,t){return e.setValue(t)},!0),t(\"mode\",null,function(e,t){e.doc.modeOption=t,i.i(u.a)(e)},!0),t(\"indentUnit\",2,u.a,!0),t(\"indentWithTabs\",!1),t(\"smartIndent\",!0),t(\"tabSize\",4,function(e){i.i(u.b)(e),i.i(b.y)(e),i.i(h.b)(e)},!0),t(\"lineSeparator\",null,function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter(function(e){for(var o=0;;){var a=e.text.indexOf(t,o);if(-1==a)break;o=a+t.length,n.push(i.i(g.a)(r,a))}r++});for(var o=n.length-1;o>=0;o--)i.i(y.b)(e.doc,t,n[o],i.i(g.a)(n[o].line,n[o].ch+t.length))}}),t(\"specialChars\",/[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g,function(e,t,i){e.state.specialChars=new RegExp(t.source+(t.test(\"\\t\")?\"\":\"|\\t\"),\"g\"),i!=S&&e.refresh()}),t(\"specialCharPlaceholder\",v.f,function(e){return e.refresh()},!0),t(\"electricChars\",!0),t(\"inputStyle\",w.n?\"contenteditable\":\"textarea\",function(){throw new Error(\"inputStyle can not (yet) be changed in a running editor\")},!0),t(\"spellcheck\",!1,function(e,t){return e.getInputField().spellcheck=t},!0),t(\"rtlMoveVisually\",!w.q),t(\"wholeLineUpdateBefore\",!0),t(\"theme\",\"default\",function(e){i.i(k.a)(e),r(e)},!0),t(\"keyMap\",\"default\",function(e,t,n){var r=i.i(p.f)(t),o=n!=S&&i.i(p.f)(n);o&&o.detach&&o.detach(e,r),r.attach&&r.attach(e,o||null)}),t(\"extraKeys\",null),t(\"lineWrapping\",!1,a,!0),t(\"gutters\",[],function(e){i.i(s.a)(e.options),r(e)},!0),t(\"fixedGutter\",!0,function(e,t){e.display.gutters.style.left=t?i.i(b.n)(e.display)+\"px\":\"0\",e.refresh()},!0),t(\"coverGutterNextToScrollbar\",!1,function(e){return i.i(f.c)(e)},!0),t(\"scrollbarStyle\",\"native\",function(e){i.i(f.d)(e),i.i(f.c)(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),t(\"lineNumbers\",!1,function(e){i.i(s.a)(e.options),r(e)},!0),t(\"firstLineNumber\",1,r,!0),t(\"lineNumberFormatter\",function(e){return e},r,!0),t(\"showCursorWhenSelecting\",!1,d.a,!0),t(\"resetSelectionOnContextMenu\",!0),t(\"lineWiseCopyCut\",!0),t(\"readOnly\",!1,function(e,t){\"nocursor\"==t?(i.i(l.c)(e),e.display.input.blur(),e.display.disabled=!0):e.display.disabled=!1,e.display.input.readOnlyChanged(t)}),t(\"disableInput\",!1,function(e,t){t||e.display.input.reset()},!0),t(\"dragDrop\",!0,o),t(\"allowDropFileTypes\",null),t(\"cursorBlinkRate\",530),t(\"cursorScrollMargin\",0),t(\"cursorHeight\",1,d.a,!0),t(\"singleCursorHeightPerLine\",!0,d.a,!0),t(\"workTime\",100),t(\"workDelay\",100),t(\"flattenSpans\",!0,u.b,!0),t(\"addModeClass\",!1,u.b,!0),t(\"pollInterval\",100),t(\"undoDepth\",200,function(e,t){return e.doc.history.undoDepth=t}),t(\"historyEventDelay\",1250),t(\"viewportMargin\",10,function(e){return e.refresh()},!0),t(\"maxHighlightLength\",1e4,u.b,!0),t(\"moveInputWithCursor\",!0,function(e,t){t||e.display.input.resetPosition()}),t(\"tabindex\",null,function(e,t){return e.display.input.getField().tabIndex=t||\"\"}),t(\"autofocus\",null),t(\"direction\",\"ltr\",function(e,t){return e.doc.setDirection(t)},!0)}function r(e){i.i(s.b)(e),i.i(h.b)(e),i.i(c.a)(e)}function o(e,t,i){if(!t!=!(i&&i!=S)){var n=e.display.dragFunctions,r=t?C.c:C.b;r(e.display.scroller,\"dragstart\",n.start),r(e.display.scroller,\"dragenter\",n.enter),r(e.display.scroller,\"dragover\",n.over),r(e.display.scroller,\"dragleave\",n.leave),r(e.display.scroller,\"drop\",n.drop)}}function a(e){e.options.lineWrapping?(i.i(x.a)(e.display.wrapper,\"CodeMirror-wrap\"),e.display.sizer.style.minWidth=\"\",e.display.sizerWidth=null):(i.i(x.c)(e.display.wrapper,\"CodeMirror-wrap\"),i.i(m.g)(e)),i.i(b.b)(e),i.i(h.b)(e),i.i(b.y)(e),setTimeout(function(){return i.i(f.c)(e)},100)}var l=i(35),s=i(87),c=i(48),u=i(88),f=i(37),d=i(20),h=i(18),p=i(51),v=i(21),g=i(3),m=i(7),b=i(6),y=i(23),w=i(5),x=i(1),C=i(2),k=i(93);i.d(t,\"d\",function(){return S}),i.d(t,\"b\",function(){return L}),i.d(t,\"c\",function(){return M}),t.a=n;var S={toString:function(){return\"CodeMirror.Init\"}},L={},M={}},function(e,t,i){\"use strict\";function n(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\\s*cm-s-\\S+/g,\"\")+e.options.theme.replace(/(^|\\s)\\s*/g,\" cm-s-\"),i.i(r.y)(e)}var r=i(6);t.a=n},function(e,t,i){\"use strict\";function n(e,t,n,f){var d=e.doc,h=void 0;null==n&&(n=\"add\"),\"smart\"==n&&(d.mode.indent?h=i.i(r.b)(e,t):n=\"prev\");var p=e.options.tabSize,v=i.i(a.d)(d,t),g=i.i(u.b)(v.text,null,p);v.stateAfter&&(v.stateAfter=null);var m=v.text.match(/^\\s*/)[0],b=void 0;if(f||/\\S/.test(v.text)){if(\"smart\"==n&&((b=d.mode.indent(h,v.text.slice(m.length),v.text))==u.e||b>150)){if(!f)return;n=\"prev\"}}else b=0,n=\"not\";\"prev\"==n?b=t>d.first?i.i(u.b)(i.i(a.d)(d,t-1).text,null,p):0:\"add\"==n?b=g+e.options.indentUnit:\"subtract\"==n?b=g-e.options.indentUnit:\"number\"==typeof n&&(b=g+n),b=Math.max(0,b);var y=\"\",w=0;if(e.options.indentWithTabs)for(var x=Math.floor(b/p);x;--x)w+=p,y+=\"\\t\";if(w<b&&(y+=i.i(u.m)(b-w)),y!=m)return i.i(l.b)(d,y,i.i(o.a)(t,0),i.i(o.a)(t,m.length),\"+input\"),v.stateAfter=null,!0;for(var C=0;C<d.sel.ranges.length;C++){var k=d.sel.ranges[C];if(k.head.line==t&&k.head.ch<m.length){var S=i.i(o.a)(t,m.length);i.i(c.e)(d,C,new s.b(S,S));break}}}var r=i(52),o=i(3),a=i(4),l=i(23),s=i(9),c=i(14),u=i(0);t.a=n},function(e,t,i){\"use strict\";i.d(t,\"a\",function(){return n});for(var n={3:\"Enter\",8:\"Backspace\",9:\"Tab\",13:\"Enter\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"PrintScrn\",45:\"Insert\",46:\"Delete\",59:\";\",61:\"=\",91:\"Mod\",92:\"Mod\",93:\"Mod\",106:\"*\",107:\"=\",109:\"-\",110:\".\",111:\"/\",127:\"Delete\",173:\"-\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",63232:\"Up\",63233:\"Down\",63234:\"Left\",63235:\"Right\",63272:\"Delete\",63273:\"Home\",63275:\"End\",63276:\"PageUp\",63277:\"PageDown\",63302:\"Insert\"},r=0;r<10;r++)n[r+48]=n[r+96]=String(r);for(var o=65;o<=90;o++)n[o]=String.fromCharCode(o);for(var a=1;a<=12;a++)n[a+111]=n[a+63235]=\"F\"+a},function(e,t,i){\"use strict\";function n(e,t,n){i.i(d.a)(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&i.i(u.a)(e,null,n)}function r(e,t,n,r){var o=new b(e,n,r),a=e.cm;return a&&o.noHScroll&&(a.display.alignWidgets=!0),i.i(v.a)(e,t,\"widget\",function(t){var n=t.widgets||(t.widgets=[]);if(null==o.insertAt?n.push(o):n.splice(Math.min(n.length-1,Math.max(0,o.insertAt)),0,o),o.line=t,a&&!i.i(d.b)(e,t)){var r=i.i(d.a)(t)<e.scrollTop;i.i(h.b)(t,t.height+i.i(p.a)(o)),r&&i.i(u.a)(a,null,o.height),a.curOp.forceUpdate=!0}return!0}),i.i(m.a)(a,\"lineWidgetAdded\",a,o,\"number\"==typeof t?t:i.i(h.a)(t)),o}var o=i(16),a=i.n(o),l=i(17),s=i.n(l),c=i(8),u=i(19),f=i(18),d=i(7),h=i(4),p=i(22),v=i(23),g=i(2),m=i(15);i.d(t,\"a\",function(){return b}),t.b=r;var b=function(){function e(t,i,n){if(a()(this,e),n)for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.doc=t,this.node=i}return s()(e,[{key:\"clear\",value:function(){var e=this.doc.cm,t=this.line.widgets,r=this.line,o=i.i(h.a)(r);if(null!=o&&t){for(var a=0;a<t.length;++a)t[a]==this&&t.splice(a--,1);t.length||(r.widgets=null);var l=i.i(p.a)(this);i.i(h.b)(r,Math.max(0,r.height-l)),e&&(i.i(c.a)(e,function(){n(e,r,-l),i.i(f.a)(e,o,\"widget\")}),i.i(m.a)(e,\"lineWidgetCleared\",e,this,o))}}},{key:\"changed\",value:function(){var e=this,t=this.height,r=this.doc.cm,o=this.line;this.height=null;var a=i.i(p.a)(this)-t;a&&(i.i(h.b)(o,o.height+a),r&&i.i(c.a)(r,function(){r.curOp.forceUpdate=!0,n(r,o,a),i.i(m.a)(r,\"lineWidgetChanged\",r,e,i.i(h.a)(o))}))}}]),e}();i.i(g.a)(b)},function(e,t,i){\"use strict\";function n(e,t,o,a,l){if(a&&a.shared)return r(e,t,o,a,l);if(e.cm&&!e.cm.curOp)return i.i(p.b)(e.cm,n)(e,t,o,a,l);var s=new _(e,l),c=i.i(v.b)(t,o);if(a&&i.i(w.p)(a,s,!1),c>0||0==c&&!1!==s.clearWhenEmpty)return s;if(s.replacedWith&&(s.collapsed=!0,s.widgetNode=i.i(d.h)(\"span\",[s.replacedWith],\"CodeMirror-widget\"),a.handleMouseEvents||s.widgetNode.setAttribute(\"cm-ignore-events\",\"true\"),a.insertLeft&&(s.widgetNode.insertLeft=!0)),s.collapsed){if(i.i(y.q)(e,t.line,t,o,s)||t.line!=o.line&&i.i(y.q)(e,o.line,t,o,s))throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");i.i(b.c)()}s.addToHistory&&i.i(L.a)(e,{from:t,to:o,origin:\"markText\"},e.sel,NaN);var u=t.line,f=e.cm,m=void 0;if(e.iter(u,o.line+1,function(e){f&&s.collapsed&&!f.options.lineWrapping&&i.i(y.e)(e)==f.display.maxLine&&(m=!0),s.collapsed&&u!=t.line&&i.i(g.b)(e,0),i.i(y.r)(e,new y.s(s,u==t.line?t.ch:null,u==o.line?o.ch:null)),++u}),s.collapsed&&e.iter(t.line,o.line+1,function(t){i.i(y.b)(e,t)&&i.i(g.b)(t,0)}),s.clearOnEnter&&i.i(h.c)(s,\"beforeCursorEnter\",function(){return s.clear()}),s.readOnly&&(i.i(b.d)(),(e.history.done.length||e.history.undone.length)&&e.clearHistory()),s.collapsed&&(s.id=++T,s.atomic=!0),f){if(m&&(f.curOp.updateMaxLine=!0),s.collapsed)i.i(k.b)(f,t.line,o.line+1);else if(s.className||s.title||s.startStyle||s.endStyle||s.css)for(var C=t.line;C<=o.line;C++)i.i(k.a)(f,C,\"text\");s.atomic&&i.i(M.c)(f.doc),i.i(x.a)(f,\"markerAdded\",f,s)}return s}function r(e,t,r,o,a){o=i.i(w.p)(o),o.shared=!1;var l=[n(e,t,r,o,a)],s=l[0],c=o.widgetNode;return i.i(S.a)(e,function(e){c&&(o.widgetNode=c.cloneNode(!0)),l.push(n(e,i.i(v.c)(e,t),i.i(v.c)(e,r),o,a));for(var u=0;u<e.linked.length;++u)if(e.linked[u].isParent)return;s=i.i(w.f)(l)}),new A(l,s)}function o(e){return e.findMarks(i.i(v.a)(e.first,0),e.clipPos(i.i(v.a)(e.lastLine())),function(e){return e.parent})}function a(e,t){for(var r=0;r<t.length;r++){var o=t[r],a=o.find(),l=e.clipPos(a.from),s=e.clipPos(a.to);if(i.i(v.b)(l,s)){var c=n(e,l,s,o.primary,o.primary.type);o.markers.push(c),c.parent=o}}}function l(e){for(var t=0;t<e.length;t++)!function(t){var n=e[t],r=[n.primary.doc];i.i(S.a)(n.primary.doc,function(e){return r.push(e)});for(var o=0;o<n.markers.length;o++){var a=n.markers[o];-1==i.i(w.a)(r,a.doc)&&(a.parent=null,n.markers.splice(o--,1))}}(t)}var s=i(16),c=i.n(s),u=i(17),f=i.n(u),d=i(1),h=i(2),p=i(8),v=i(3),g=i(4),m=i(6),b=i(39),y=i(7),w=i(0),x=i(15),C=i(22),k=i(18),S=i(31),L=i(53),M=i(14);i.d(t,\"b\",function(){return _}),t.c=n,i.d(t,\"a\",function(){return A}),t.e=o,t.d=a,t.f=l;var T=0,_=function(){function e(t,i){c()(this,e),this.lines=[],this.type=i,this.doc=t,this.id=++T}return f()(e,[{key:\"clear\",value:function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&i.i(p.c)(e),i.i(h.h)(this,\"clear\")){var n=this.find();n&&i.i(x.a)(this,\"clear\",n.from,n.to)}for(var r=null,o=null,a=0;a<this.lines.length;++a){var l=this.lines[a],s=i.i(y.o)(l.markedSpans,this);e&&!this.collapsed?i.i(k.a)(e,i.i(g.a)(l),\"text\"):e&&(null!=s.to&&(o=i.i(g.a)(l)),null!=s.from&&(r=i.i(g.a)(l))),l.markedSpans=i.i(y.p)(l.markedSpans,s),null==s.from&&this.collapsed&&!i.i(y.b)(this.doc,l)&&e&&i.i(g.b)(l,i.i(m.i)(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var c=0;c<this.lines.length;++c){var u=i.i(y.e)(this.lines[c]),f=i.i(y.f)(u);f>e.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=f,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&i.i(k.b)(e,r,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&i.i(M.c)(e.doc)),e&&i.i(x.a)(e,\"markerCleared\",e,this,r,o),t&&i.i(p.d)(e),this.parent&&this.parent.clear()}}},{key:\"find\",value:function(e,t){null==e&&\"bookmark\"==this.type&&(e=1);for(var n=void 0,r=void 0,o=0;o<this.lines.length;++o){var a=this.lines[o],l=i.i(y.o)(a.markedSpans,this);if(null!=l.from&&(n=i.i(v.a)(t?a:i.i(g.a)(a),l.from),-1==e))return n;if(null!=l.to&&(r=i.i(v.a)(t?a:i.i(g.a)(a),l.to),1==e))return r}return n&&{from:n,to:r}}},{key:\"changed\",value:function(){var e=this,t=this.find(-1,!0),n=this,r=this.doc.cm;t&&r&&i.i(p.a)(r,function(){var o=t.line,a=i.i(g.a)(t.line),l=i.i(m.t)(r,a);if(l&&(i.i(m.u)(l),r.curOp.selectionChanged=r.curOp.forceUpdate=!0),r.curOp.updateMaxLine=!0,!i.i(y.b)(n.doc,o)&&null!=n.height){var s=n.height;n.height=null;var c=i.i(C.a)(n)-s;c&&i.i(g.b)(o,o.height+c)}i.i(x.a)(r,\"markerChanged\",r,e)})}},{key:\"attachLine\",value:function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=i.i(w.a)(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)}},{key:\"detachLine\",value:function(e){if(this.lines.splice(i.i(w.a)(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}}}]),e}();i.i(h.a)(_);var A=function(){function e(t,i){c()(this,e),this.markers=t,this.primary=i;for(var n=0;n<t.length;++n)t[n].parent=this}return f()(e,[{key:\"clear\",value:function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();i.i(x.a)(this,\"clear\")}}},{key:\"find\",value:function(e,t){return this.primary.find(e,t)}}]),e}();i.i(h.a)(A)},function(e,t,i){\"use strict\";var n=i(16),r=i.n(n),o=i(17),a=i.n(o),l=i(0),s=function(){function e(t,i){r()(this,e),this.pos=this.start=0,this.string=t,this.tabSize=i||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0}return a()(e,[{key:\"eol\",value:function(){return this.pos>=this.string.length}},{key:\"sol\",value:function(){return this.pos==this.lineStart}},{key:\"peek\",value:function(){return this.string.charAt(this.pos)||void 0}},{key:\"next\",value:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)}},{key:\"eat\",value:function(e){var t=this.string.charAt(this.pos);if(\"string\"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t}},{key:\"eatWhile\",value:function(e){for(var t=this.pos;this.eat(e););return this.pos>t}},{key:\"eatSpace\",value:function(){for(var e=this.pos;/[\\s\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e}},{key:\"skipToEnd\",value:function(){this.pos=this.string.length}},{key:\"skipTo\",value:function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0}},{key:\"backUp\",value:function(e){this.pos-=e}},{key:\"column\",value:function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=i.i(l.b)(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?i.i(l.b)(this.string,this.lineStart,this.tabSize):0)}},{key:\"indentation\",value:function(){return i.i(l.b)(this.string,null,this.tabSize)-(this.lineStart?i.i(l.b)(this.string,this.lineStart,this.tabSize):0)}},{key:\"match\",value:function(e,t,i){if(\"string\"!=typeof e){var n=this.string.slice(this.pos).match(e);return n&&n.index>0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var r=function(e){return i?e.toLowerCase():e};if(r(this.string.substr(this.pos,e.length))==r(e))return!1!==t&&(this.pos+=e.length),!0}},{key:\"current\",value:function(){return this.string.slice(this.start,this.pos)}},{key:\"hideFirstChars\",value:function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}}}]),e}();t.a=s},,,,,,,,,,,,,,,,function(e,t,i){\"use strict\";t.a={install:function(e){e.prototype.$util={parseDate:function(e,t){var i=new Date(1e3*e),n={\"M+\":i.getMonth()+1,\"d+\":i.getDate(),\"h+\":i.getHours(),\"m+\":i.getMinutes(),\"s+\":i.getSeconds(),\"q+\":Math.floor((i.getMonth()+3)/3),S:i.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(i.getFullYear()+\"\").substr(4-RegExp.$1.length)));for(var r in n)new RegExp(\"(\"+r+\")\").test(t)&&(t=t.replace(RegExp.$1,1===RegExp.$1.length?n[r]:(\"00\"+n[r]).substr((\"\"+n[r]).length)));return t}}}}},function(e,t,i){\"use strict\";var n=i(60),r=i(226),o=i(216),a=i.n(o);n.a.use(r.a),t.a=new r.a({routes:[{path:\"/\",name:\"Home\",component:a.a}]})},function(e,t,i){\"use strict\";var n=i(228),r=i(60),o=i(148);r.a.use(n.a),t.a=new n.a.Store({strict:!1,modules:{api:o.a}})},function(e,t,i){i(210);var n=i(34)(i(150),i(224),null,null);e.exports=n.exports},,,,,,,,,,,,,,,,,,function(e,t,i){\"use strict\";function n(e,t,n){var l=this;this.input=n,l.scrollbarFiller=i.i(o.e)(\"div\",null,\"CodeMirror-scrollbar-filler\"),l.scrollbarFiller.setAttribute(\"cm-not-content\",\"true\"),l.gutterFiller=i.i(o.e)(\"div\",null,\"CodeMirror-gutter-filler\"),l.gutterFiller.setAttribute(\"cm-not-content\",\"true\"),l.lineDiv=i.i(o.h)(\"div\",null,\"CodeMirror-code\"),l.selectionDiv=i.i(o.e)(\"div\",null,null,\"position: relative; z-index: 1\"),l.cursorDiv=i.i(o.e)(\"div\",null,\"CodeMirror-cursors\"),l.measure=i.i(o.e)(\"div\",null,\"CodeMirror-measure\"),l.lineMeasure=i.i(o.e)(\"div\",null,\"CodeMirror-measure\"),l.lineSpace=i.i(o.h)(\"div\",[l.measure,l.lineMeasure,l.selectionDiv,l.cursorDiv,l.lineDiv],null,\"position: relative; outline: none\");var s=i.i(o.h)(\"div\",[l.lineSpace],\"CodeMirror-lines\");l.mover=i.i(o.e)(\"div\",[s],null,\"position: relative\"),l.sizer=i.i(o.e)(\"div\",[l.mover],\"CodeMirror-sizer\"),l.sizerWidth=null,l.heightForcer=i.i(o.e)(\"div\",null,null,\"position: absolute; height: \"+a.i+\"px; width: 1px;\"),l.gutters=i.i(o.e)(\"div\",null,\"CodeMirror-gutters\"),l.lineGutter=null,l.scroller=i.i(o.e)(\"div\",[l.sizer,l.heightForcer,l.gutters],\"CodeMirror-scroll\"),l.scroller.setAttribute(\"tabIndex\",\"-1\"),l.wrapper=i.i(o.e)(\"div\",[l.scrollbarFiller,l.gutterFiller,l.scroller],\"CodeMirror\"),r.b&&r.d<8&&(l.gutters.style.zIndex=-1,l.scroller.style.paddingRight=0),r.g||r.i&&r.n||(l.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(l.wrapper):e(l.wrapper)),l.viewFrom=l.viewTo=t.first,l.reportedViewFrom=l.reportedViewTo=t.first,l.view=[],l.renderedView=null,l.externalMeasured=null,l.viewOffset=0,l.lastWrapHeight=l.lastWrapWidth=0,l.updateLineNumbers=null,l.nativeBarWidth=l.barHeight=l.barWidth=0,l.scrollbarsClipped=!1,l.lineNumWidth=l.lineNumInnerWidth=l.lineNumChars=null,l.alignWidgets=!1,l.cachedCharWidth=l.cachedTextHeight=l.cachedPaddingH=null,l.maxLine=null,l.maxLineLength=0,l.maxLineChanged=!1,l.wheelDX=l.wheelDY=l.wheelStartX=l.wheelStartY=null,l.shift=!1,l.selForContextMenu=null,l.activeTouch=null,n.init(l)}var r=i(5),o=i(1),a=i(0);t.a=n},function(e,t,i){\"use strict\";function n(e){var t=this;if(a(t),!i.i(b.k)(t,e)&&!i.i(f.b)(t.display,e)){i.i(b.e)(e),g.b&&(w=+new Date);var n=i.i(u.x)(t,e,!0),r=e.dataTransfer.files;if(n&&!t.isReadOnly())if(r&&r.length&&window.FileReader&&window.File)for(var o=r.length,l=Array(o),m=0,x=0;x<o;++x)!function(e,r){if(!t.options.allowDropFileTypes||-1!=i.i(y.a)(t.options.allowDropFileTypes,e.type)){var a=new FileReader;a.onload=i.i(s.b)(t,function(){var e=a.result;if(/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(e)&&(e=\"\"),l[r]=e,++m==o){n=i.i(c.c)(t.doc,n);var s={from:n,to:n,text:t.doc.splitLines(l.join(t.doc.lineSeparator())),origin:\"paste\"};i.i(d.c)(t.doc,s),i.i(v.i)(t.doc,i.i(p.d)(n,i.i(h.a)(s)))}}),a.readAsText(e)}}(r[x],x);else{if(t.state.draggingText&&t.doc.sel.contains(n)>-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var C=e.dataTransfer.getData(\"Text\");if(C){var k=void 0;if(t.state.draggingText&&!t.state.draggingText.copy&&(k=t.listSelections()),i.i(v.b)(t.doc,i.i(p.d)(n,n)),k)for(var S=0;S<k.length;++S)i.i(d.b)(t.doc,\"\",k[S].anchor,k[S].head,\"drag\");t.replaceSelection(C,\"around\",\"paste\"),t.display.input.focus()}}catch(e){}}}}function r(e,t){if(g.b&&(!e.state.draggingText||+new Date-w<100))return void i.i(b.g)(t);if(!i.i(b.k)(e,t)&&!i.i(f.b)(e.display,t)&&(t.dataTransfer.setData(\"Text\",e.getSelection()),t.dataTransfer.effectAllowed=\"copyMove\",t.dataTransfer.setDragImage&&!g.j)){var n=i.i(m.e)(\"img\",null,null,\"position: fixed; left: 0; top: 0;\");n.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",g.k&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),g.k&&n.parentNode.removeChild(n)}}function o(e,t){var n=i.i(u.x)(e,t);if(n){var r=document.createDocumentFragment();i.i(l.d)(e,n,r),e.display.dragCursor||(e.display.dragCursor=i.i(m.e)(\"div\",null,\"CodeMirror-cursors CodeMirror-dragcursors\"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),i.i(m.d)(e.display.dragCursor,r)}}function a(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}var l=i(20),s=i(8),c=i(3),u=i(6),f=i(22),d=i(23),h=i(40),p=i(9),v=i(14),g=i(5),m=i(1),b=i(2),y=i(0);t.c=n,t.b=r,t.a=o,t.d=a;var w=0},function(e,t,i){\"use strict\";function n(e,t){function n(){e.value=d.getValue()}if(t=t?i.i(l.p)(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var s=i.i(o.j)();t.autofocus=s==e||null!=e.getAttribute(\"autofocus\")&&s==document.body}var c=void 0;if(e.form&&(i.i(a.c)(e.form,\"submit\",n),!t.leaveSubmitMethodAlone)){var u=e.form;c=u.submit;try{var f=u.submit=function(){n(),u.submit=c,u.submit(),u.submit=f}}catch(e){}}t.finishInit=function(t){t.save=n,t.getTextArea=function(){return e},t.toTextArea=function(){t.toTextArea=isNaN,n(),e.parentNode.removeChild(t.getWrapperElement()),e.style.display=\"\",e.form&&(i.i(a.b)(e.form,\"submit\",n),\"function\"==typeof e.form.submit&&(e.form.submit=c))}},e.style.display=\"none\";var d=i.i(r.a)(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return d}var r=i(50),o=i(1),a=i(2),l=i(0);t.a=n},function(e,t,i){\"use strict\";function n(e){if(document.body.getElementsByClassName)for(var t=document.body.getElementsByClassName(\"CodeMirror\"),i=0;i<t.length;i++){var n=t[i].CodeMirror;n&&e(n)}}function r(){c||(o(),c=!0)}function o(){var e=void 0;i.i(s.c)(window,\"resize\",function(){null==e&&(e=setTimeout(function(){e=null,n(a)},100))}),i.i(s.c)(window,\"blur\",function(){return n(l.c)})}function a(e){var t=e.display;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}var l=i(35),s=i(2);t.a=r;var c=!1},function(e,t,i){\"use strict\";function n(e){e.off=g.b,e.on=g.c,e.wheelEventPixels=o.a,e.Doc=f.a,e.splitLines=m.a,e.countColumn=b.b,e.findColumn=b.c,e.isWordChar=b.d,e.Pass=b.e,e.signal=g.d,e.Line=s.a,e.changeEnd=u.a,e.scrollbarModel=r.a,e.Pos=c.a,e.cmpPos=c.b,e.modes=p.c,e.mimeModes=p.d,e.resolveMode=p.e,e.getMode=p.f,e.modeExtensions=p.g,e.extendMode=p.h,e.copyState=p.i,e.startState=p.j,e.innerMode=p.k,e.commands=w.a,e.keyMap=a.a,e.keyName=a.b,e.isModifierKey=a.c,e.lookupKey=a.d,e.normalizeKeyMap=a.e,e.StringStream=y.a,e.SharedTextMarker=h.a,e.TextMarker=h.b,e.LineWidget=d.a,e.e_preventDefault=g.e,e.e_stopPropagation=g.f,e.e_stop=g.g,e.addClass=v.a,e.contains=v.b,e.rmClass=v.c,e.keyNames=l.a}var r=i(37),o=i(36),a=i(51),l=i(95),s=i(21),c=i(3),u=i(40),f=i(65),d=i(96),h=i(97),p=i(41),v=i(1),g=i(2),m=i(24),b=i(0),y=i(98),w=i(62);t.a=n},function(e,t,i){\"use strict\";var n=i(50);i.d(t,\"a\",function(){return n.a});var r=i(2),o=i(0),a=i(92),l=i(141),s=i(65),c=i(143),u=i(144),f=i(41),d=i(137),h=i(139);i.i(a.a)(n.a),i.i(l.a)(n.a);var p=\"iter insert remove copy getEditor constructor\".split(\" \");for(var v in s.a.prototype)s.a.prototype.hasOwnProperty(v)&&i.i(o.a)(p,v)<0&&(n.a.prototype[v]=function(e){return function(){return e.apply(this.doc,arguments)}}(s.a.prototype[v]));i.i(r.a)(s.a),n.a.inputStyles={textarea:u.a,contenteditable:c.a},n.a.defineMode=function(e){n.a.defaults.mode||\"null\"==e||(n.a.defaults.mode=e),f.a.apply(this,arguments)},n.a.defineMIME=f.b,n.a.defineMode(\"null\",function(){return{token:function(e){return e.skipToEnd()}}}),n.a.defineMIME(\"text/plain\",\"null\"),n.a.defineExtension=function(e,t){n.a.prototype[e]=t},n.a.defineDocExtension=function(e,t){s.a.prototype[e]=t},n.a.fromTextArea=d.a,i.i(h.a)(n.a),n.a.version=\"5.25.3\"},function(e,t,i){\"use strict\";function n(e,t,n,r,o){function a(){var r=t.line+n;return!(r<e.first||r>=e.first+e.size)&&(t=new y.a(r,t.ch,t.sticky),u=i.i(_.d)(e,r))}function l(r){var l=void 0;if(null==(l=o?i.i(m.a)(e.cm,u,t,n):i.i(m.c)(u,t,n))){if(r||!a())return!1;t=i.i(m.b)(o,e.cm,u,t.line,n)}else t=l;return!0}var s=t,c=n,u=i.i(_.d)(e,t.line);if(\"char\"==r)l();else if(\"column\"==r)l(!0);else if(\"word\"==r||\"group\"==r)for(var f=null,d=\"group\"==r,h=e.cm&&e.cm.getHelper(t,\"wordChars\"),p=!0;!(n<0)||l(!p);p=!1){var v=u.text.charAt(t.ch)||\"\\n\",g=i.i(M.v)(v,h)?\"w\":d&&\"\\n\"==v?\"n\":!d||/\\s/.test(v)?null:\"p\";if(!d||p||g||(g=\"s\"),f&&f!=g){n<0&&(n=1,l(),t.sticky=\"after\");break}if(g&&(f=g),n>0&&!l(!p))break}var b=i.i(C.k)(e,t,s,c,!0);return i.i(y.f)(s,b)&&(b.hitSide=!0),b}function r(e,t,n,r){var o=e.doc,a=t.left,l=void 0;if(\"page\"==r){var s=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(s-.5*i.i(w.i)(e.display),3);l=(n>0?t.bottom:t.top)+n*c}else\"line\"==r&&(l=n>0?t.bottom+3:t.top-3);for(var u=void 0;u=i.i(w.A)(e,a,l),u.outside;){if(n<0?l<=0:l>=o.height){u.hitSide=!0;break}l+=5*n}return u}var o=i(66),a=i.n(o),l=i(90),s=i(62),c=i(31),u=i(1),f=i(2),d=i(52),h=i(94),p=i(63),v=i(91),g=i(51),m=i(64),b=i(8),y=i(3),w=i(6),x=i(9),C=i(14),k=i(19),S=i(7),L=i(38),M=i(0),T=i(15),_=i(4),A=i(18);t.a=function(e){var t=e.optionHandlers,o=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,n){var r=this.options,o=r[e];r[e]==n&&\"mode\"!=e||(r[e]=n,t.hasOwnProperty(e)&&i.i(b.b)(this,t[e])(this,n,o),i.i(f.d)(this,\"optionChange\",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?\"push\":\"unshift\"](i.i(g.f)(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,i=0;i<t.length;++i)if(t[i]==e||t[i].name==e)return t.splice(i,1),!0},addOverlay:i.i(b.f)(function(t,n){var r=t.token?t:e.getMode(this.options,t);if(r.startState)throw new Error(\"Overlays may not be stateful.\");i.i(M.u)(this.state.overlays,{mode:r,modeSpec:t,opaque:n&&n.opaque,priority:n&&n.priority||0},function(e){return e.priority}),this.state.modeGen++,i.i(A.b)(this)}),removeOverlay:i.i(b.f)(function(e){for(var t=this.state.overlays,n=0;n<t.length;++n){var r=t[n].modeSpec;if(r==e||\"string\"==typeof e&&r.name==e)return t.splice(n,1),this.state.modeGen++,void i.i(A.b)(this)}}),indentLine:i.i(b.f)(function(e,t,n){\"string\"!=typeof t&&\"number\"!=typeof t&&(t=null==t?this.options.smartIndent?\"smart\":\"prev\":t?\"add\":\"subtract\"),i.i(_.c)(this.doc,e)&&i.i(h.a)(this,e,t,n)}),indentSelection:i.i(b.f)(function(e){for(var t=this.doc.sel.ranges,n=-1,r=0;r<t.length;r++){var o=t[r];if(o.empty())o.head.line>n&&(i.i(h.a)(this,o.head.line,e,!0),n=o.head.line,r==this.doc.sel.primIndex&&i.i(k.b)(this));else{var a=o.from(),l=o.to(),s=Math.max(n,a.line);n=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1;for(var c=s;c<n;++c)i.i(h.a)(this,c,e);var u=this.doc.sel.ranges;0==a.ch&&t.length==u.length&&u[r].from().ch>0&&i.i(C.e)(this.doc,r,new x.b(a,u[r].to()),M.h)}}}),getTokenAt:function(e,t){return i.i(d.e)(this,e,t)},getLineTokens:function(e,t){return i.i(d.e)(this,i.i(y.a)(e),t,!0)},getTokenTypeAt:function(e){e=i.i(y.c)(this.doc,e);var t=i.i(d.a)(this,i.i(_.d)(this.doc,e.line)),n=0,r=(t.length-1)/2,o=e.ch,a=void 0;if(0==o)a=t[2];else for(;;){var l=n+r>>1;if((l?t[2*l-1]:0)>=o)r=l;else{if(!(t[2*l+1]<o)){a=t[2*l+2];break}n=l+1}}var s=a?a.indexOf(\"overlay \"):-1;return s<0?a:0==s?null:a.slice(0,s-1)},getModeAt:function(t){var i=this.doc.mode;return i.innerMode?e.innerMode(i,this.getTokenAt(t).state).mode:i},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var n=[];if(!o.hasOwnProperty(t))return n;var r=o[t],a=this.getModeAt(e);if(\"string\"==typeof a[t])r[a[t]]&&n.push(r[a[t]]);else if(a[t])for(var l=0;l<a[t].length;l++){var s=r[a[t][l]];s&&n.push(s)}else a.helperType&&r[a.helperType]?n.push(r[a.helperType]):r[a.name]&&n.push(r[a.name]);for(var c=0;c<r._global.length;c++){var u=r._global[c];u.pred(a,this)&&-1==i.i(M.a)(n,u.val)&&n.push(u.val)}return n},getStateAfter:function(e,t){var n=this.doc;return e=i.i(y.d)(n,null==e?n.first+n.size-1:e),i.i(d.b)(this,e+1,t)},cursorCoords:function(e,t){var n=void 0,r=this.doc.sel.primary();return n=null==e?r.head:\"object\"==(void 0===e?\"undefined\":a()(e))?i.i(y.c)(this.doc,e):e?r.from():r.to(),i.i(w.h)(this,n,t||\"page\")},charCoords:function(e,t){return i.i(w.q)(this,i.i(y.c)(this.doc,e),t||\"page\")},coordsChar:function(e,t){return e=i.i(w.z)(this,e,t||\"page\"),i.i(w.A)(this,e.left,e.top)},lineAtHeight:function(e,t){return e=i.i(w.z)(this,{top:e,left:0},t||\"page\").top,i.i(_.f)(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,n){var r=!1,o=void 0;if(\"number\"==typeof e){var a=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>a&&(e=a,r=!0),o=i.i(_.d)(this.doc,e)}else o=e;return i.i(w.B)(this,o,{top:0,left:0},t||\"page\",n||r).top+(r?this.doc.height-i.i(S.a)(o):0)},defaultTextHeight:function(){return i.i(w.i)(this.display)},defaultCharWidth:function(){return i.i(w.C)(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,o){var a=this.display;e=i.i(w.h)(this,i.i(y.c)(this.doc,e));var l=e.bottom,s=e.left;if(t.style.position=\"absolute\",t.setAttribute(\"cm-ignore-events\",\"true\"),this.display.input.setUneditable(t),a.sizer.appendChild(t),\"over\"==r)l=e.top;else if(\"above\"==r||\"near\"==r){var c=Math.max(a.wrapper.clientHeight,this.doc.height),u=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);(\"above\"==r||e.bottom+t.offsetHeight>c)&&e.top>t.offsetHeight?l=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=c&&(l=e.bottom),s+t.offsetWidth>u&&(s=u-t.offsetWidth)}t.style.top=l+\"px\",t.style.left=t.style.right=\"\",\"right\"==o?(s=a.sizer.clientWidth-t.offsetWidth,t.style.right=\"0px\"):(\"left\"==o?s=0:\"middle\"==o&&(s=(a.sizer.clientWidth-t.offsetWidth)/2),t.style.left=s+\"px\"),n&&i.i(k.e)(this,{left:s,top:l,right:s+t.offsetWidth,bottom:l+t.offsetHeight})},triggerOnKeyDown:i.i(b.f)(v.b),triggerOnKeyPress:i.i(b.f)(v.c),triggerOnKeyUp:v.a,execCommand:function(e){if(s.a.hasOwnProperty(e))return s.a[e].call(null,this)},triggerElectric:i.i(b.f)(function(e){i.i(p.h)(this,e)}),findPosH:function(e,t,r,o){var a=1;t<0&&(a=-1,t=-t);for(var l=i.i(y.c)(this.doc,e),s=0;s<t&&(l=n(this.doc,l,a,r,o),!l.hitSide);++s);return l},moveH:i.i(b.f)(function(e,t){var i=this;this.extendSelectionsBy(function(r){return i.display.shift||i.doc.extend||r.empty()?n(i.doc,r.head,e,t,i.options.rtlMoveVisually):e<0?r.from():r.to()},M.q)}),deleteH:i.i(b.f)(function(e,t){var r=this.doc.sel,o=this.doc;r.somethingSelected()?o.replaceSelection(\"\",null,\"+delete\"):i.i(l.a)(this,function(i){var r=n(o,i.head,e,t,!1);return e<0?{from:r,to:i.head}:{from:i.head,to:r}})}),findPosV:function(e,t,n,o){var a=1,l=o;t<0&&(a=-1,t=-t);for(var s=i.i(y.c)(this.doc,e),c=0;c<t;++c){var u=i.i(w.h)(this,s,\"div\");if(null==l?l=u.left:u.left=l,s=r(this,u,a,n),s.hitSide)break}return s},moveV:i.i(b.f)(function(e,t){var n=this,o=this.doc,a=[],l=!this.display.shift&&!o.extend&&o.sel.somethingSelected();if(o.extendSelectionsBy(function(s){if(l)return e<0?s.from():s.to();var c=i.i(w.h)(n,s.head,\"div\");null!=s.goalColumn&&(c.left=s.goalColumn),a.push(c.left);var u=r(n,c,e,t);return\"page\"==t&&s==o.sel.primary()&&i.i(k.a)(n,null,i.i(w.q)(n,u,\"div\").top-c.top),u},M.q),a.length)for(var s=0;s<o.sel.ranges.length;s++)o.sel.ranges[s].goalColumn=a[s]}),findWordAt:function(e){var t=this.doc,n=i.i(_.d)(t,e.line).text,r=e.ch,o=e.ch;if(n){var a=this.getHelper(e,\"wordChars\");\"before\"!=e.sticky&&o!=n.length||!r?++o:--r;for(var l=n.charAt(r),s=i.i(M.v)(l,a)?function(e){return i.i(M.v)(e,a)}:/\\s/.test(l)?function(e){return/\\s/.test(e)}:function(e){return!/\\s/.test(e)&&!i.i(M.v)(e)};r>0&&s(n.charAt(r-1));)--r;for(;o<n.length&&s(n.charAt(o));)++o}return new x.b(i.i(y.a)(e.line,r),i.i(y.a)(e.line,o))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?i.i(u.a)(this.display.cursorDiv,\"CodeMirror-overwrite\"):i.i(u.c)(this.display.cursorDiv,\"CodeMirror-overwrite\"),i.i(f.d)(this,\"overwriteToggle\",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==i.i(u.j)()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:i.i(b.f)(function(e,t){null==e&&null==t||i.i(k.f)(this),null!=e&&(this.curOp.scrollLeft=e),null!=t&&(this.curOp.scrollTop=t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-i.i(w.g)(this)-this.display.barHeight,width:e.scrollWidth-i.i(w.g)(this)-this.display.barWidth,clientHeight:i.i(w.j)(this),clientWidth:i.i(w.l)(this)}},scrollIntoView:i.i(b.f)(function(e,t){if(null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):\"number\"==typeof e?e={from:i.i(y.a)(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line)i.i(k.f)(this),this.curOp.scrollToPos=e;else{var n=i.i(k.g)(this,{left:Math.min(e.from.left,e.to.left),top:Math.min(e.from.top,e.to.top)-e.margin,right:Math.max(e.from.right,e.to.right),bottom:Math.max(e.from.bottom,e.to.bottom)+e.margin});this.scrollTo(n.scrollLeft,n.scrollTop)}}),setSize:i.i(b.f)(function(e,t){var n=this,r=function(e){return\"number\"==typeof e||/^\\d+$/.test(String(e))?e+\"px\":e};null!=e&&(this.display.wrapper.style.width=r(e)),null!=t&&(this.display.wrapper.style.height=r(t)),this.options.lineWrapping&&i.i(w.D)(this);var o=this.display.viewFrom;this.doc.iter(o,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){i.i(A.a)(n,o,\"widget\");break}++o}),this.curOp.forceUpdate=!0,i.i(f.d)(this,\"refresh\",this)}),operation:function(e){return i.i(b.a)(this,e)},refresh:i.i(b.f)(function(){var e=this.display.cachedTextHeight;i.i(A.b)(this),this.curOp.forceUpdate=!0,i.i(w.y)(this),this.scrollTo(this.doc.scrollLeft,this.doc.scrollTop),i.i(L.b)(this),(null==e||Math.abs(e-i.i(w.i)(this.display))>.5)&&i.i(w.b)(this),i.i(f.d)(this,\"refresh\",this)}),swapDoc:i.i(b.f)(function(e){var t=this.doc;return t.cm=null,i.i(c.e)(this,e),i.i(w.y)(this),this.display.input.reset(),this.scrollTo(e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,i.i(T.a)(this,\"swapDoc\",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},i.i(f.a)(e),e.registerHelper=function(t,i,n){o.hasOwnProperty(t)||(o[t]=e[t]={_global:[]}),o[t][i]=n},e.registerGlobalHelper=function(t,i,n,r){e.registerHelper(t,i,r),o[t]._global.push({pred:n,val:r})}}},function(e,t,i){\"use strict\";function n(e){var t=this,n=t.display;if(!(i.i(C.k)(t,e)||n.activeTouch&&n.input.supportsTouch())){if(n.input.ensurePolled(),n.shift=e.shiftKey,i.i(m.b)(n,e))return void(w.g||(n.scroller.draggable=!1,setTimeout(function(){return n.scroller.draggable=!0},100)));if(!s(t,e)){var o=i.i(g.x)(t,e);switch(window.focus(),i.i(C.m)(e)){case 1:t.state.selectingText?t.state.selectingText(e):o?r(t,e,o):i.i(C.j)(e)==n.scroller&&i.i(C.e)(e);break;case 2:w.g&&(t.state.lastMiddleDown=+new Date),o&&i.i(y.g)(t.doc,o),setTimeout(function(){return n.input.focus()},20),i.i(C.e)(e);break;case 3:w.o?c(t,e):i.i(f.d)(t)}}}}function r(e,t,n){w.b?setTimeout(i.i(S.n)(f.a,e),0):e.curOp.focus=i.i(x.j)();var r=+new Date,l=void 0;M&&M.time>r-400&&0==i.i(p.b)(M.pos,n)?l=\"triple\":L&&L.time>r-400&&0==i.i(p.b)(L.pos,n)?(l=\"double\",M={time:r,pos:n}):(l=\"single\",L={time:r,pos:n});var s=e.doc.sel,c=w.c?t.metaKey:t.ctrlKey,u=void 0;e.options.dragDrop&&k.g&&!e.isReadOnly()&&\"single\"==l&&(u=s.contains(n))>-1&&(i.i(p.b)((u=s.ranges[u]).from(),n)<0||n.xRel>0)&&(i.i(p.b)(u.to(),n)>0||n.xRel<0)?o(e,t,n,c):a(e,t,n,l,c)}function o(e,t,n,r){var o=e.display,a=!1,l=i.i(d.b)(e,function(t){w.g&&(o.scroller.draggable=!1),e.state.draggingText=!1,i.i(C.b)(document,\"mouseup\",l),i.i(C.b)(document,\"mousemove\",s),i.i(C.b)(o.scroller,\"dragstart\",c),i.i(C.b)(o.scroller,\"drop\",l),a||(i.i(C.e)(t),r||i.i(y.g)(e.doc,n),w.g||w.b&&9==w.d?setTimeout(function(){document.body.focus(),o.input.focus()},20):o.input.focus())}),s=function(e){a=a||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},c=function(){return a=!0};w.g&&(o.scroller.draggable=!0),e.state.draggingText=l,l.copy=w.c?t.altKey:t.ctrlKey,o.scroller.dragDrop&&o.scroller.dragDrop(),i.i(C.c)(document,\"mouseup\",l),i.i(C.c)(document,\"mousemove\",s),i.i(C.c)(o.scroller,\"dragstart\",c),i.i(C.c)(o.scroller,\"drop\",l),i.i(f.d)(e),setTimeout(function(){return o.input.focus()},20)}function a(e,t,n,r,o){function a(t){if(0!=i.i(p.b)(_,t))if(_=t,\"rect\"==r){for(var o=[],a=e.options.tabSize,l=i.i(S.b)(i.i(v.d)(u,n.line).text,n.ch,a),s=i.i(S.b)(i.i(v.d)(u,t.line).text,t.ch,a),c=Math.min(l,s),d=Math.max(l,s),h=Math.min(n.line,t.line),g=Math.min(e.lastLine(),Math.max(n.line,t.line));h<=g;h++){var w=i.i(v.d)(u,h).text,x=i.i(S.c)(w,c,a);c==d?o.push(new b.b(i.i(p.a)(h,x),i.i(p.a)(h,x))):w.length>x&&o.push(new b.b(i.i(p.a)(h,x),i.i(p.a)(h,i.i(S.c)(w,d,a))))}o.length||o.push(new b.b(n,n)),i.i(y.a)(u,i.i(b.c)(k.ranges.slice(0,m).concat(o),m),{origin:\"*mouse\",scroll:!1}),e.scrollIntoView(t)}else{var C=f,L=C.anchor,M=t;if(\"single\"!=r){var T=void 0;T=\"double\"==r?e.findWordAt(t):new b.b(i.i(p.a)(t.line,0),i.i(p.c)(u,i.i(p.a)(t.line+1,0))),i.i(p.b)(T.anchor,L)>0?(M=T.head,L=i.i(p.g)(C.from(),T.anchor)):(M=T.anchor,L=i.i(p.h)(C.to(),T.head))}var A=k.ranges.slice(0);A[m]=new b.b(i.i(p.c)(u,L),M),i.i(y.a)(u,i.i(b.c)(A,m),S.t)}}function l(t){var n=++O,o=i.i(g.x)(e,t,!0,\"rect\"==r);if(o)if(0!=i.i(p.b)(o,_)){e.curOp.focus=i.i(x.j)(),a(o);var s=i.i(h.a)(c,u);(o.line>=s.to||o.line<s.from)&&setTimeout(i.i(d.b)(e,function(){O==n&&l(t)}),150)}else{var f=t.clientY<A.top?-20:t.clientY>A.bottom?20:0;f&&setTimeout(i.i(d.b)(e,function(){O==n&&(c.scroller.scrollTop+=f,l(t))}),50)}}function s(t){e.state.selectingText=!1,O=1/0,i.i(C.e)(t),c.input.focus(),i.i(C.b)(document,\"mousemove\",D),i.i(C.b)(document,\"mouseup\",N),u.history.lastSelOrigin=null}var c=e.display,u=e.doc;i.i(C.e)(t);var f=void 0,m=void 0,k=u.sel,L=k.ranges;if(o&&!t.shiftKey?(m=u.sel.contains(n),f=m>-1?L[m]:new b.b(n,n)):(f=u.sel.primary(),m=u.sel.primIndex),w.p?t.shiftKey&&t.metaKey:t.altKey)r=\"rect\",o||(f=new b.b(n,n)),n=i.i(g.x)(e,t,!0,!0),m=-1;else if(\"double\"==r){var M=e.findWordAt(n);f=e.display.shift||u.extend?i.i(y.j)(u,f,M.anchor,M.head):M}else if(\"triple\"==r){var T=new b.b(i.i(p.a)(n.line,0),i.i(p.c)(u,i.i(p.a)(n.line+1,0)));f=e.display.shift||u.extend?i.i(y.j)(u,f,T.anchor,T.head):T}else f=i.i(y.j)(u,f,n);o?-1==m?(m=L.length,i.i(y.a)(u,i.i(b.c)(L.concat([f]),m),{scroll:!1,origin:\"*mouse\"})):L.length>1&&L[m].empty()&&\"single\"==r&&!t.shiftKey?(i.i(y.a)(u,i.i(b.c)(L.slice(0,m).concat(L.slice(m+1)),0),{scroll:!1,origin:\"*mouse\"}),k=u.sel):i.i(y.e)(u,m,f,S.t):(m=0,i.i(y.a)(u,new b.a([f],0),S.t),k=u.sel);var _=n,A=c.wrapper.getBoundingClientRect(),O=0,D=i.i(d.b)(e,function(e){i.i(C.m)(e)?l(e):s(e)}),N=i.i(d.b)(e,s);e.state.selectingText=N,i.i(C.c)(document,\"mousemove\",D),i.i(C.c)(document,\"mouseup\",N)}function l(e,t,n,r){var o=void 0,a=void 0;try{o=t.clientX,a=t.clientY}catch(t){return!1}if(o>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&i.i(C.e)(t);var l=e.display,s=l.lineDiv.getBoundingClientRect();if(a>s.bottom||!i.i(C.h)(e,n))return i.i(C.n)(t);a-=s.top-l.viewOffset;for(var c=0;c<e.options.gutters.length;++c){var u=l.gutters.childNodes[c];if(u&&u.getBoundingClientRect().right>=o){var f=i.i(v.f)(e.doc,a),d=e.options.gutters[c];return i.i(C.d)(e,n,e,f,d,t),i.i(C.n)(t)}}}function s(e,t){return l(e,t,\"gutterClick\",!0)}function c(e,t){i.i(m.b)(e.display,t)||u(e,t)||i.i(C.k)(e,t,\"contextmenu\")||e.display.input.onContextMenu(t)}function u(e,t){return!!i.i(C.h)(e,\"gutterContextMenu\")&&l(e,t,\"gutterContextMenu\",!1)}var f=i(35),d=i(8),h=i(49),p=i(3),v=i(4),g=i(6),m=i(22),b=i(9),y=i(14),w=i(5),x=i(1),C=i(2),k=i(24),S=i(0);t.a=n,t.b=s,t.c=c;var L=void 0,M=void 0},function(e,t,i){\"use strict\";function n(e,t){var n=i.i(y.t)(e,t.line);if(!n||n.hidden)return null;var r=i.i(b.d)(e.doc,t.line),o=i.i(y.v)(n,r,t.line),a=i.i(k.a)(r,e.doc.direction),l=\"left\";if(a){l=i.i(k.b)(a,t.ch)%2?\"right\":\"left\"}var s=i.i(y.w)(o.map,t.ch,l);return s.offset=\"right\"==s.collapse?s.end:s.start,s}function r(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}function o(e,t){return t&&(e.bad=!0),e}function a(e,t,n,r,o){function a(e){return function(t){return t.id==e}}function l(){f&&(u+=d,f=!1)}function s(e){e&&(l(),u+=e)}function c(t){if(1==t.nodeType){var n=t.getAttribute(\"cm-text\");if(null!=n)return void s(n||t.textContent.replace(/\\u200b/g,\"\"));var u=t.getAttribute(\"cm-marker\"),h=void 0;if(u){var p=e.findMarks(i.i(m.a)(r,0),i.i(m.a)(o+1,0),a(+u));return void(p.length&&(h=p[0].find())&&s(i.i(b.e)(e.doc,h.from,h.to).join(d)))}if(\"false\"==t.getAttribute(\"contenteditable\"))return;var v=/^(pre|div|p)$/i.test(t.nodeName);v&&l();for(var g=0;g<t.childNodes.length;g++)c(t.childNodes[g]);v&&(f=!0)}else 3==t.nodeType&&s(t.nodeValue)}for(var u=\"\",f=!1,d=e.doc.lineSeparator();c(t),t!=n;)t=t.nextSibling;return u}function l(e,t,n){var r=void 0;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return o(e.clipPos(i.i(m.a)(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var a=0;a<e.display.view.length;a++){var l=e.display.view[a];if(l.node==r)return s(l,t,n)}}function s(e,t,n){function r(t,n,r){for(var o=-1;o<(d?d.length:0);o++)for(var a=o<0?f.map:d[o],l=0;l<a.length;l+=3){var s=a[l+2];if(s==t||s==n){var c=i.i(b.a)(o<0?e.line:e.rest[o]),u=a[l]+r;return(r<0||s!=t)&&(u=a[l+(r?1:0)]),i.i(m.a)(c,u)}}}var a=e.text.firstChild,l=!1;if(!t||!i.i(L.b)(a,t))return o(i.i(m.a)(i.i(b.a)(e.line),0),!0);if(t==a&&(l=!0,t=a.childNodes[n],n=0,!t)){var s=e.rest?i.i(T.f)(e.rest):e.line;return o(i.i(m.a)(i.i(b.a)(s),s.text.length),l)}var c=3==t.nodeType?t:null,u=t;for(c||1!=t.childNodes.length||3!=t.firstChild.nodeType||(c=t.firstChild,n&&(n=c.nodeValue.length));u.parentNode!=a;)u=u.parentNode;var f=e.measure,d=f.maps,h=r(c,u,n);if(h)return o(h,l);for(var p=u.nextSibling,v=c?c.nodeValue.length-n:0;p;p=p.nextSibling){if(h=r(p,p.firstChild,0))return o(i.i(m.a)(h.line,h.ch-v),l);v+=p.textContent.length}for(var g=u.previousSibling,y=n;g;g=g.previousSibling){if(h=r(g,g.firstChild,-1))return o(i.i(m.a)(h.line,h.ch+y),l);y+=g.textContent.length}}var c=i(16),u=i.n(c),f=i(17),d=i.n(f),h=i(8),p=i(20),v=i(18),g=i(63),m=i(3),b=i(4),y=i(6),w=i(23),x=i(9),C=i(14),k=i(32),S=i(5),L=i(1),M=i(2),T=i(0),_=function(){function e(t){u()(this,e),this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new T.o,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null}return d()(e,[{key:\"init\",value:function(e){function t(e){if(!i.i(M.k)(o,e)){if(o.somethingSelected())i.i(g.c)({lineWise:!1,text:o.getSelections()}),\"cut\"==e.type&&o.replaceSelection(\"\",null,\"cut\");else{if(!o.options.lineWiseCopyCut)return;var t=i.i(g.d)(o);i.i(g.c)({lineWise:!0,text:t.text}),\"cut\"==e.type&&o.operation(function(){o.setSelections(t.ranges,0,T.h),o.replaceSelection(\"\",null,\"cut\")})}if(e.clipboardData){e.clipboardData.clearData();var n=g.e.text.join(\"\\n\");if(e.clipboardData.setData(\"Text\",n),e.clipboardData.getData(\"Text\")==n)return void e.preventDefault()}var l=i.i(g.f)(),s=l.firstChild;o.display.lineSpace.insertBefore(l,o.display.lineSpace.firstChild),s.value=g.e.text.join(\"\\n\");var c=document.activeElement;i.i(L.k)(s),setTimeout(function(){o.display.lineSpace.removeChild(l),c.focus(),c==a&&r.showPrimarySelection()},50)}}var n=this,r=this,o=r.cm,a=r.div=e.lineDiv;i.i(g.a)(a,o.options.spellcheck),i.i(M.c)(a,\"paste\",function(e){i.i(M.k)(o,e)||i.i(g.b)(e,o)||S.d<=11&&setTimeout(i.i(h.b)(o,function(){return n.updateFromDOM()}),20)}),i.i(M.c)(a,\"compositionstart\",function(e){n.composing={data:e.data,done:!1}}),i.i(M.c)(a,\"compositionupdate\",function(e){n.composing||(n.composing={data:e.data,done:!1})}),i.i(M.c)(a,\"compositionend\",function(e){n.composing&&(e.data!=n.composing.data&&n.readFromDOMSoon(),n.composing.done=!0)}),i.i(M.c)(a,\"touchstart\",function(){return r.forceCompositionEnd()}),i.i(M.c)(a,\"input\",function(){n.composing||n.readFromDOMSoon()}),i.i(M.c)(a,\"copy\",t),i.i(M.c)(a,\"cut\",t)}},{key:\"prepareSelection\",value:function(){var e=i.i(p.c)(this.cm,!1);return e.focus=this.cm.state.focused,e}},{key:\"showSelection\",value:function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))}},{key:\"showPrimarySelection\",value:function(){var e=window.getSelection(),t=this.cm,r=t.doc.sel.primary(),o=r.from(),a=r.to();if(t.display.viewTo==t.display.viewFrom||o.line>=t.display.viewTo||a.line<t.display.viewFrom)return void e.removeAllRanges();var s=l(t,e.anchorNode,e.anchorOffset),c=l(t,e.focusNode,e.focusOffset);if(!s||s.bad||!c||c.bad||0!=i.i(m.b)(i.i(m.g)(s,c),o)||0!=i.i(m.b)(i.i(m.h)(s,c),a)){var u=t.display.view,f=o.line>=t.display.viewFrom&&n(t,o)||{node:u[0].measure.map[2],offset:0},d=a.line<t.display.viewTo&&n(t,a);if(!d){var h=u[u.length-1].measure,p=h.maps?h.maps[h.maps.length-1]:h.map;d={node:p[p.length-1],offset:p[p.length-2]-p[p.length-3]}}if(!f||!d)return void e.removeAllRanges();var v=e.rangeCount&&e.getRangeAt(0),g=void 0;try{g=i.i(L.f)(f.node,f.offset,d.offset,d.node)}catch(e){}g&&(!S.i&&t.state.focused?(e.collapse(f.node,f.offset),g.collapsed||(e.removeAllRanges(),e.addRange(g))):(e.removeAllRanges(),e.addRange(g)),v&&null==e.anchorNode?e.addRange(v):S.i&&this.startGracePeriod()),this.rememberSelection()}}},{key:\"startGracePeriod\",value:function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)}},{key:\"showMultipleSelections\",value:function(e){i.i(L.d)(this.cm.display.cursorDiv,e.cursors),i.i(L.d)(this.cm.display.selectionDiv,e.selection)}},{key:\"rememberSelection\",value:function(){var e=window.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset}},{key:\"selectionInEditor\",value:function(){var e=window.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return i.i(L.b)(this.div,t)}},{key:\"focus\",value:function(){\"nocursor\"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())}},{key:\"blur\",value:function(){this.div.blur()}},{key:\"getField\",value:function(){return this.div}},{key:\"supportsTouch\",value:function(){return!0}},{key:\"receivedFocus\",value:function(){function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))}var t=this;this.selectionInEditor()?this.pollSelection():i.i(h.a)(this.cm,function(){return t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,e)}},{key:\"selectionChanged\",value:function(){var e=window.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset}},{key:\"pollSelection\",value:function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=window.getSelection(),t=this.cm;if(S.f&&S.e&&this.cm.options.gutters.length&&r(e.anchorNode))return this.cm.triggerOnKeyDown({type:\"keydown\",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var n=l(t,e.anchorNode,e.anchorOffset),o=l(t,e.focusNode,e.focusOffset);n&&o&&i.i(h.a)(t,function(){i.i(C.a)(t.doc,i.i(x.d)(n,o),T.h),(n.bad||o.bad)&&(t.curOp.selectionChanged=!0)})}}}},{key:\"pollContent\",value:function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e=this.cm,t=e.display,n=e.doc.sel.primary(),r=n.from(),o=n.to();if(0==r.ch&&r.line>e.firstLine()&&(r=i.i(m.a)(r.line-1,i.i(b.d)(e.doc,r.line-1).length)),o.ch==i.i(b.d)(e.doc,o.line).text.length&&o.line<e.lastLine()&&(o=i.i(m.a)(o.line+1,0)),r.line<t.viewFrom||o.line>t.viewTo-1)return!1;var l=void 0,s=void 0,c=void 0;r.line==t.viewFrom||0==(l=i.i(y.r)(e,r.line))?(s=i.i(b.a)(t.view[0].line),c=t.view[0].node):(s=i.i(b.a)(t.view[l].line),c=t.view[l-1].node.nextSibling);var u=i.i(y.r)(e,o.line),f=void 0,d=void 0;if(u==t.view.length-1?(f=t.viewTo-1,d=t.lineDiv.lastChild):(f=i.i(b.a)(t.view[u+1].line)-1,d=t.view[u+1].node.previousSibling),!c)return!1;for(var h=e.doc.splitLines(a(e,c,d,s,f)),p=i.i(b.e)(e.doc,i.i(m.a)(s,0),i.i(m.a)(f,i.i(b.d)(e.doc,f).text.length));h.length>1&&p.length>1;)if(i.i(T.f)(h)==i.i(T.f)(p))h.pop(),p.pop(),f--;else{if(h[0]!=p[0])break;h.shift(),p.shift(),s++}for(var v=0,g=0,x=h[0],C=p[0],k=Math.min(x.length,C.length);v<k&&x.charCodeAt(v)==C.charCodeAt(v);)++v;for(var S=i.i(T.f)(h),L=i.i(T.f)(p),M=Math.min(S.length-(1==h.length?v:0),L.length-(1==p.length?v:0));g<M&&S.charCodeAt(S.length-g-1)==L.charCodeAt(L.length-g-1);)++g;if(1==h.length&&1==p.length&&s==r.line)for(;v&&v>r.ch&&S.charCodeAt(S.length-g-1)==L.charCodeAt(L.length-g-1);)v--,g++;h[h.length-1]=S.slice(0,S.length-g).replace(/^\\u200b+/,\"\"),h[0]=h[0].slice(v).replace(/\\u200b+$/,\"\");var _=i.i(m.a)(s,v),A=i.i(m.a)(f,p.length?i.i(T.f)(p).length-g:0);return h.length>1||h[0]||i.i(m.b)(_,A)?(i.i(w.b)(e.doc,h,_,A,\"+input\"),!0):void 0}},{key:\"ensurePolled\",value:function(){this.forceCompositionEnd()}},{key:\"reset\",value:function(){this.forceCompositionEnd()}},{key:\"forceCompositionEnd\",value:function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())}},{key:\"readFromDOMSoon\",value:function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))}},{key:\"updateFromDOM\",value:function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||i.i(h.a)(this.cm,function(){return i.i(v.b)(e.cm)})}},{key:\"setUneditable\",value:function(e){e.contentEditable=\"false\"}},{key:\"onKeyPress\",value:function(e){0!=e.charCode&&(e.preventDefault(),this.cm.isReadOnly()||i.i(h.b)(this.cm,g.g)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))}},{key:\"readOnlyChanged\",value:function(e){this.div.contentEditable=String(\"nocursor\"!=e)}},{key:\"onContextMenu\",value:function(){}},{key:\"resetPosition\",value:function(){}}]),e}();t.a=_,_.prototype.needsContentAttribute=!0},function(e,t,i){\"use strict\";var n=i(16),r=i.n(n),o=i(17),a=i.n(o),l=i(8),s=i(20),c=i(63),u=i(6),f=i(22),d=i(9),h=i(14),p=i(5),v=i(1),g=i(2),m=i(24),b=i(0),y=function(){function e(t){r()(this,e),this.cm=t,this.prevInput=\"\",this.pollingFast=!1,this.polling=new b.o,this.inaccurateSelection=!1,this.hasSelection=!1,this.composing=null}return a()(e,[{key:\"init\",value:function(e){function t(e){if(!i.i(g.k)(o,e)){if(o.somethingSelected())i.i(c.c)({lineWise:!1,text:o.getSelections()}),r.inaccurateSelection&&(r.prevInput=\"\",r.inaccurateSelection=!1,l.value=c.e.text.join(\"\\n\"),i.i(v.k)(l));else{if(!o.options.lineWiseCopyCut)return;var t=i.i(c.d)(o);i.i(c.c)({lineWise:!0,text:t.text}),\"cut\"==e.type?o.setSelections(t.ranges,null,b.h):(r.prevInput=\"\",l.value=t.text.join(\"\\n\"),i.i(v.k)(l))}\"cut\"==e.type&&(o.state.cutIncoming=!0)}}var n=this,r=this,o=this.cm,a=this.wrapper=i.i(c.f)(),l=this.textarea=a.firstChild;e.wrapper.insertBefore(a,e.wrapper.firstChild),p.a&&(l.style.width=\"0px\"),i.i(g.c)(l,\"input\",function(){p.b&&p.d>=9&&n.hasSelection&&(n.hasSelection=null),r.poll()}),i.i(g.c)(l,\"paste\",function(e){i.i(g.k)(o,e)||i.i(c.b)(e,o)||(o.state.pasteIncoming=!0,r.fastPoll())}),i.i(g.c)(l,\"cut\",t),i.i(g.c)(l,\"copy\",t),i.i(g.c)(e.scroller,\"paste\",function(t){i.i(f.b)(e,t)||i.i(g.k)(o,t)||(o.state.pasteIncoming=!0,r.focus())}),i.i(g.c)(e.lineSpace,\"selectstart\",function(t){i.i(f.b)(e,t)||i.i(g.e)(t)}),i.i(g.c)(l,\"compositionstart\",function(){var e=o.getCursor(\"from\");r.composing&&r.composing.range.clear(),r.composing={start:e,range:o.markText(e,o.getCursor(\"to\"),{className:\"CodeMirror-composing\"})}}),i.i(g.c)(l,\"compositionend\",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})}},{key:\"prepareSelection\",value:function(){var e=this.cm,t=e.display,n=e.doc,r=i.i(s.c)(e);if(e.options.moveInputWithCursor){var o=i.i(u.h)(e,n.sel.primary().head,\"div\"),a=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,o.top+l.top-a.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,o.left+l.left-a.left))}return r}},{key:\"showSelection\",value:function(e){var t=this.cm,n=t.display;i.i(v.d)(n.cursorDiv,e.cursors),i.i(v.d)(n.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+\"px\",this.wrapper.style.left=e.teLeft+\"px\")}},{key:\"reset\",value:function(e){if(!this.contextMenuPending){var t=void 0,n=void 0,r=this.cm,o=r.doc;if(r.somethingSelected()){this.prevInput=\"\";var a=o.sel.primary();t=m.e&&(a.to().line-a.from().line>100||(n=r.getSelection()).length>1e3);var l=t?\"-\":n||r.getSelection();this.textarea.value=l,r.state.focused&&i.i(v.k)(this.textarea),p.b&&p.d>=9&&(this.hasSelection=l)}else e||(this.prevInput=this.textarea.value=\"\",p.b&&p.d>=9&&(this.hasSelection=null));this.inaccurateSelection=t}}},{key:\"getField\",value:function(){return this.textarea}},{key:\"supportsTouch\",value:function(){return!1}},{key:\"focus\",value:function(){if(\"nocursor\"!=this.cm.options.readOnly&&(!p.n||i.i(v.j)()!=this.textarea))try{this.textarea.focus()}catch(e){}}},{key:\"blur\",value:function(){this.textarea.blur()}},{key:\"resetPosition\",value:function(){this.wrapper.style.top=this.wrapper.style.left=0}},{key:\"receivedFocus\",value:function(){this.slowPoll()}},{key:\"slowPoll\",value:function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})}},{key:\"fastPoll\",value:function(){function e(){i.poll()||t?(i.pollingFast=!1,i.slowPoll()):(t=!0,i.polling.set(60,e))}var t=!1,i=this;i.pollingFast=!0,i.polling.set(20,e)}},{key:\"poll\",value:function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||!t.state.focused||i.i(m.f)(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var o=n.value;if(o==r&&!t.somethingSelected())return!1;if(p.b&&p.d>=9&&this.hasSelection===o||p.c&&/[\\uf700-\\uf7ff]/.test(o))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var a=o.charCodeAt(0);if(8203!=a||r||(r=\"​\"),8666==a)return this.reset(),this.cm.execCommand(\"undo\")}for(var s=0,u=Math.min(r.length,o.length);s<u&&r.charCodeAt(s)==o.charCodeAt(s);)++s;return i.i(l.a)(t,function(){i.i(c.g)(t,o.slice(s),r.length-s,null,e.composing?\"*compose\":null),o.length>1e3||o.indexOf(\"\\n\")>-1?n.value=e.prevInput=\"\":e.prevInput=o,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor(\"to\"),{className:\"CodeMirror-composing\"}))}),!0}},{key:\"ensurePolled\",value:function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)}},{key:\"onKeyPress\",value:function(){p.b&&p.d>=9&&(this.hasSelection=null),this.fastPoll()}},{key:\"onContextMenu\",value:function(e){function t(){if(null!=s.selectionStart){var e=o.somethingSelected(),t=\"​\"+(e?s.value:\"\");s.value=\"⇚\",s.value=t,r.prevInput=e?\"\":\"​\",s.selectionStart=1,s.selectionEnd=t.length,a.selForContextMenu=o.doc.sel}}function n(){if(r.contextMenuPending=!1,r.wrapper.style.cssText=m,s.style.cssText=v,p.b&&p.d<9&&a.scrollbars.setScrollTop(a.scroller.scrollTop=f),null!=s.selectionStart){(!p.b||p.b&&p.d<9)&&t();var e=0,n=function t(){a.selForContextMenu==o.doc.sel&&0==s.selectionStart&&s.selectionEnd>0&&\"​\"==r.prevInput?i.i(l.b)(o,h.d)(o):e++<10?a.detectingSelectAll=setTimeout(t,500):(a.selForContextMenu=null,a.input.reset())};a.detectingSelectAll=setTimeout(n,200)}}var r=this,o=r.cm,a=o.display,s=r.textarea,c=i.i(u.x)(o,e),f=a.scroller.scrollTop;if(c&&!p.k){o.options.resetSelectionOnContextMenu&&-1==o.doc.sel.contains(c)&&i.i(l.b)(o,h.a)(o.doc,i.i(d.d)(c),b.h);var v=s.style.cssText,m=r.wrapper.style.cssText;r.wrapper.style.cssText=\"position: absolute\";var y=r.wrapper.getBoundingClientRect();s.style.cssText=\"position: absolute; width: 30px; height: 30px;\\n      top: \"+(e.clientY-y.top-5)+\"px; left: \"+(e.clientX-y.left-5)+\"px;\\n      z-index: 1000; background: \"+(p.b?\"rgba(255, 255, 255, .05)\":\"transparent\")+\";\\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";var w=void 0;if(p.g&&(w=window.scrollY),a.input.focus(),p.g&&window.scrollTo(null,w),a.input.reset(),o.somethingSelected()||(s.value=r.prevInput=\" \"),r.contextMenuPending=!0,a.selForContextMenu=o.doc.sel,clearTimeout(a.detectingSelectAll),p.b&&p.d>=9&&t(),p.o){i.i(g.g)(e);var x=function e(){i.i(g.b)(window,\"mouseup\",e),setTimeout(n,20)};i.i(g.c)(window,\"mouseup\",x)}else setTimeout(n,50)}}},{key:\"readOnlyChanged\",value:function(e){e||this.reset()}},{key:\"setUneditable\",value:function(){}}]),e}();t.a=y,y.prototype.needsContentAttribute=!1},function(e,t,i){\"use strict\";var n=i(16),r=i.n(n),o=i(17),a=i.n(o),l=i(21),s=i(0),c=i(15);i.d(t,\"b\",function(){return u}),i.d(t,\"a\",function(){return f});var u=function(){function e(t){r()(this,e),this.lines=t,this.parent=null;for(var i=0,n=0;n<t.length;++n)t[n].parent=this,i+=t[n].height;this.height=i}return a()(e,[{key:\"chunkSize\",value:function(){return this.lines.length}},{key:\"removeInner\",value:function(e,t){for(var n=e,r=e+t;n<r;++n){var o=this.lines[n];this.height-=o.height,i.i(l.g)(o),i.i(c.a)(o,\"delete\")}this.lines.splice(e,t)}},{key:\"collapse\",value:function(e){e.push.apply(e,this.lines)}},{key:\"insertInner\",value:function(e,t,i){this.height+=i,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var n=0;n<t.length;++n)t[n].parent=this}},{key:\"iterN\",value:function(e,t,i){for(var n=e+t;e<n;++e)if(i(this.lines[e]))return!0}}]),e}(),f=function(){function e(t){r()(this,e),this.children=t;for(var i=0,n=0,o=0;o<t.length;++o){var a=t[o];i+=a.chunkSize(),n+=a.height,a.parent=this}this.size=i,this.height=n,this.parent=null}return a()(e,[{key:\"chunkSize\",value:function(){return this.size}},{key:\"removeInner\",value:function(e,t){this.size-=t;for(var i=0;i<this.children.length;++i){var n=this.children[i],r=n.chunkSize();if(e<r){var o=Math.min(t,r-e),a=n.height;if(n.removeInner(e,o),this.height-=a-n.height,r==o&&(this.children.splice(i--,1),n.parent=null),0==(t-=o))break;e=0}else e-=r}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof u))){var l=[];this.collapse(l),this.children=[new u(l)],this.children[0].parent=this}}},{key:\"collapse\",value:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)}},{key:\"insertInner\",value:function(e,t,i){this.size+=t.length,this.height+=i;for(var n=0;n<this.children.length;++n){var r=this.children[n],o=r.chunkSize();if(e<=o){if(r.insertInner(e,t,i),r.lines&&r.lines.length>50){for(var a=r.lines.length%25+25,l=a;l<r.lines.length;){var s=new u(r.lines.slice(l,l+=25));r.height-=s.height,this.children.splice(++n,0,s),s.parent=this}r.lines=r.lines.slice(0,a),this.maybeSpill()}break}e-=o}}},{key:\"maybeSpill\",value:function(){if(!(this.children.length<=10)){var t=this;do{var n=t.children.splice(t.children.length-5,5),r=new e(n);if(t.parent){t.size-=r.size,t.height-=r.height;var o=i.i(s.a)(t.parent.children,t);t.parent.children.splice(o+1,0,r)}else{var a=new e(t.children);a.parent=t,t.children=[a,r],t=a}r.parent=t.parent}while(t.children.length>10);t.parent.maybeSpill()}}},{key:\"iterN\",value:function(e,t,i){for(var n=0;n<this.children.length;++n){var r=this.children[n],o=r.chunkSize();if(e<o){var a=Math.min(t,o-e);if(r.iterN(e,a,i))return!0;if(0==(t-=a))break;e=0}else e-=o}}}]),e}()},function(e,t,i){\"use strict\";(function(e){var t=i(66),n=i.n(t);!function(t){\"object\"==(\"undefined\"==typeof exports?\"undefined\":n()(exports))&&\"object\"==n()(e)?t(i(86)):\"function\"==typeof define&&i(229)?define([\"../lib/codemirror\"],t):t(CodeMirror)}(function(e){function t(e,t,i){return/^(?:operator|sof|keyword c|case|new|export|default|[\\[{}\\(,;:]|=>)$/.test(t.lastType)||\"quasi\"==t.lastType&&/\\{\\s*$/.test(e.string.slice(0,e.pos-(i||0)))}e.defineMode(\"javascript\",function(i,r){function o(e){for(var t,i=!1,n=!1;null!=(t=e.next());){if(!i){if(\"/\"==t&&!n)return;\"[\"==t?n=!0:n&&\"]\"==t&&(n=!1)}i=!i&&\"\\\\\"==t}}function a(e,t,i){return Me=e,Te=i,t}function l(e,i){var n=e.next();if('\"'==n||\"'\"==n)return i.tokenize=s(n),i.tokenize(e,i);if(\".\"==n&&e.match(/^\\d+(?:[eE][+\\-]?\\d+)?/))return a(\"number\",\"number\");if(\".\"==n&&e.match(\"..\"))return a(\"spread\",\"meta\");if(/[\\[\\]{}\\(\\),;\\:\\.]/.test(n))return a(n);if(\"=\"==n&&e.eat(\">\"))return a(\"=>\",\"operator\");if(\"0\"==n&&e.eat(/x/i))return e.eatWhile(/[\\da-f]/i),a(\"number\",\"number\");if(\"0\"==n&&e.eat(/o/i))return e.eatWhile(/[0-7]/i),a(\"number\",\"number\");if(\"0\"==n&&e.eat(/b/i))return e.eatWhile(/[01]/i),a(\"number\",\"number\");if(/\\d/.test(n))return e.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/),a(\"number\",\"number\");if(\"/\"==n)return e.eat(\"*\")?(i.tokenize=c,c(e,i)):e.eat(\"/\")?(e.skipToEnd(),a(\"comment\",\"comment\")):t(e,i,1)?(o(e),e.match(/^\\b(([gimyu])(?![gimyu]*\\2))+\\b/),a(\"regexp\",\"string-2\")):(e.eatWhile(He),a(\"operator\",\"operator\",e.current()));if(\"`\"==n)return i.tokenize=u,u(e,i);if(\"#\"==n)return e.skipToEnd(),a(\"error\",\"error\");if(He.test(n))return\">\"==n&&i.lexical&&\">\"==i.lexical.type||e.eatWhile(He),a(\"operator\",\"operator\",e.current());if(We.test(n)){e.eatWhile(We);var r=e.current(),l=Ee.propertyIsEnumerable(r)&&Ee[r];return l&&\".\"!=i.lastType?a(l.type,l.style,r):a(\"variable\",\"variable\",r)}}function s(e){return function(t,i){var n,r=!1;if(Oe&&\"@\"==t.peek()&&t.match(Pe))return i.tokenize=l,a(\"jsonld-keyword\",\"meta\");for(;null!=(n=t.next())&&(n!=e||r);)r=!r&&\"\\\\\"==n;return r||(i.tokenize=l),a(\"string\",\"string\")}}function c(e,t){for(var i,n=!1;i=e.next();){if(\"/\"==i&&n){t.tokenize=l;break}n=\"*\"==i}return a(\"comment\",\"comment\")}function u(e,t){for(var i,n=!1;null!=(i=e.next());){if(!n&&(\"`\"==i||\"$\"==i&&e.eat(\"{\"))){t.tokenize=l;break}n=!n&&\"\\\\\"==i}return a(\"quasi\",\"string-2\",e.current())}function f(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var i=e.string.indexOf(\"=>\",e.start);if(!(i<0)){if(Ne){var n=/:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(e.string.slice(e.start,i));n&&(i=n.index)}for(var r=0,o=!1,a=i-1;a>=0;--a){var l=e.string.charAt(a),s=Ie.indexOf(l);if(s>=0&&s<3){if(!r){++a;break}if(0==--r){\"(\"==l&&(o=!0);break}}else if(s>=3&&s<6)++r;else if(We.test(l))o=!0;else{if(/[\"'\\/]/.test(l))return;if(o&&!r){++a;break}}}o&&!r&&(t.fatArrowAt=a)}}function d(e,t,i,n,r,o){this.indented=e,this.column=t,this.type=i,this.prev=r,this.info=o,null!=n&&(this.align=n)}function h(e,t){for(var i=e.localVars;i;i=i.next)if(i.name==t)return!0;for(var n=e.context;n;n=n.prev)for(var i=n.vars;i;i=i.next)if(i.name==t)return!0}function p(e,t,i,n,r){var o=e.cc;for(ze.state=e,ze.stream=r,ze.marked=null,ze.cc=o,ze.style=t,e.lexical.hasOwnProperty(\"align\")||(e.lexical.align=!0);;){if((o.length?o.pop():De?S:k)(i,n)){for(;o.length&&o[o.length-1].lex;)o.pop()();return ze.marked?ze.marked:\"variable\"==i&&h(e,n)?\"variable-2\":t}}}function v(){for(var e=arguments.length-1;e>=0;e--)ze.cc.push(arguments[e])}function g(){return v.apply(null,arguments),!0}function m(e){function t(t){for(var i=t;i;i=i.next)if(i.name==e)return!0;return!1}var i=ze.state;if(ze.marked=\"def\",i.context){if(t(i.localVars))return;i.localVars={name:e,next:i.localVars}}else{if(t(i.globalVars))return;r.globalVars&&(i.globalVars={name:e,next:i.globalVars})}}function b(){ze.state.context={prev:ze.state.context,vars:ze.state.localVars},ze.state.localVars=Fe}function y(){ze.state.localVars=ze.state.context.vars,ze.state.context=ze.state.context.prev}function w(e,t){var i=function(){var i=ze.state,n=i.indented;if(\"stat\"==i.lexical.type)n=i.lexical.indented;else for(var r=i.lexical;r&&\")\"==r.type&&r.align;r=r.prev)n=r.indented;i.lexical=new d(n,ze.stream.column(),e,null,i.lexical,t)};return i.lex=!0,i}function x(){var e=ze.state;e.lexical.prev&&(\")\"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function C(e){function t(i){return i==e?g():\";\"==e?v():g(t)}return t}function k(e,t){return\"var\"==e?g(w(\"vardef\",t.length),J,C(\";\"),x):\"keyword a\"==e?g(w(\"form\"),M,k,x):\"keyword b\"==e?g(w(\"form\"),k,x):\"{\"==e?g(w(\"}\"),K,x):\";\"==e?g():\"if\"==e?(\"else\"==ze.state.lexical.info&&ze.state.cc[ze.state.cc.length-1]==x&&ze.state.cc.pop()(),g(w(\"form\"),M,k,x,re)):\"function\"==e?g(ue):\"for\"==e?g(w(\"form\"),oe,k,x):\"variable\"==e?Ne&&\"type\"==t?(ze.marked=\"keyword\",g(Y,C(\"operator\"),Y,C(\";\"))):g(w(\"stat\"),z):\"switch\"==e?g(w(\"form\"),M,w(\"}\",\"switch\"),C(\"{\"),K,x,x):\"case\"==e?g(S,C(\":\")):\"default\"==e?g(C(\":\")):\"catch\"==e?g(w(\"form\"),b,C(\"(\"),fe,C(\")\"),k,x,y):\"class\"==e?g(w(\"form\"),he,x):\"export\"==e?g(w(\"stat\"),me,x):\"import\"==e?g(w(\"stat\"),ye,x):\"module\"==e?g(w(\"form\"),ee,w(\"}\"),C(\"{\"),K,x,x):\"async\"==e?g(k):\"@\"==t?g(S,k):v(w(\"stat\"),S,C(\";\"),x)}function S(e){return T(e,!1)}function L(e){return T(e,!0)}function M(e){return\"(\"!=e?v():g(w(\")\"),S,C(\")\"),x)}function T(e,t){if(ze.state.fatArrowAt==ze.stream.start){var i=t?H:E;if(\"(\"==e)return g(b,w(\")\"),U(ee,\")\"),x,C(\"=>\"),i,y);if(\"variable\"==e)return v(b,ee,C(\"=>\"),i,y)}var n=t?D:O;return Re.hasOwnProperty(e)?g(n):\"function\"==e?g(ue,n):\"class\"==e?g(w(\"form\"),de,x):\"keyword c\"==e||\"async\"==e?g(t?A:_):\"(\"==e?g(w(\")\"),_,C(\")\"),x,n):\"operator\"==e||\"spread\"==e?g(t?L:S):\"[\"==e?g(w(\"]\"),Se,x,n):\"{\"==e?G(B,\"}\",null,n):\"quasi\"==e?v(N,n):\"new\"==e?g(P(t)):g()}function _(e){return e.match(/[;\\}\\)\\],]/)?v():v(S)}function A(e){return e.match(/[;\\}\\)\\],]/)?v():v(L)}function O(e,t){return\",\"==e?g(S):D(e,t,!1)}function D(e,t,i){var n=0==i?O:D,r=0==i?S:L;return\"=>\"==e?g(b,i?H:E,y):\"operator\"==e?/\\+\\+|--/.test(t)?g(n):\"?\"==t?g(S,C(\":\"),r):g(r):\"quasi\"==e?v(N,n):\";\"!=e?\"(\"==e?G(L,\")\",\"call\",n):\".\"==e?g(F,n):\"[\"==e?g(w(\"]\"),_,C(\"]\"),x,n):void 0:void 0}function N(e,t){return\"quasi\"!=e?v():\"${\"!=t.slice(t.length-2)?g(N):g(S,W)}function W(e){if(\"}\"==e)return ze.marked=\"string-2\",ze.state.tokenize=u,g(N)}function E(e){return f(ze.stream,ze.state),v(\"{\"==e?k:S)}function H(e){return f(ze.stream,ze.state),v(\"{\"==e?k:L)}function P(e){return function(t){return\".\"==t?g(e?R:I):v(e?L:S)}}function I(e,t){if(\"target\"==t)return ze.marked=\"keyword\",g(O)}function R(e,t){if(\"target\"==t)return ze.marked=\"keyword\",g(D)}function z(e){return\":\"==e?g(x,k):v(O,C(\";\"),x)}function F(e){if(\"variable\"==e)return ze.marked=\"property\",g()}function B(e,t){return\"async\"==e?(ze.marked=\"property\",g(B)):\"variable\"==e||\"keyword\"==ze.style?(ze.marked=\"property\",g(\"get\"==t||\"set\"==t?j:V)):\"number\"==e||\"string\"==e?(ze.marked=Oe?\"property\":ze.style+\" property\",g(V)):\"jsonld-keyword\"==e?g(V):\"modifier\"==e?g(B):\"[\"==e?g(S,C(\"]\"),V):\"spread\"==e?g(S):\":\"==e?v(V):void 0}function j(e){return\"variable\"!=e?v(V):(ze.marked=\"property\",g(ue))}function V(e){return\":\"==e?g(L):\"(\"==e?v(ue):void 0}function U(e,t,i){function n(r,o){if(i?i.indexOf(r)>-1:\",\"==r){var a=ze.state.lexical;return\"call\"==a.info&&(a.pos=(a.pos||0)+1),g(function(i,n){return i==t||n==t?v():v(e)},n)}return r==t||o==t?g():g(C(t))}return function(i,r){return i==t||r==t?g():v(e,n)}}function G(e,t,i){for(var n=3;n<arguments.length;n++)ze.cc.push(arguments[n]);return g(w(t,i),U(e,t),x)}function K(e){return\"}\"==e?g():v(k,K)}function q(e,t){if(Ne){if(\":\"==e)return g(Y);if(\"?\"==t)return g(q)}}function Y(e){return\"variable\"==e?(ze.marked=\"variable-3\",g(Z)):\"string\"==e||\"number\"==e||\"atom\"==e?g(Z):\"{\"==e?g(w(\"}\"),U(X,\"}\",\",;\"),x):\"(\"==e?g(U(Q,\")\"),$):void 0}function $(e){if(\"=>\"==e)return g(Y)}function X(e,t){return\"variable\"==e||\"keyword\"==ze.style?(ze.marked=\"property\",g(X)):\"?\"==t?g(X):\":\"==e?g(Y):void 0}function Q(e){return\"variable\"==e?g(Q):\":\"==e?g(Y):void 0}function Z(e,t){return\"<\"==t?g(w(\">\"),U(Y,\">\"),x,Z):\"|\"==t||\".\"==e?g(Y):\"[\"==e?g(C(\"]\"),Z):void 0}function J(){return v(ee,q,ie,ne)}function ee(e,t){return\"modifier\"==e?g(ee):\"variable\"==e?(m(t),g()):\"spread\"==e?g(ee):\"[\"==e?G(ee,\"]\"):\"{\"==e?G(te,\"}\"):void 0}function te(e,t){return\"variable\"!=e||ze.stream.match(/^\\s*:/,!1)?(\"variable\"==e&&(ze.marked=\"property\"),\"spread\"==e?g(ee):\"}\"==e?v():g(C(\":\"),ee,ie)):(m(t),g(ie))}function ie(e,t){if(\"=\"==t)return g(L)}function ne(e){if(\",\"==e)return g(J)}function re(e,t){if(\"keyword b\"==e&&\"else\"==t)return g(w(\"form\",\"else\"),k,x)}function oe(e){if(\"(\"==e)return g(w(\")\"),ae,C(\")\"),x)}function ae(e){return\"var\"==e?g(J,C(\";\"),se):\";\"==e?g(se):\"variable\"==e?g(le):v(S,C(\";\"),se)}function le(e,t){return\"in\"==t||\"of\"==t?(ze.marked=\"keyword\",g(S)):g(O,se)}function se(e,t){return\";\"==e?g(ce):\"in\"==t||\"of\"==t?(ze.marked=\"keyword\",g(S)):v(S,C(\";\"),ce)}function ce(e){\")\"!=e&&g(S)}function ue(e,t){return\"*\"==t?(ze.marked=\"keyword\",g(ue)):\"variable\"==e?(m(t),g(ue)):\"(\"==e?g(b,w(\")\"),U(fe,\")\"),x,q,k,y):Ne&&\"<\"==t?g(w(\">\"),U(Y,\">\"),x,ue):void 0}function fe(e){return\"spread\"==e?g(fe):v(ee,q,ie)}function de(e,t){return\"variable\"==e?he(e,t):pe(e,t)}function he(e,t){if(\"variable\"==e)return m(t),g(pe)}function pe(e,t){return\"<\"==t?g(w(\">\"),U(Y,\">\"),x,pe):\"extends\"==t||\"implements\"==t||Ne&&\",\"==e?g(Ne?Y:S,pe):\"{\"==e?g(w(\"}\"),ve,x):void 0}function ve(e,t){return\"variable\"==e||\"keyword\"==ze.style?(\"async\"==t||\"static\"==t||\"get\"==t||\"set\"==t||Ne&&(\"public\"==t||\"private\"==t||\"protected\"==t||\"readonly\"==t||\"abstract\"==t))&&ze.stream.match(/^\\s+[\\w$\\xa1-\\uffff]/,!1)?(ze.marked=\"keyword\",g(ve)):(ze.marked=\"property\",g(Ne?ge:ue,ve)):\"[\"==e?g(S,C(\"]\"),Ne?ge:ue,ve):\"*\"==t?(ze.marked=\"keyword\",g(ve)):\";\"==e?g(ve):\"}\"==e?g():\"@\"==t?g(S,ve):void 0}function ge(e,t){return\"?\"==t?g(ge):\":\"==e?g(Y,ie):\"=\"==t?g(L):v(ue)}function me(e,t){return\"*\"==t?(ze.marked=\"keyword\",g(ke,C(\";\"))):\"default\"==t?(ze.marked=\"keyword\",g(S,C(\";\"))):\"{\"==e?g(U(be,\"}\"),ke,C(\";\")):v(k)}function be(e,t){return\"as\"==t?(ze.marked=\"keyword\",g(C(\"variable\"))):\"variable\"==e?v(L,be):void 0}function ye(e){return\"string\"==e?g():v(we,xe,ke)}function we(e,t){return\"{\"==e?G(we,\"}\"):(\"variable\"==e&&m(t),\"*\"==t&&(ze.marked=\"keyword\"),g(Ce))}function xe(e){if(\",\"==e)return g(we,xe)}function Ce(e,t){if(\"as\"==t)return ze.marked=\"keyword\",g(we)}function ke(e,t){if(\"from\"==t)return ze.marked=\"keyword\",g(S)}function Se(e){return\"]\"==e?g():v(U(L,\"]\"))}function Le(e,t){return\"operator\"==e.lastType||\",\"==e.lastType||He.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}var Me,Te,_e=i.indentUnit,Ae=r.statementIndent,Oe=r.jsonld,De=r.json||Oe,Ne=r.typescript,We=r.wordCharacters||/[\\w$\\xa1-\\uffff]/,Ee=function(){function e(e){return{type:e,style:\"keyword\"}}var t=e(\"keyword a\"),i=e(\"keyword b\"),n=e(\"keyword c\"),r=e(\"operator\"),o={type:\"atom\",style:\"atom\"},a={if:e(\"if\"),while:t,with:t,else:i,do:i,try:i,finally:i,return:n,break:n,continue:n,new:e(\"new\"),delete:n,throw:n,debugger:n,var:e(\"var\"),const:e(\"var\"),let:e(\"var\"),function:e(\"function\"),catch:e(\"catch\"),for:e(\"for\"),switch:e(\"switch\"),case:e(\"case\"),default:e(\"default\"),in:r,typeof:r,instanceof:r,true:o,false:o,null:o,undefined:o,NaN:o,Infinity:o,this:e(\"this\"),class:e(\"class\"),super:e(\"atom\"),yield:n,export:e(\"export\"),import:e(\"import\"),extends:n,await:n,async:e(\"async\")};if(Ne){var l={type:\"variable\",style:\"variable-3\"},s={interface:e(\"class\"),implements:n,namespace:n,module:e(\"module\"),enum:e(\"module\"),public:e(\"modifier\"),private:e(\"modifier\"),protected:e(\"modifier\"),abstract:e(\"modifier\"),as:r,string:l,number:l,boolean:l,any:l};for(var c in s)a[c]=s[c]}return a}(),He=/[+\\-*&%=<>!?|~^@]/,Pe=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/,Ie=\"([{}])\",Re={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,\"jsonld-keyword\":!0},ze={state:null,column:null,marked:null,cc:null},Fe={name:\"this\",next:{name:\"arguments\"}};return x.lex=!0,{startState:function(e){var t={tokenize:l,lastType:\"sof\",cc:[],lexical:new d((e||0)-_e,0,\"block\",!1),localVars:r.localVars,context:r.localVars&&{vars:r.localVars},indented:e||0};return r.globalVars&&\"object\"==n()(r.globalVars)&&(t.globalVars=r.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty(\"align\")||(t.lexical.align=!1),t.indented=e.indentation(),f(e,t)),t.tokenize!=c&&e.eatSpace())return null;var i=t.tokenize(e,t);return\"comment\"==Me?i:(t.lastType=\"operator\"!=Me||\"++\"!=Te&&\"--\"!=Te?Me:\"incdec\",p(t,i,Me,Te,e))},indent:function(t,i){if(t.tokenize==c)return e.Pass;if(t.tokenize!=l)return 0;var n,o=i&&i.charAt(0),a=t.lexical;if(!/^\\s*else\\b/.test(i))for(var s=t.cc.length-1;s>=0;--s){var u=t.cc[s];if(u==x)a=a.prev;else if(u!=re)break}for(;(\"stat\"==a.type||\"form\"==a.type)&&(\"}\"==o||(n=t.cc[t.cc.length-1])&&(n==O||n==D)&&!/^[,\\.=+\\-*:?[\\(]/.test(i));)a=a.prev;Ae&&\")\"==a.type&&\"stat\"==a.prev.type&&(a=a.prev);var f=a.type,d=o==f;return\"vardef\"==f?a.indented+(\"operator\"==t.lastType||\",\"==t.lastType?a.info+1:0):\"form\"==f&&\"{\"==o?a.indented:\"form\"==f?a.indented+_e:\"stat\"==f?a.indented+(Le(t,i)?Ae||_e:0):\"switch\"!=a.info||d||0==r.doubleIndentSwitch?a.align?a.column+(d?0:1):a.indented+(d?0:_e):a.indented+(/^(?:case|default)\\b/.test(i)?_e:2*_e)},electricInput:/^\\s*(?:case .*?:|default:|\\{|\\})$/,blockCommentStart:De?null:\"/*\",blockCommentEnd:De?null:\"*/\",lineComment:De?null:\"//\",fold:\"brace\",closeBrackets:\"()[]{}''\\\"\\\"``\",helperType:De?\"json\":\"javascript\",jsonldMode:Oe,jsonMode:De,expressionAllowed:t,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=S&&t!=L||e.cc.pop()}}}),e.registerHelper(\"wordChars\",\"javascript\",/[\\w$]/),e.defineMIME(\"text/javascript\",\"javascript\"),e.defineMIME(\"text/ecmascript\",\"javascript\"),e.defineMIME(\"application/javascript\",\"javascript\"),e.defineMIME(\"application/x-javascript\",\"javascript\"),e.defineMIME(\"application/ecmascript\",\"javascript\"),e.defineMIME(\"application/json\",{name:\"javascript\",json:!0}),e.defineMIME(\"application/x-json\",{name:\"javascript\",json:!0}),e.defineMIME(\"application/ld+json\",{name:\"javascript\",jsonld:!0}),e.defineMIME(\"text/typescript\",{name:\"javascript\",typescript:!0}),e.defineMIME(\"application/typescript\",{name:\"javascript\",typescript:!0})})}).call(t,i(230)(e))},function(e,t,i){\"use strict\";(function(e){Object.defineProperty(t,\"__esModule\",{value:!0});var n=i(60),r=i(117),o=i.n(r),a=i(115),l=i(116),s=i(80),c=i.n(s),u=i(114);n.a.config.productionTip=!1,n.a.use(u.a),e.axios=c.a,c.a.defaults.baseURL=\"http://code.smallcfj.club/api\",new n.a({el:\"#app\",router:a.a,store:l.a,template:\"<App/>\",components:{App:o.a}})}).call(t,i(46))},function(e,t,i){\"use strict\";var n=i(149),r={add:\"/add\",codeList:\"/codeList\",codeDetail:\"/codeDetail\",getVerify:\"/verify\"};t.a={actions:{add:function(e,t){e.state;return i.i(n.a)(r.add,t)},codeList:function(){return i.i(n.b)(r.codeList)},codeDetail:function(e,t){e.state;return i.i(n.b)(r.codeDetail,{id:t})},getVerify:function(){return i.i(n.b)(r.getVerify)}}}},function(e,t,i){\"use strict\";function n(e,t){return new f.a(function(i,n){h.a.post(e,t).then(function(e){200===e.status?i(e.data):n(e.data.message)}).catch(function(e){n(e)})})}function r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(arguments.length>2&&void 0!==arguments[2]&&arguments[2]){var i=e+t.toString(),n=window.sessionStorage.getItem(i);return new f.a(function(r,a){n?r(JSON.parse(n)):o(e,t).then(function(e){window.sessionStorage.setItem(i,c()(e)),r(e)}).catch(function(e){a(e)})})}return o(e,t)}function o(e,t){return new f.a(function(i,n){if(l()(t).length>0){e+=\"?\";for(var r in t)e+=r+\"=\"+t[r]+\"&\";e=e.substring(0,e.length-1)}h.a.get(e).then(function(e){200===e.status?i(e.data):n(e.data.message)}).catch(function(e){n(e)})})}var a=i(159),l=i.n(a),s=i(156),c=i.n(s),u=i(160),f=i.n(u),d=i(80),h=i.n(d);t.a=n,t.b=r},function(e,t,i){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={name:\"app\"}},function(module,__webpack_exports__,__webpack_require__){\"use strict\";Object.defineProperty(__webpack_exports__,\"__esModule\",{value:!0});var __WEBPACK_IMPORTED_MODULE_0__assets_CodeMirror_lib_codemirror__=__webpack_require__(86),__WEBPACK_IMPORTED_MODULE_1__assets_CodeMirror_mode_javascript__=__webpack_require__(146),__WEBPACK_IMPORTED_MODULE_2__popSave_vue__=__webpack_require__(218),__WEBPACK_IMPORTED_MODULE_2__popSave_vue___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__popSave_vue__),__WEBPACK_IMPORTED_MODULE_3__popAlert_vue__=__webpack_require__(217),__WEBPACK_IMPORTED_MODULE_3__popAlert_vue___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__popAlert_vue__),__WEBPACK_IMPORTED_MODULE_4__popShare_vue__=__webpack_require__(219),__WEBPACK_IMPORTED_MODULE_4__popShare_vue___default=__webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4__popShare_vue__);__webpack_exports__.default={components:{\"pop-save\":__WEBPACK_IMPORTED_MODULE_2__popSave_vue___default.a,\"pop-alert\":__WEBPACK_IMPORTED_MODULE_3__popAlert_vue___default.a,\"pop-share\":__WEBPACK_IMPORTED_MODULE_4__popShare_vue___default.a},data:function(){return{editor:null,dataConsole:[],dataProject:[],preY:0,boxCodeHeight:300,currentId:\"\",currentTitle:\"\",isShowAside:!0,popSaveOpen:!1,alertText:\"\",shareCodeId:\"\"}},mounted:function(){this.editor=__WEBPACK_IMPORTED_MODULE_0__assets_CodeMirror_lib_codemirror__.default.fromTextArea(this.$refs.codeEditor,{mode:\"text/javascript\",lineNumbers:!0,lineWrapping:!0,indentUnit:4,foldGutter:!0,styleActiveLine:!0,theme:\"blackboard\",gutters:[\"CodeMirror-linenumbers\",\"CodeMirror-foldgutter\"]}),console.log=this.log,window.onmousedown=this.ctrlMouseDown,window.onmousemove=this.ctrlMouseMove,window.onmouseup=this.ctrlMouseUp,document.addEventListener(\"mouseleave\",this.mouseLeaveWindow);var e=this;this.$store.dispatch(\"codeList\").then(function(t){t.success&&(e.dataProject=t.list)});var t=this.$route.query.Cid;t&&this.loadCode(t)},methods:{mouseLeaveWindow:function(e){this.preY=0},ctrlMouseDown:function(e){for(var t=e.target||e.srcElement;t;)t.className&&t.className.indexOf(\"box-control\")>=0&&(this.preY=e.clientY),t=t.parentNode},ctrlMouseMove:function(e){var t=e.clientY;this.preY<=0||(e.preventDefault(),this.boxCodeHeight+=t-this.preY,this.boxCodeHeight<50?this.boxCodeHeight=50:this.boxCodeHeight>document.body.clientHeight-100?this.boxCodeHeight=document.body.clientHeight-100:this.preY=t)},ctrlMouseUp:function(e){this.preY=0},run:function run(){eval(this.editor.getValue())},log:function(e){this.dataConsole.unshift({type:\"log\",time:parseInt(Date.now()/1e3),msg:e})},clearConsole:function(){this.dataConsole=[]},submit:function(e){var t=this;e.content=this.editor.getValue(),this.$store.dispatch(\"add\",e).then(function(e){e.success?t.alertText=\"提交成功!\":t.alertText=e.msg})},loadCode:function(e){var t=this;t.$store.dispatch(\"codeDetail\",e).then(function(i){i.success&&(t.currentId=e,t.currentTitle=i.title,t.editor.setValue(i.content))})},add:function(){this.currentTitle=\"\",this.editor.setValue(\"\"),this.clearConsole()},alertClose:function(){this.alertText=\"\",this.currentId=\"\",this.currentTitle=\"\",this.editor.setValue(\"\")},share:function(e){this.shareCodeId=e},shareClose:function(){this.shareCodeId=\"\"}}}},function(e,t,i){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=i(79),r=i.n(n);t.default={components:{\"pop-window\":r.a},props:{text:{type:String,default:\"\"}},methods:{close:function(){this.$emit(\"close\")}}}},function(e,t,i){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=i(79),r=i.n(n);t.default={components:{\"pop-window\":r.a},props:{open:{type:Boolean,default:!1}},data:function(){return{token:\"\",title:\"\",error:\"\",currentOptionIndex:-1,poem:{options:[\"试试事实上升水\",\"试试事实上升水\",\"试试事实上升水\",\"试试事实上升水\"]}}},mounted:function(){var e=this;this.$store.dispatch(\"getVerify\").then(function(t){t.success&&(e.poem=t.data)})},watch:{open:function(e){e&&this.reset()}},methods:{close:function(){this.$emit(\"close\")},submit:function(){return\"\"===this.title?void(this.error=\"标题必须输入呦\"):this.title.length>20?void(this.error=\"标题长度不能超过20个字符\"):this.currentOptionIndex<0?void(this.error=\"请选择验证\"):(this.$emit(\"sutmit\",{title:this.title,token:this.token,answer:this.poem.answer,option:this.poem.options[this.currentOptionIndex]}),void this.$emit(\"close\"))},reset:function(){this.token=\"\",this.title=\"\",this.error=\"\",this.currentOptionIndex=-1;var e=this;this.$store.dispatch(\"getVerify\").then(function(t){t.success&&(e.poem=t.data)})}}}},function(e,t,i){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=i(79),r=i.n(n);t.default={components:{\"pop-window\":r.a},props:{cid:{type:String,default:\"\"}},data:function(){return{isCopy:!1}},watch:{cid:function(e){\"\"!==e&&(this.isCopy=!1)}},computed:{code:function(){return'<iframe src=\"http://code.smallcfj.club/#/?Cid='+this.cid+'\" width=\"100%\" height=\"500px\" frameborder=\"0\" scrolling=\"no\"> </iframe>'}},methods:{close:function(){this.$emit(\"close\")},copyCode:function(){this.$refs.shareCode.select(),document.execCommand(\"Copy\"),this.isCopy=!0}}}},function(e,t,i){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={props:{open:{type:Boolean,default:!1}},methods:{close:function(){this.$emit(\"close\")}}}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t){},function(e,t){},function(e,t){},function(e,t){},function(e,t){},function(e,t){},,,,function(e,t){e.exports=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADhUlEQVRoQ+1ZS1LbQBCdnirwMuQEIScInCDkBCEnCN7Q8ir4BNgnwKykYWNygpgTACcInCBwgpgdUMU09RzJJcn6y7ZEVabKK8+0+s3rnn7TQ+qND3rj/qv/AJbF4Hg83np6evqulNonoj3YFZE7IppYa097vd5d0rdawcDZ2dmOtfYXEW2nbYi1ttvr9c7j/zcOAM6LyKVSaiuPzSQQjQPwPO8yCJk8AEqpqbV2NxxOjQJwXXdPa43dLzxE5NRxnKNgQaMAjDEDpdRxYe//Tbxh5t1WAPA8b0JEX0sCUMw83/hGGagI4IGZ5wnfKABjDGL5pCQD18w8qxMYjQEwxqBojYocn2GA8aN07QDguIgMsopWBiP3zBwpdmsDkOH4UEQgHz7lhNID6sXh4eFNeF4hAKiWSql3WLixsXHb7XanRePWGLMvIicJO35trT1AUfJ1EFj5kWJ3PrewlIDR5+dnGESiRcq8iFwR0Tkz/0wDgiJFRMcJVfYeNpl5El/ruu621hqAt4kI35yJufiu5zJQQp9MNjc3u2FGMhyHujztdDqDMgzmMb0QQiWcD2xPmPlbluNKqWsiOsrayTxH0/5fAOB53p+yJ4Sv25Ok8IO19ihJBld1ODMHXNc90FqPl2F8FeGS5FeEgYqlPW53ZeGSC8AY87dsZQwZXXm4FAEgNcJnyMyQx2sdkRAyxqBAzQpWhdE8gJo5MGLmfgXgtZZEGKh7CuE4FRF0D65qeVVi8UIdMMag//KhhI2kqejl9NN6OTVtR5anVWLsYNFcgLZJAox8QlgNl+lwZiEL/vTlRC4IEbnodDoHj4+PW1prnEC4pETGqsMqVU77ahRKFL8IGyJyS0SDuKL02yQA8jlh11cSVoXvAy8vL4GkvsuL7QwgmWEFOe13KXZ8OX1DRBel5fSyYjYNiC/++gGDPtvoD80bVmEfcP/QWveTgBRioC4gX2qP4tfGwDERgYDErS9rTInoS6UrZV0AwXq/ziBHKh3TYM5xnI9hf9bCQHwDagJB6KEdMxuNAAg+boxBv3/h6M1hvB2NLThZUXtNmfl9KxioCKA9zd0q7XUUUcdx5idWozngS5bfZU65Vj1wwHFjDDRXkvRIwoVr605rnpjgYVHhiLmtfOQLgUCrMa3ApTYMGs2BeIz4Dx77QUghYZVSVyIyavVDd5kkjs9tFQNVgLx5AK+6gtBACn3O6wAAAABJRU5ErkJggg==\"},function(e,t,i){i(209);var n=i(34)(i(151),i(223),null,null);e.exports=n.exports},function(e,t,i){i(206);var n=i(34)(i(152),i(220),\"data-v-29434224\",null);e.exports=n.exports},function(e,t,i){i(207);var n=i(34)(i(153),i(221),\"data-v-2cb7954a\",null);e.exports=n.exports},function(e,t,i){i(208);var n=i(34)(i(154),i(222),\"data-v-3785a81e\",null);e.exports=n.exports},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(\"pop-window\",{attrs:{open:\"\"!==e.text},on:{close:function(t){e.close()}}},[i(\"div\",{staticClass:\"pop-success\"},[i(\"p\",{staticClass:\"success\"},[e._v(e._s(e.text))]),e._v(\" \"),i(\"button\",{staticClass:\"btn-positive\",on:{click:function(t){e.close()}}},[e._v(\"确定\")])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(\"pop-window\",{attrs:{open:e.open},on:{close:function(t){e.close()}}},[i(\"div\",{staticClass:\"pop-save\"},[i(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.title,expression:\"title\"}],staticClass:\"form-control\",attrs:{type:\"text\",placeholder:\"请输入标题（20个字符以内）\"},domProps:{value:e.title},on:{input:function(t){t.target.composing||(e.title=t.target.value)}}}),e._v(\" \"),i(\"input\",{directives:[{name:\"model\",rawName:\"v-model\",value:e.token,expression:\"token\"}],staticClass:\"form-control\",attrs:{type:\"text\",placeholder:\"请输入token（选填）\"},domProps:{value:e.token},on:{input:function(t){t.target.composing||(e.token=t.target.value)}}}),e._v(\" \"),i(\"p\",{staticClass:\"hint\"},[e._v(\"如果未输入token，则您提交的代码将在管理员审核后展现。\")]),e._v(\" \"),i(\"p\",{staticClass:\"hint\"},[i(\"strong\",[e._v(\"验证：\")]),e._v(\"“\"+e._s(e.poem.poem)+\"”的下一句是？\")]),e._v(\" \"),i(\"ul\",{staticClass:\"list-verify\"},e._l(e.poem.options,function(t,n){return i(\"li\",{staticClass:\"item-verify\",class:{current:n===e.currentOptionIndex},on:{click:function(t){e.currentOptionIndex=n}}},[e._v(\"\\n        \"+e._s(t)+\"\\n      \")])})),e._v(\" \"),i(\"div\",{staticClass:\"btn-group\"},[i(\"button\",{staticClass:\"btn\",on:{click:function(t){e.submit()}}},[e._v(\"提交\")])]),e._v(\" \"),i(\"p\",{directives:[{name:\"show\",rawName:\"v-show\",value:\"\"!==e.error,expression:\"error !== ''\"}],staticClass:\"error\"},[e._v(e._s(e.error))])])])},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(\"pop-window\",{attrs:{open:\"\"!==e.cid},on:{close:function(t){e.close()}}},[i(\"div\",{staticClass:\"pop-share\"},[i(\"p\",{staticClass:\"hint\"},[e._v(\"请复制下面代码粘贴到需要的地方\")]),e._v(\" \"),i(\"textarea\",{ref:\"shareCode\",staticClass:\"box-code\",domProps:{innerHTML:e._s(e.code)}}),e._v(\" \"),i(\"p\",{directives:[{name:\"show\",rawName:\"v-show\",value:e.isCopy,expression:\"isCopy\"}],staticClass:\"error\"},[e._v(\"复制好了\\\\(^o^)/~\")]),e._v(\" \"),i(\"button\",{staticClass:\"btn-positive\",on:{click:function(t){e.copyCode()}}},[e._v(\"点击复制\")])])])},staticRenderFns:[]}},function(e,t,i){e.exports={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(\"div\",{staticClass:\"container-home\",class:{noAside:!e.isShowAside}},[n(\"aside\",[n(\"button\",{staticClass:\"btn-toggle\",class:{open:!e.isShowAside,close:e.isShowAside},on:{click:function(t){e.isShowAside=!e.isShowAside}}}),e._v(\" \"),n(\"h1\",{staticClass:\"title\"},[e._v(\"Javascript Box\")]),e._v(\" \"),n(\"ul\",{staticClass:\"list-project\"},e._l(e.dataProject,function(t,r){return n(\"li\",{staticClass:\"item-project\",class:{current:t.id===e.currentId},on:{click:function(i){e.loadCode(t.id)}}},[e._v(\"\\n        \"+e._s(r+1)+\"、\"+e._s(t.title)+\"\\n        \"),n(\"img\",{staticClass:\"btn-share\",attrs:{src:i(215),alt:\"分享\"},on:{click:function(i){e.share(t.id)}}})])})),e._v(\" \"),n(\"button\",{staticClass:\"btn-add\",on:{click:function(t){e.add()}}})]),e._v(\" \"),n(\"div\",{staticClass:\"box-editor\"},[n(\"div\",{staticClass:\"box-code\",style:{height:e.boxCodeHeight+\"px\"}},[n(\"textarea\",{ref:\"codeEditor\",attrs:{spellcheck:\"false\",autocapitalize:\"none\",autocorrect:\"off\"}})]),e._v(\" \"),n(\"div\",{staticClass:\"box-control\"},[n(\"a\",{staticClass:\"link-site\",attrs:{href:\"http://code.smallcfj.club\",target:\"_blank\"}},[e._v(\"Javascript Box\")]),e._v(\" \"),n(\"div\",{staticClass:\"box-right\"},[n(\"label\",{staticClass:\"text-title\"},[e._v(e._s(e.currentTitle))]),e._v(\" \"),n(\"button\",{staticClass:\"btn-save\",on:{click:function(t){e.popSaveOpen=!0}}},[e._v(\"保存\")]),e._v(\" \"),n(\"button\",{on:{click:function(t){e.clearConsole()}}},[e._v(\"清空\")]),e._v(\" \"),n(\"button\",{on:{click:function(t){e.run()}}},[e._v(\"运行\")])])]),e._v(\" \"),n(\"div\",{staticClass:\"box-console\"},[n(\"ul\",{staticClass:\"list-console\"},e._l(e.dataConsole,function(t){return n(\"li\",{staticClass:\"item-console\"},[n(\"label\",[e._v(e._s(e.$util.parseDate(t.time,\"yyyy-MM-dd hh:mm:ss\"))+\"  :  \")]),e._v(\"\\n          \"+e._s(t.msg)+\"\\n        \")])}))])]),e._v(\" \"),n(\"pop-save\",{attrs:{open:e.popSaveOpen},on:{close:function(t){e.popSaveOpen=!1},sutmit:e.submit}}),e._v(\" \"),n(\"pop-alert\",{attrs:{text:e.alertText},on:{close:function(t){e.alertClose()}}}),e._v(\" \"),n(\"pop-share\",{attrs:{cid:e.shareCodeId},on:{close:function(t){e.shareClose()}}})],1)},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(\"div\",{attrs:{id:\"app\"}},[i(\"router-view\")],1)},staticRenderFns:[]}},function(e,t){e.exports={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:e.open,expression:\"open\"}],staticClass:\"pop-mask\",on:{click:function(t){if(t.target!==t.currentTarget)return null;e.close()}}},[i(\"div\",{staticClass:\"pop-window\"},[i(\"div\",{staticClass:\"btn-close\",on:{click:function(t){e.close()}}},[e._v(\"×\")]),e._v(\" \"),e._t(\"default\")],2)])},staticRenderFns:[]}}],[147]);"
  },
  {
    "path": "JsBox/public/static/js/manifest.67d95f4f2bac744a9e68.js",
    "content": "!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var n=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var i,u,f,s=0,l=[];s<t.length;s++)u=t[s],o[u]&&l.push(o[u][0]),o[u]=0;for(i in c)Object.prototype.hasOwnProperty.call(c,i)&&(e[i]=c[i]);for(n&&n(t,c,a);l.length;)l.shift()();if(a)for(s=0;s<a.length;s++)f=r(r.s=a[s]);return f};var t={},o={2:0};r.e=function(e){function n(){a.onerror=a.onload=null,clearTimeout(i);var r=o[e];0!==r&&(r&&r[1](new Error(\"Loading chunk \"+e+\" failed.\")),o[e]=void 0)}if(0===o[e])return Promise.resolve();if(o[e])return o[e][2];var t=new Promise(function(r,n){o[e]=[r,n]});o[e][2]=t;var c=document.getElementsByTagName(\"head\")[0],a=document.createElement(\"script\");a.type=\"text/javascript\",a.charset=\"utf-8\",a.async=!0,a.timeout=12e4,r.nc&&a.setAttribute(\"nonce\",r.nc),a.src=r.p+\"static/js/\"+e+\".\"+{0:\"66ac5a22f7db90579483\",1:\"24d437c721cf4e8832ad\"}[e]+\".js\";var i=setTimeout(n,12e4);return a.onerror=a.onload=n,c.appendChild(a),t},r.m=e,r.c=t,r.i=function(e){return e},r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,\"a\",n),n},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p=\"/\",r.oe=function(e){throw console.error(e),e}}([]);"
  },
  {
    "path": "JsBox/public/static/js/manifest.fe0b79a8fde277e7b4cf.js",
    "content": "!function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var n=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var i,u,f,s=0,l=[];s<t.length;s++)u=t[s],o[u]&&l.push(o[u][0]),o[u]=0;for(i in c)Object.prototype.hasOwnProperty.call(c,i)&&(e[i]=c[i]);for(n&&n(t,c,a);l.length;)l.shift()();if(a)for(s=0;s<a.length;s++)f=r(r.s=a[s]);return f};var t={},o={2:0};r.e=function(e){function n(){a.onerror=a.onload=null,clearTimeout(i);var r=o[e];0!==r&&(r&&r[1](new Error(\"Loading chunk \"+e+\" failed.\")),o[e]=void 0)}if(0===o[e])return Promise.resolve();if(o[e])return o[e][2];var t=new Promise(function(r,n){o[e]=[r,n]});o[e][2]=t;var c=document.getElementsByTagName(\"head\")[0],a=document.createElement(\"script\");a.type=\"text/javascript\",a.charset=\"utf-8\",a.async=!0,a.timeout=12e4,r.nc&&a.setAttribute(\"nonce\",r.nc),a.src=r.p+\"static/js/\"+e+\".\"+{0:\"66ac5a22f7db90579483\",1:\"3d79196da433328c5763\"}[e]+\".js\";var i=setTimeout(n,12e4);return a.onerror=a.onload=n,c.appendChild(a),t},r.m=e,r.c=t,r.i=function(e){return e},r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,\"a\",n),n},r.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},r.p=\"/\",r.oe=function(e){throw console.error(e),e}}([]);"
  },
  {
    "path": "JsBox/public/static/js/vendor.66ac5a22f7db90579483.js",
    "content": "webpackJsonp([0],[,,,,,,,,,,function(t,e,n){var r=n(74)(\"wks\"),o=n(59),i=n(13).Symbol,a=\"function\"==typeof i;(t.exports=function(t){return r[t]||(r[t]=a&&i[t]||(a?i:o)(\"Symbol.\"+t))}).store=r},function(t,e,n){\"use strict\";(function(e){function r(t){return\"[object Array]\"===E.call(t)}function o(t){return void 0!==e&&e.isBuffer&&e.isBuffer(t)}function i(t){return\"[object ArrayBuffer]\"===E.call(t)}function a(t){return\"undefined\"!=typeof FormData&&t instanceof FormData}function s(t){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function u(t){return\"string\"==typeof t}function c(t){return\"number\"==typeof t}function f(t){return void 0===t}function l(t){return null!==t&&\"object\"==typeof t}function p(t){return\"[object Date]\"===E.call(t)}function h(t){return\"[object File]\"===E.call(t)}function d(t){return\"[object Blob]\"===E.call(t)}function v(t){return\"[object Function]\"===E.call(t)}function y(t){return l(t)&&v(t.pipe)}function m(t){return\"undefined\"!=typeof URLSearchParams&&t instanceof URLSearchParams}function g(t){return t.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\")}function _(){return(\"undefined\"==typeof navigator||\"ReactNative\"!==navigator.product)&&(\"undefined\"!=typeof window&&\"undefined\"!=typeof document)}function b(t,e){if(null!==t&&void 0!==t)if(\"object\"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,o=t.length;n<o;n++)e.call(null,t[n],n,t);else for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.call(null,t[i],i,t)}function w(){function t(t,n){\"object\"==typeof e[n]&&\"object\"==typeof t?e[n]=w(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;n<r;n++)b(arguments[n],t);return e}function x(t,e,n){return b(e,function(e,r){t[r]=n&&\"function\"==typeof e?A(e,n):e}),t}var A=n(85),E=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:i,isBuffer:o,isFormData:a,isArrayBufferView:s,isString:u,isNumber:c,isObject:l,isUndefined:f,isDate:p,isFile:h,isBlob:d,isFunction:v,isStream:y,isURLSearchParams:m,isStandardBrowserEnv:_,forEach:b,merge:w,extend:x,trim:g}}).call(e,n(99).Buffer)},function(t,e){var n=t.exports={version:\"2.4.0\"};\"number\"==typeof __e&&(__e=n)},function(t,e){var n=t.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=n)},,,function(t,e,n){\"use strict\";e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}},function(t,e,n){\"use strict\";e.__esModule=!0;var r=n(158),o=function(t){return t&&t.__esModule?t:{default:t}}(r);e.default=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),(0,o.default)(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}()},,,,,,,,function(t,e,n){t.exports=!n(43)(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a})},function(t,e,n){var r=n(27),o=n(102),i=n(76),a=Object.defineProperty;e.f=n(25)?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)try{return a(t,e,n)}catch(t){}if(\"get\"in n||\"set\"in n)throw TypeError(\"Accessors not supported!\");return\"value\"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(44);t.exports=function(t){if(!r(t))throw TypeError(t+\" is not an object!\");return t}},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var r=n(26),o=n(57);t.exports=n(25)?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(177),o=n(68);t.exports=function(t){return r(o(t))}},,,function(t,e,n){var r=n(13),o=n(12),i=n(54),a=n(29),s=function(t,e,n){var u,c,f,l=t&s.F,p=t&s.G,h=t&s.S,d=t&s.P,v=t&s.B,y=t&s.W,m=p?o:o[e]||(o[e]={}),g=m.prototype,_=p?r:h?r[e]:(r[e]||{}).prototype;p&&(n=e);for(u in n)(c=!l&&_&&void 0!==_[u])&&u in m||(f=c?_[u]:n[u],m[u]=p&&\"function\"!=typeof _[u]?n[u]:v&&c?i(f,r):y&&_[u]==f?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(f):d&&\"function\"==typeof f?i(Function.call,f):f,d&&((m.virtual||(m.virtual={}))[u]=f,t&s.R&&g&&!g[u]&&a(g,u,f)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,t.exports=s},function(t,e){t.exports=function(t,e,n,r){var o,i=t=t||{},a=typeof t.default;\"object\"!==a&&\"function\"!==a||(o=t,i=t.default);var s=\"function\"==typeof i?i.options:i;if(e&&(s.render=e.render,s.staticRenderFns=e.staticRenderFns),n&&(s._scopeId=n),r){var u=Object.create(s.computed||null);Object.keys(r).forEach(function(t){var e=r[t];u[t]=function(){return e}}),s.computed=u}return{esModule:o,exports:i,options:s}}},,,,,,,,function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e){t.exports=function(t){return\"object\"==typeof t?null!==t:\"function\"==typeof t}},function(t,e){t.exports={}},function(t,e){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(t){\"object\"==typeof window&&(n=window)}t.exports=n},,,,,,,,function(t,e,n){var r=n(67);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},function(t,e){t.exports=!0},function(t,e,n){var r=n(107),o=n(70);t.exports=Object.keys||function(t){return r(t,o)}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var r=n(26).f,o=n(28),i=n(10)(\"toStringTag\");t.exports=function(t,e,n){t&&!o(t=n?t:t.prototype,i)&&r(t,i,{configurable:!0,value:e})}},function(t,e){var n=0,r=Math.random();t.exports=function(t){return\"Symbol(\".concat(void 0===t?\"\":t,\")_\",(++n+r).toString(36))}},function(t,e,n){\"use strict\";(function(t){/*!\n * Vue.js v2.2.6\n * (c) 2014-2017 Evan You\n * Released under the MIT License.\n */\nfunction n(t){return null==t?\"\":\"object\"==typeof t?JSON.stringify(t,null,2):String(t)}function r(t){var e=parseFloat(t);return isNaN(e)?t:e}function o(t,e){for(var n=Object.create(null),r=t.split(\",\"),o=0;o<r.length;o++)n[r[o]]=!0;return e?function(t){return n[t.toLowerCase()]}:function(t){return n[t]}}function i(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(n,1)}}function a(t,e){return Eo.call(t,e)}function s(t){return\"string\"==typeof t||\"number\"==typeof t}function u(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}function c(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function f(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function l(t,e){for(var n in e)t[n]=e[n];return t}function p(t){return null!==t&&\"object\"==typeof t}function h(t){return ko.call(t)===So}function d(t){for(var e={},n=0;n<t.length;n++)t[n]&&l(e,t[n]);return e}function v(){}function y(t,e){var n=p(t),r=p(e);if(!n||!r)return!n&&!r&&String(t)===String(e);try{return JSON.stringify(t)===JSON.stringify(e)}catch(n){return t===e}}function m(t,e){for(var n=0;n<t.length;n++)if(y(t[n],e))return n;return-1}function g(t){var e=!1;return function(){e||(e=!0,t())}}function _(t){var e=(t+\"\").charCodeAt(0);return 36===e||95===e}function b(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function w(t){if(!Mo.test(t)){var e=t.split(\".\");return function(t){for(var n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}}function x(t){return/native code/.test(t.toString())}function A(t){Wo.target&&Xo.push(Wo.target),Wo.target=t}function E(){Wo.target=Xo.pop()}function O(t,e){t.__proto__=e}function C(t,e,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];b(t,i,e[i])}}function $(t,e){if(p(t)){var n;return a(t,\"__ob__\")&&t.__ob__ instanceof ni?n=t.__ob__:ei.shouldConvert&&!Yo()&&(Array.isArray(t)||h(t))&&Object.isExtensible(t)&&!t._isVue&&(n=new ni(t)),e&&n&&n.vmCount++,n}}function k(t,e,n,r){var o=new Wo,i=Object.getOwnPropertyDescriptor(t,e);if(!i||!1!==i.configurable){var a=i&&i.get,s=i&&i.set,u=$(n);Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){var e=a?a.call(t):n;return Wo.target&&(o.depend(),u&&u.dep.depend(),Array.isArray(e)&&j(e)),e},set:function(e){var r=a?a.call(t):n;e===r||e!==e&&r!==r||(s?s.call(t,e):n=e,u=$(e),o.notify())}})}}function S(t,e,n){if(Array.isArray(t)&&\"number\"==typeof e)return t.length=Math.max(t.length,e),t.splice(e,1,n),n;if(a(t,e))return t[e]=n,n;var r=t.__ob__;return t._isVue||r&&r.vmCount?n:r?(k(r.value,e,n),r.dep.notify(),n):(t[e]=n,n)}function T(t,e){if(Array.isArray(t)&&\"number\"==typeof e)return void t.splice(e,1);var n=t.__ob__;t._isVue||n&&n.vmCount||a(t,e)&&(delete t[e],n&&n.dep.notify())}function j(t){for(var e=void 0,n=0,r=t.length;n<r;n++)e=t[n],e&&e.__ob__&&e.__ob__.dep.depend(),Array.isArray(e)&&j(e)}function R(t,e){if(!e)return t;for(var n,r,o,i=Object.keys(e),s=0;s<i.length;s++)n=i[s],r=t[n],o=e[n],a(t,n)?h(r)&&h(o)&&R(r,o):S(t,n,o);return t}function P(t,e){return e?t?t.concat(e):Array.isArray(e)?e:[e]:t}function M(t,e){var n=Object.create(t||null);return e?l(n,e):n}function L(t){var e=t.props;if(e){var n,r,o,i={};if(Array.isArray(e))for(n=e.length;n--;)\"string\"==typeof(r=e[n])&&(o=Oo(r),i[o]={type:null});else if(h(e))for(var a in e)r=e[a],o=Oo(a),i[o]=h(r)?r:{type:r};t.props=i}}function N(t){var e=t.directives;if(e)for(var n in e){var r=e[n];\"function\"==typeof r&&(e[n]={bind:r,update:r})}}function I(t,e,n){function r(r){var o=ri[r]||oi;f[r]=o(t[r],e[r],n,r)}L(e),N(e);var o=e.extends;if(o&&(t=\"function\"==typeof o?I(t,o.options,n):I(t,o,n)),e.mixins)for(var i=0,s=e.mixins.length;i<s;i++){var u=e.mixins[i];u.prototype instanceof oe&&(u=u.options),t=I(t,u,n)}var c,f={};for(c in t)r(c);for(c in e)a(t,c)||r(c);return f}function U(t,e,n,r){if(\"string\"==typeof n){var o=t[e];if(a(o,n))return o[n];var i=Oo(n);if(a(o,i))return o[i];var s=Co(i);if(a(o,s))return o[s];return o[n]||o[i]||o[s]}}function B(t,e,n,r){var o=e[t],i=!a(n,t),s=n[t];if(q(Boolean,o.type)&&(i&&!a(o,\"default\")?s=!1:q(String,o.type)||\"\"!==s&&s!==$o(t)||(s=!0)),void 0===s){s=D(r,o,t);var u=ei.shouldConvert;ei.shouldConvert=!0,$(s),ei.shouldConvert=u}return s}function D(t,e,n){if(a(e,\"default\")){var r=e.default;return t&&t.$options.propsData&&void 0===t.$options.propsData[n]&&void 0!==t._props[n]?t._props[n]:\"function\"==typeof r&&\"Function\"!==F(e.type)?r.call(t):r}}function F(t){var e=t&&t.toString().match(/^\\s*function (\\w+)/);return e&&e[1]}function q(t,e){if(!Array.isArray(e))return F(e)===F(t);for(var n=0,r=e.length;n<r;n++)if(F(e[n])===F(t))return!0;return!1}function H(t,e,n){if(Ro.errorHandler)Ro.errorHandler.call(null,t,e,n);else{if(!No||\"undefined\"==typeof console)throw t;console.error(t)}}function Y(t){return new ii(void 0,void 0,void 0,String(t))}function V(t){var e=new ii(t.tag,t.data,t.children,t.text,t.elm,t.context,t.componentOptions);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isCloned=!0,e}function z(t){for(var e=t.length,n=new Array(e),r=0;r<e;r++)n[r]=V(t[r]);return n}function J(t){function e(){var t=arguments,n=e.fns;if(!Array.isArray(n))return n.apply(null,arguments);for(var r=0;r<n.length;r++)n[r].apply(null,t)}return e.fns=t,e}function K(t,e,n,r,o){var i,a,s,u;for(i in t)a=t[i],s=e[i],u=ci(i),a&&(s?a!==s&&(s.fns=a,t[i]=s):(a.fns||(a=t[i]=J(a)),n(u.name,a,u.once,u.capture)));for(i in e)t[i]||(u=ci(i),r(u.name,e[i],u.capture))}function G(t,e,n){function r(){n.apply(this,arguments),i(o.fns,r)}var o,a=t[e];a?a.fns&&a.merged?(o=a,o.fns.push(r)):o=J([a,r]):o=J([r]),o.merged=!0,t[e]=o}function W(t){for(var e=0;e<t.length;e++)if(Array.isArray(t[e]))return Array.prototype.concat.apply([],t);return t}function X(t){return s(t)?[Y(t)]:Array.isArray(t)?Z(t):void 0}function Z(t,e){var n,r,o,i=[];for(n=0;n<t.length;n++)null!=(r=t[n])&&\"boolean\"!=typeof r&&(o=i[i.length-1],Array.isArray(r)?i.push.apply(i,Z(r,(e||\"\")+\"_\"+n)):s(r)?o&&o.text?o.text+=String(r):\"\"!==r&&i.push(Y(r)):r.text&&o&&o.text?i[i.length-1]=Y(o.text+r.text):(r.tag&&null==r.key&&null!=e&&(r.key=\"__vlist\"+e+\"_\"+n+\"__\"),i.push(r)));return i}function Q(t){return t&&t.filter(function(t){return t&&t.componentOptions})[0]}function tt(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&rt(t,e)}function et(t,e,n){n?si.$once(t,e):si.$on(t,e)}function nt(t,e){si.$off(t,e)}function rt(t,e,n){si=t,K(e,n||{},et,nt,t)}function ot(t,e){var n={};if(!t)return n;for(var r,o,i=[],a=0,s=t.length;a<s;a++)if(o=t[a],(o.context===e||o.functionalContext===e)&&o.data&&(r=o.data.slot)){var u=n[r]||(n[r]=[]);\"template\"===o.tag?u.push.apply(u,o.children):u.push(o)}else i.push(o);return i.every(it)||(n.default=i),n}function it(t){return t.isComment||\" \"===t.text}function at(t){for(var e={},n=0;n<t.length;n++)e[t[n][0]]=t[n][1];return e}function st(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}function ut(t,e,n){t.$el=e,t.$options.render||(t.$options.render=ui),ht(t,\"beforeMount\");var r;return r=function(){t._update(t._render(),n)},t._watcher=new mi(t,r,v),n=!1,null==t.$vnode&&(t._isMounted=!0,ht(t,\"mounted\")),t}function ct(t,e,n,r,o){var i=!!(o||t.$options._renderChildren||r.data.scopedSlots||t.$scopedSlots!==Po);if(t.$options._parentVnode=r,t.$vnode=r,t._vnode&&(t._vnode.parent=r),t.$options._renderChildren=o,e&&t.$options.props){ei.shouldConvert=!1;for(var a=t._props,s=t.$options._propKeys||[],u=0;u<s.length;u++){var c=s[u];a[c]=B(c,t.$options.props,e,t)}ei.shouldConvert=!0,t.$options.propsData=e}if(n){var f=t.$options._parentListeners;t.$options._parentListeners=n,rt(t,n,f)}i&&(t.$slots=ot(o,r.context),t.$forceUpdate())}function ft(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function lt(t,e){if(e){if(t._directInactive=!1,ft(t))return}else if(t._directInactive)return;if(t._inactive||null==t._inactive){t._inactive=!1;for(var n=0;n<t.$children.length;n++)lt(t.$children[n]);ht(t,\"activated\")}}function pt(t,e){if(!(e&&(t._directInactive=!0,ft(t))||t._inactive)){t._inactive=!0;for(var n=0;n<t.$children.length;n++)pt(t.$children[n]);ht(t,\"deactivated\")}}function ht(t,e){var n=t.$options[e];if(n)for(var r=0,o=n.length;r<o;r++)try{n[r].call(t)}catch(n){H(n,t,e+\" hook\")}t._hasHookEvent&&t.$emit(\"hook:\"+e)}function dt(){li.length=0,pi={},hi=di=!1}function vt(){di=!0;var t,e,n;for(li.sort(function(t,e){return t.id-e.id}),vi=0;vi<li.length;vi++)t=li[vi],e=t.id,pi[e]=null,t.run();var r=li.slice();for(dt(),vi=r.length;vi--;)t=r[vi],n=t.vm,n._watcher===t&&n._isMounted&&ht(n,\"updated\");Vo&&Ro.devtools&&Vo.emit(\"flush\")}function yt(t){var e=t.id;if(null==pi[e]){if(pi[e]=!0,di){for(var n=li.length-1;n>=0&&li[n].id>t.id;)n--;li.splice(Math.max(n,vi)+1,0,t)}else li.push(t);hi||(hi=!0,Jo(vt))}}function mt(t){gi.clear(),gt(t,gi)}function gt(t,e){var n,r,o=Array.isArray(t);if((o||p(t))&&Object.isExtensible(t)){if(t.__ob__){var i=t.__ob__.dep.id;if(e.has(i))return;e.add(i)}if(o)for(n=t.length;n--;)gt(t[n],e);else for(r=Object.keys(t),n=r.length;n--;)gt(t[r[n]],e)}}function _t(t,e,n){_i.get=function(){return this[e][n]},_i.set=function(t){this[e][n]=t},Object.defineProperty(t,n,_i)}function bt(t){t._watchers=[];var e=t.$options;e.props&&wt(t,e.props),e.methods&&$t(t,e.methods),e.data?xt(t):$(t._data={},!0),e.computed&&Et(t,e.computed),e.watch&&kt(t,e.watch)}function wt(t,e){var n=t.$options.propsData||{},r=t._props={},o=t.$options._propKeys=[],i=!t.$parent;ei.shouldConvert=i;for(var a in e)!function(i){o.push(i);var a=B(i,e,n,t);k(r,i,a),i in t||_t(t,\"_props\",i)}(a);ei.shouldConvert=!0}function xt(t){var e=t.$options.data;e=t._data=\"function\"==typeof e?At(e,t):e||{},h(e)||(e={});for(var n=Object.keys(e),r=t.$options.props,o=n.length;o--;)r&&a(r,n[o])||_(n[o])||_t(t,\"_data\",n[o]);$(e,!0)}function At(t,e){try{return t.call(e)}catch(t){return H(t,e,\"data()\"),{}}}function Et(t,e){var n=t._computedWatchers=Object.create(null);for(var r in e){var o=e[r],i=\"function\"==typeof o?o:o.get;n[r]=new mi(t,i,v,bi),r in t||Ot(t,r,o)}}function Ot(t,e,n){\"function\"==typeof n?(_i.get=Ct(e),_i.set=v):(_i.get=n.get?!1!==n.cache?Ct(e):n.get:v,_i.set=n.set?n.set:v),Object.defineProperty(t,e,_i)}function Ct(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),Wo.target&&e.depend(),e.value}}function $t(t,e){t.$options.props;for(var n in e)t[n]=null==e[n]?v:c(e[n],t)}function kt(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)St(t,n,r[o]);else St(t,n,r)}}function St(t,e,n){var r;h(n)&&(r=n,n=n.handler),\"string\"==typeof n&&(n=t[n]),t.$watch(e,n,r)}function Tt(t,e,n,r,o){if(t){var i=n.$options._base;if(p(t)&&(t=i.extend(t)),\"function\"==typeof t){if(!t.cid)if(t.resolved)t=t.resolved;else if(!(t=Pt(t,i,function(){n.$forceUpdate()})))return;ee(t),e=e||{},e.model&&Ut(t.options,e);var a=Mt(e,t,o);if(t.options.functional)return jt(t,a,e,n,r);var s=e.on;e.on=e.nativeOn,t.options.abstract&&(e={}),Nt(e);var u=t.options.name||o;return new ii(\"vue-component-\"+t.cid+(u?\"-\"+u:\"\"),e,void 0,void 0,void 0,n,{Ctor:t,propsData:a,listeners:s,tag:o,children:r})}}}function jt(t,e,n,r,o){var i={},a=t.options.props;if(a)for(var s in a)i[s]=B(s,a,e);var u=Object.create(r),c=function(t,e,n,r){return Bt(u,t,e,n,r,!0)},f=t.options.render.call(null,c,{props:i,data:n,parent:r,children:o,slots:function(){return ot(o,r)}});return f instanceof ii&&(f.functionalContext=r,n.slot&&((f.data||(f.data={})).slot=n.slot)),f}function Rt(t,e,n,r){var o=t.componentOptions,i={_isComponent:!0,parent:e,propsData:o.propsData,_componentTag:o.tag,_parentVnode:t,_parentListeners:o.listeners,_renderChildren:o.children,_parentElm:n||null,_refElm:r||null},a=t.data.inlineTemplate;return a&&(i.render=a.render,i.staticRenderFns=a.staticRenderFns),new o.Ctor(i)}function Pt(t,e,n){if(!t.requested){t.requested=!0;var r=t.pendingCallbacks=[n],o=!0,i=function(n){if(p(n)&&(n=e.extend(n)),t.resolved=n,!o)for(var i=0,a=r.length;i<a;i++)r[i](n)},a=function(t){},s=t(i,a);return s&&\"function\"==typeof s.then&&!t.resolved&&s.then(i,a),o=!1,t.resolved}t.pendingCallbacks.push(n)}function Mt(t,e,n){var r=e.options.props;if(r){var o={},i=t.attrs,a=t.props,s=t.domProps;if(i||a||s)for(var u in r){var c=$o(u);Lt(o,a,u,c,!0)||Lt(o,i,u,c)||Lt(o,s,u,c)}return o}}function Lt(t,e,n,r,o){if(e){if(a(e,n))return t[n]=e[n],o||delete e[n],!0;if(a(e,r))return t[n]=e[r],o||delete e[r],!0}return!1}function Nt(t){t.hook||(t.hook={});for(var e=0;e<xi.length;e++){var n=xi[e],r=t.hook[n],o=wi[n];t.hook[n]=r?It(o,r):o}}function It(t,e){return function(n,r,o,i){t(n,r,o,i),e(n,r,o,i)}}function Ut(t,e){var n=t.model&&t.model.prop||\"value\",r=t.model&&t.model.event||\"input\";(e.props||(e.props={}))[n]=e.model.value;var o=e.on||(e.on={});o[r]?o[r]=[e.model.callback].concat(o[r]):o[r]=e.model.callback}function Bt(t,e,n,r,o,i){return(Array.isArray(n)||s(n))&&(o=r,r=n,n=void 0),i&&(o=Ei),Dt(t,e,n,r,o)}function Dt(t,e,n,r,o){if(n&&n.__ob__)return ui();if(!e)return ui();Array.isArray(r)&&\"function\"==typeof r[0]&&(n=n||{},n.scopedSlots={default:r[0]},r.length=0),o===Ei?r=X(r):o===Ai&&(r=W(r));var i,a;if(\"string\"==typeof e){var s;a=Ro.getTagNamespace(e),i=Ro.isReservedTag(e)?new ii(Ro.parsePlatformTagName(e),n,r,void 0,void 0,t):(s=U(t.$options,\"components\",e))?Tt(s,n,t,r,e):new ii(e,n,r,void 0,void 0,t)}else i=Tt(e,n,t,r);return i?(a&&Ft(i,a),i):ui()}function Ft(t,e){if(t.ns=e,\"foreignObject\"!==t.tag&&t.children)for(var n=0,r=t.children.length;n<r;n++){var o=t.children[n];o.tag&&!o.ns&&Ft(o,e)}}function qt(t,e){var n,r,o,i,a;if(Array.isArray(t)||\"string\"==typeof t)for(n=new Array(t.length),r=0,o=t.length;r<o;r++)n[r]=e(t[r],r);else if(\"number\"==typeof t)for(n=new Array(t),r=0;r<t;r++)n[r]=e(r+1,r);else if(p(t))for(i=Object.keys(t),n=new Array(i.length),r=0,o=i.length;r<o;r++)a=i[r],n[r]=e(t[a],a,r);return n}function Ht(t,e,n,r){var o=this.$scopedSlots[t];if(o)return n=n||{},r&&l(n,r),o(n)||e;var i=this.$slots[t];return i||e}function Yt(t){return U(this.$options,\"filters\",t,!0)||jo}function Vt(t,e,n){var r=Ro.keyCodes[e]||n;return Array.isArray(r)?-1===r.indexOf(t):r!==t}function zt(t,e,n,r){if(n)if(p(n)){Array.isArray(n)&&(n=d(n));var o;for(var i in n){if(\"class\"===i||\"style\"===i)o=t;else{var a=t.attrs&&t.attrs.type;o=r||Ro.mustUseProp(e,a,i)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}i in o||(o[i]=n[i])}}else;return t}function Jt(t,e){var n=this._staticTrees[t];return n&&!e?Array.isArray(n)?z(n):V(n):(n=this._staticTrees[t]=this.$options.staticRenderFns[t].call(this._renderProxy),Gt(n,\"__static__\"+t,!1),n)}function Kt(t,e,n){return Gt(t,\"__once__\"+e+(n?\"_\"+n:\"\"),!0),t}function Gt(t,e,n){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&\"string\"!=typeof t[r]&&Wt(t[r],e+\"_\"+r,n);else Wt(t,e,n)}function Wt(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function Xt(t){t.$vnode=null,t._vnode=null,t._staticTrees=null;var e=t.$options._parentVnode,n=e&&e.context;t.$slots=ot(t.$options._renderChildren,n),t.$scopedSlots=Po,t._c=function(e,n,r,o){return Bt(t,e,n,r,o,!1)},t.$createElement=function(e,n,r,o){return Bt(t,e,n,r,o,!0)}}function Zt(t){var e=t.$options.provide;e&&(t._provided=\"function\"==typeof e?e.call(t):e)}function Qt(t){var e=t.$options.inject;if(e)for(var n=Array.isArray(e),r=n?e:zo?Reflect.ownKeys(e):Object.keys(e),o=0;o<r.length;o++)!function(o){for(var i=r[o],a=n?i:e[i],s=t;s;){if(s._provided&&a in s._provided){k(t,i,s._provided[a]);break}s=s.$parent}}(o)}function te(t,e){var n=t.$options=Object.create(t.constructor.options);n.parent=e.parent,n.propsData=e.propsData,n._parentVnode=e._parentVnode,n._parentListeners=e._parentListeners,n._renderChildren=e._renderChildren,n._componentTag=e._componentTag,n._parentElm=e._parentElm,n._refElm=e._refElm,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}function ee(t){var e=t.options;if(t.super){var n=ee(t.super);if(n!==t.superOptions){t.superOptions=n;var r=ne(t);r&&l(t.extendOptions,r),e=t.options=I(n,t.extendOptions),e.name&&(e.components[e.name]=t)}}return e}function ne(t){var e,n=t.options,r=t.sealedOptions;for(var o in n)n[o]!==r[o]&&(e||(e={}),e[o]=re(n[o],r[o]));return e}function re(t,e){if(Array.isArray(t)){var n=[];e=Array.isArray(e)?e:[e];for(var r=0;r<t.length;r++)e.indexOf(t[r])<0&&n.push(t[r]);return n}return t}function oe(t){this._init(t)}function ie(t){t.use=function(t){if(!t.installed){var e=f(arguments,1);return e.unshift(this),\"function\"==typeof t.install?t.install.apply(t,e):\"function\"==typeof t&&t.apply(null,e),t.installed=!0,this}}}function ae(t){t.mixin=function(t){this.options=I(this.options,t)}}function se(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,o=t._Ctor||(t._Ctor={});if(o[r])return o[r];var i=t.name||n.options.name,a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=I(n.options,t),a.super=n,a.options.props&&ue(a),a.options.computed&&ce(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,Ro._assetTypes.forEach(function(t){a[t]=n[t]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=l({},a.options),o[r]=a,a}}function ue(t){var e=t.options.props;for(var n in e)_t(t.prototype,\"_props\",n)}function ce(t){var e=t.options.computed;for(var n in e)Ot(t.prototype,n,e[n])}function fe(t){Ro._assetTypes.forEach(function(e){t[e]=function(t,n){return n?(\"component\"===e&&h(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),\"directive\"===e&&\"function\"==typeof n&&(n={bind:n,update:n}),this.options[e+\"s\"][t]=n,n):this.options[e+\"s\"][t]}})}function le(t){return t&&(t.Ctor.options.name||t.tag)}function pe(t,e){return\"string\"==typeof t?t.split(\",\").indexOf(e)>-1:t instanceof RegExp&&t.test(e)}function he(t,e){for(var n in t){var r=t[n];if(r){var o=le(r.componentOptions);o&&!e(o)&&(de(r),t[n]=null)}}}function de(t){t&&(t.componentInstance._inactive||ht(t.componentInstance,\"deactivated\"),t.componentInstance.$destroy())}function ve(t){for(var e=t.data,n=t,r=t;r.componentInstance;)r=r.componentInstance._vnode,r.data&&(e=ye(r.data,e));for(;n=n.parent;)n.data&&(e=ye(e,n.data));return me(e)}function ye(t,e){return{staticClass:ge(t.staticClass,e.staticClass),class:t.class?[t.class,e.class]:e.class}}function me(t){var e=t.class,n=t.staticClass;return n||e?ge(n,_e(e)):\"\"}function ge(t,e){return t?e?t+\" \"+e:t:e||\"\"}function _e(t){var e=\"\";if(!t)return e;if(\"string\"==typeof t)return t;if(Array.isArray(t)){for(var n,r=0,o=t.length;r<o;r++)t[r]&&(n=_e(t[r]))&&(e+=n+\" \");return e.slice(0,-1)}if(p(t)){for(var i in t)t[i]&&(e+=i+\" \");return e.slice(0,-1)}return e}function be(t){return Ki(t)?\"svg\":\"math\"===t?\"math\":void 0}function we(t){if(!No)return!0;if(Wi(t))return!1;if(t=t.toLowerCase(),null!=Xi[t])return Xi[t];var e=document.createElement(t);return t.indexOf(\"-\")>-1?Xi[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Xi[t]=/HTMLUnknownElement/.test(e.toString())}function xe(t){if(\"string\"==typeof t){var e=document.querySelector(t);return e||document.createElement(\"div\")}return t}function Ae(t,e){var n=document.createElement(t);return\"select\"!==t?n:(e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute(\"multiple\",\"multiple\"),n)}function Ee(t,e){return document.createElementNS(zi[t],e)}function Oe(t){return document.createTextNode(t)}function Ce(t){return document.createComment(t)}function $e(t,e,n){t.insertBefore(e,n)}function ke(t,e){t.removeChild(e)}function Se(t,e){t.appendChild(e)}function Te(t){return t.parentNode}function je(t){return t.nextSibling}function Re(t){return t.tagName}function Pe(t,e){t.textContent=e}function Me(t,e,n){t.setAttribute(e,n)}function Le(t,e){var n=t.data.ref;if(n){var r=t.context,o=t.componentInstance||t.elm,a=r.$refs;e?Array.isArray(a[n])?i(a[n],o):a[n]===o&&(a[n]=void 0):t.data.refInFor?Array.isArray(a[n])&&a[n].indexOf(o)<0?a[n].push(o):a[n]=[o]:a[n]=o}}function Ne(t){return void 0===t||null===t}function Ie(t){return void 0!==t&&null!==t}function Ue(t){return!0===t}function Be(t,e){return t.key===e.key&&t.tag===e.tag&&t.isComment===e.isComment&&Ie(t.data)===Ie(e.data)&&De(t,e)}function De(t,e){if(\"input\"!==t.tag)return!0;var n;return(Ie(n=t.data)&&Ie(n=n.attrs)&&n.type)===(Ie(n=e.data)&&Ie(n=n.attrs)&&n.type)}function Fe(t,e,n){var r,o,i={};for(r=e;r<=n;++r)o=t[r].key,Ie(o)&&(i[o]=r);return i}function qe(t,e){(t.data.directives||e.data.directives)&&He(t,e)}function He(t,e){var n,r,o,i=t===ta,a=e===ta,s=Ye(t.data.directives,t.context),u=Ye(e.data.directives,e.context),c=[],f=[];for(n in u)r=s[n],o=u[n],r?(o.oldValue=r.value,ze(o,\"update\",e,t),o.def&&o.def.componentUpdated&&f.push(o)):(ze(o,\"bind\",e,t),o.def&&o.def.inserted&&c.push(o));if(c.length){var l=function(){for(var n=0;n<c.length;n++)ze(c[n],\"inserted\",e,t)};i?G(e.data.hook||(e.data.hook={}),\"insert\",l):l()}if(f.length&&G(e.data.hook||(e.data.hook={}),\"postpatch\",function(){for(var n=0;n<f.length;n++)ze(f[n],\"componentUpdated\",e,t)}),!i)for(n in s)u[n]||ze(s[n],\"unbind\",t,t,a)}function Ye(t,e){var n=Object.create(null);if(!t)return n;var r,o;for(r=0;r<t.length;r++)o=t[r],o.modifiers||(o.modifiers=ra),n[Ve(o)]=o,o.def=U(e.$options,\"directives\",o.name,!0);return n}function Ve(t){return t.rawName||t.name+\".\"+Object.keys(t.modifiers||{}).join(\".\")}function ze(t,e,n,r,o){var i=t.def&&t.def[e];i&&i(n.elm,t,n,r,o)}function Je(t,e){if(t.data.attrs||e.data.attrs){var n,r,o=e.elm,i=t.data.attrs||{},a=e.data.attrs||{};a.__ob__&&(a=e.data.attrs=l({},a));for(n in a)r=a[n],i[n]!==r&&Ke(o,n,r);Bo&&a.value!==i.value&&Ke(o,\"value\",a.value);for(n in i)null==a[n]&&(Hi(n)?o.removeAttributeNS(qi,Yi(n)):Di(n)||o.removeAttribute(n))}}function Ke(t,e,n){Fi(e)?Vi(n)?t.removeAttribute(e):t.setAttribute(e,e):Di(e)?t.setAttribute(e,Vi(n)||\"false\"===n?\"false\":\"true\"):Hi(e)?Vi(n)?t.removeAttributeNS(qi,Yi(e)):t.setAttributeNS(qi,e,n):Vi(n)?t.removeAttribute(e):t.setAttribute(e,n)}function Ge(t,e){var n=e.elm,r=e.data,o=t.data;if(r.staticClass||r.class||o&&(o.staticClass||o.class)){var i=ve(e),a=n._transitionClasses;a&&(i=ge(i,_e(a))),i!==n._prevClass&&(n.setAttribute(\"class\",i),n._prevClass=i)}}function We(t){function e(){(a||(a=[])).push(t.slice(d,o).trim()),d=o+1}var n,r,o,i,a,s=!1,u=!1,c=!1,f=!1,l=0,p=0,h=0,d=0;for(o=0;o<t.length;o++)if(r=n,n=t.charCodeAt(o),s)39===n&&92!==r&&(s=!1);else if(u)34===n&&92!==r&&(u=!1);else if(c)96===n&&92!==r&&(c=!1);else if(f)47===n&&92!==r&&(f=!1);else if(124!==n||124===t.charCodeAt(o+1)||124===t.charCodeAt(o-1)||l||p||h){switch(n){case 34:u=!0;break;case 39:s=!0;break;case 96:c=!0;break;case 40:h++;break;case 41:h--;break;case 91:p++;break;case 93:p--;break;case 123:l++;break;case 125:l--}if(47===n){for(var v=o-1,y=void 0;v>=0&&\" \"===(y=t.charAt(v));v--);y&&sa.test(y)||(f=!0)}}else void 0===i?(d=o+1,i=t.slice(0,o).trim()):e();if(void 0===i?i=t.slice(0,o).trim():0!==d&&e(),a)for(o=0;o<a.length;o++)i=Xe(i,a[o]);return i}function Xe(t,e){var n=e.indexOf(\"(\");return n<0?'_f(\"'+e+'\")('+t+\")\":'_f(\"'+e.slice(0,n)+'\")('+t+\",\"+e.slice(n+1)}function Ze(t){console.error(\"[Vue compiler]: \"+t)}function Qe(t,e){return t?t.map(function(t){return t[e]}).filter(function(t){return t}):[]}function tn(t,e,n){(t.props||(t.props=[])).push({name:e,value:n})}function en(t,e,n){(t.attrs||(t.attrs=[])).push({name:e,value:n})}function nn(t,e,n,r,o,i){(t.directives||(t.directives=[])).push({name:e,rawName:n,value:r,arg:o,modifiers:i})}function rn(t,e,n,r,o){r&&r.capture&&(delete r.capture,e=\"!\"+e),r&&r.once&&(delete r.once,e=\"~\"+e);var i;r&&r.native?(delete r.native,i=t.nativeEvents||(t.nativeEvents={})):i=t.events||(t.events={});var a={value:n,modifiers:r},s=i[e];Array.isArray(s)?o?s.unshift(a):s.push(a):i[e]=s?o?[a,s]:[s,a]:a}function on(t,e,n){var r=an(t,\":\"+e)||an(t,\"v-bind:\"+e);if(null!=r)return We(r);if(!1!==n){var o=an(t,e);if(null!=o)return JSON.stringify(o)}}function an(t,e){var n;if(null!=(n=t.attrsMap[e]))for(var r=t.attrsList,o=0,i=r.length;o<i;o++)if(r[o].name===e){r.splice(o,1);break}return n}function sn(t,e,n){var r=n||{},o=r.number,i=r.trim,a=\"$$v\";i&&(a=\"(typeof $$v === 'string'? $$v.trim(): $$v)\"),o&&(a=\"_n(\"+a+\")\");var s=un(e,a);t.model={value:\"(\"+e+\")\",expression:'\"'+e+'\"',callback:\"function ($$v) {\"+s+\"}\"}}function un(t,e){var n=cn(t);return null===n.idx?t+\"=\"+e:\"var $$exp = \"+n.exp+\", $$idx = \"+n.idx+\";if (!Array.isArray($$exp)){\"+t+\"=\"+e+\"}else{$$exp.splice($$idx, 1, \"+e+\")}\"}function cn(t){if(Ti=t,Si=Ti.length,Ri=Pi=Mi=0,t.indexOf(\"[\")<0||t.lastIndexOf(\"]\")<Si-1)return{exp:t,idx:null};for(;!ln();)ji=fn(),pn(ji)?dn(ji):91===ji&&hn(ji);return{exp:t.substring(0,Pi),idx:t.substring(Pi+1,Mi)}}function fn(){return Ti.charCodeAt(++Ri)}function ln(){return Ri>=Si}function pn(t){return 34===t||39===t}function hn(t){var e=1;for(Pi=Ri;!ln();)if(t=fn(),pn(t))dn(t);else if(91===t&&e++,93===t&&e--,0===e){Mi=Ri;break}}function dn(t){for(var e=t;!ln()&&(t=fn())!==e;);}function vn(t,e,n){Li=n;var r=e.value,o=e.modifiers,i=t.tag,a=t.attrsMap.type;if(\"select\"===i)gn(t,r,o);else if(\"input\"===i&&\"checkbox\"===a)yn(t,r,o);else if(\"input\"===i&&\"radio\"===a)mn(t,r,o);else if(\"input\"===i||\"textarea\"===i)_n(t,r,o);else if(!Ro.isReservedTag(i))return sn(t,r,o),!1;return!0}function yn(t,e,n){var r=n&&n.number,o=on(t,\"value\")||\"null\",i=on(t,\"true-value\")||\"true\",a=on(t,\"false-value\")||\"false\";tn(t,\"checked\",\"Array.isArray(\"+e+\")?_i(\"+e+\",\"+o+\")>-1\"+(\"true\"===i?\":(\"+e+\")\":\":_q(\"+e+\",\"+i+\")\")),rn(t,ca,\"var $$a=\"+e+\",$$el=$event.target,$$c=$$el.checked?(\"+i+\"):(\"+a+\");if(Array.isArray($$a)){var $$v=\"+(r?\"_n(\"+o+\")\":o)+\",$$i=_i($$a,$$v);if($$c){$$i<0&&(\"+e+\"=$$a.concat($$v))}else{$$i>-1&&(\"+e+\"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{\"+e+\"=$$c}\",null,!0)}function mn(t,e,n){var r=n&&n.number,o=on(t,\"value\")||\"null\";o=r?\"_n(\"+o+\")\":o,tn(t,\"checked\",\"_q(\"+e+\",\"+o+\")\"),rn(t,ca,un(e,o),null,!0)}function gn(t,e,n){var r=n&&n.number,o='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return '+(r?\"_n(val)\":\"val\")+\"})\",i=\"var $$selectedVal = \"+o+\";\";i=i+\" \"+un(e,\"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"),rn(t,\"change\",i,null,!0)}function _n(t,e,n){var r=t.attrsMap.type,o=n||{},i=o.lazy,a=o.number,s=o.trim,u=!i&&\"range\"!==r,c=i?\"change\":\"range\"===r?ua:\"input\",f=\"$event.target.value\";s&&(f=\"$event.target.value.trim()\"),a&&(f=\"_n(\"+f+\")\");var l=un(e,f);u&&(l=\"if($event.target.composing)return;\"+l),tn(t,\"value\",\"(\"+e+\")\"),rn(t,c,l,null,!0),(s||a||\"number\"===r)&&rn(t,\"blur\",\"$forceUpdate()\")}function bn(t){var e;t[ua]&&(e=Uo?\"change\":\"input\",t[e]=[].concat(t[ua],t[e]||[]),delete t[ua]),t[ca]&&(e=Ho?\"click\":\"change\",t[e]=[].concat(t[ca],t[e]||[]),delete t[ca])}function wn(t,e,n,r){if(n){var o=e,i=Ni;e=function(n){null!==(1===arguments.length?o(n):o.apply(null,arguments))&&xn(t,e,r,i)}}Ni.addEventListener(t,e,r)}function xn(t,e,n,r){(r||Ni).removeEventListener(t,e,n)}function An(t,e){if(t.data.on||e.data.on){var n=e.data.on||{},r=t.data.on||{};Ni=e.elm,bn(n),K(n,r,wn,xn,e.context)}}function En(t,e){if(t.data.domProps||e.data.domProps){var n,r,o=e.elm,i=t.data.domProps||{},a=e.data.domProps||{};a.__ob__&&(a=e.data.domProps=l({},a));for(n in i)null==a[n]&&(o[n]=\"\");for(n in a)if(r=a[n],\"textContent\"!==n&&\"innerHTML\"!==n||(e.children&&(e.children.length=0),r!==i[n]))if(\"value\"===n){o._value=r;var s=null==r?\"\":String(r);On(o,e,s)&&(o.value=s)}else o[n]=r}}function On(t,e,n){return!t.composing&&(\"option\"===e.tag||Cn(t,n)||$n(t,n))}function Cn(t,e){return document.activeElement!==t&&t.value!==e}function $n(t,e){var n=t.value,o=t._vModifiers;return o&&o.number||\"number\"===t.type?r(n)!==r(e):o&&o.trim?n.trim()!==e.trim():n!==e}function kn(t){var e=Sn(t.style);return t.staticStyle?l(t.staticStyle,e):e}function Sn(t){return Array.isArray(t)?d(t):\"string\"==typeof t?pa(t):t}function Tn(t,e){var n,r={};if(e)for(var o=t;o.componentInstance;)o=o.componentInstance._vnode,o.data&&(n=kn(o.data))&&l(r,n);(n=kn(t.data))&&l(r,n);for(var i=t;i=i.parent;)i.data&&(n=kn(i.data))&&l(r,n);return r}function jn(t,e){var n=e.data,r=t.data;if(n.staticStyle||n.style||r.staticStyle||r.style){var o,i,a=e.elm,s=t.data.staticStyle,u=t.data.style||{},c=s||u,f=Sn(e.data.style)||{};e.data.style=f.__ob__?l({},f):f;var p=Tn(e,!0);for(i in c)null==p[i]&&va(a,i,\"\");for(i in p)(o=p[i])!==c[i]&&va(a,i,null==o?\"\":o)}}function Rn(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(\" \")>-1?e.split(/\\s+/).forEach(function(e){return t.classList.add(e)}):t.classList.add(e);else{var n=\" \"+(t.getAttribute(\"class\")||\"\")+\" \";n.indexOf(\" \"+e+\" \")<0&&t.setAttribute(\"class\",(n+e).trim())}}function Pn(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(\" \")>-1?e.split(/\\s+/).forEach(function(e){return t.classList.remove(e)}):t.classList.remove(e);else{for(var n=\" \"+(t.getAttribute(\"class\")||\"\")+\" \",r=\" \"+e+\" \";n.indexOf(r)>=0;)n=n.replace(r,\" \");t.setAttribute(\"class\",n.trim())}}function Mn(t){if(t){if(\"object\"==typeof t){var e={};return!1!==t.css&&l(e,_a(t.name||\"v\")),l(e,t),e}return\"string\"==typeof t?_a(t):void 0}}function Ln(t){$a(function(){$a(t)})}function Nn(t,e){(t._transitionClasses||(t._transitionClasses=[])).push(e),Rn(t,e)}function In(t,e){t._transitionClasses&&i(t._transitionClasses,e),Pn(t,e)}function Un(t,e,n){var r=Bn(t,e),o=r.type,i=r.timeout,a=r.propCount;if(!o)return n();var s=o===wa?Ea:Ca,u=0,c=function(){t.removeEventListener(s,f),n()},f=function(e){e.target===t&&++u>=a&&c()};setTimeout(function(){u<a&&c()},i+1),t.addEventListener(s,f)}function Bn(t,e){var n,r=window.getComputedStyle(t),o=r[Aa+\"Delay\"].split(\", \"),i=r[Aa+\"Duration\"].split(\", \"),a=Dn(o,i),s=r[Oa+\"Delay\"].split(\", \"),u=r[Oa+\"Duration\"].split(\", \"),c=Dn(s,u),f=0,l=0;return e===wa?a>0&&(n=wa,f=a,l=i.length):e===xa?c>0&&(n=xa,f=c,l=u.length):(f=Math.max(a,c),n=f>0?a>c?wa:xa:null,l=n?n===wa?i.length:u.length:0),{type:n,timeout:f,propCount:l,hasTransform:n===wa&&ka.test(r[Aa+\"Property\"])}}function Dn(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map(function(e,n){return Fn(e)+Fn(t[n])}))}function Fn(t){return 1e3*Number(t.slice(0,-1))}function qn(t,e){var n=t.elm;n._leaveCb&&(n._leaveCb.cancelled=!0,n._leaveCb());var o=Mn(t.data.transition);if(o&&!n._enterCb&&1===n.nodeType){for(var i=o.css,a=o.type,s=o.enterClass,u=o.enterToClass,c=o.enterActiveClass,f=o.appearClass,l=o.appearToClass,h=o.appearActiveClass,d=o.beforeEnter,v=o.enter,y=o.afterEnter,m=o.enterCancelled,_=o.beforeAppear,b=o.appear,w=o.afterAppear,x=o.appearCancelled,A=o.duration,E=fi,O=fi.$vnode;O&&O.parent;)O=O.parent,E=O.context;var C=!E._isMounted||!t.isRootInsert;if(!C||b||\"\"===b){var $=C&&f?f:s,k=C&&h?h:c,S=C&&l?l:u,T=C?_||d:d,j=C&&\"function\"==typeof b?b:v,R=C?w||y:y,P=C?x||m:m,M=r(p(A)?A.enter:A),L=!1!==i&&!Bo,N=Vn(j),I=n._enterCb=g(function(){L&&(In(n,S),In(n,k)),I.cancelled?(L&&In(n,$),P&&P(n)):R&&R(n),n._enterCb=null});t.data.show||G(t.data.hook||(t.data.hook={}),\"insert\",function(){var e=n.parentNode,r=e&&e._pending&&e._pending[t.key];r&&r.tag===t.tag&&r.elm._leaveCb&&r.elm._leaveCb(),j&&j(n,I)}),T&&T(n),L&&(Nn(n,$),Nn(n,k),Ln(function(){Nn(n,S),In(n,$),I.cancelled||N||(Yn(M)?setTimeout(I,M):Un(n,a,I))})),t.data.show&&(e&&e(),j&&j(n,I)),L||N||I()}}}function Hn(t,e){function n(){x.cancelled||(t.data.show||((o.parentNode._pending||(o.parentNode._pending={}))[t.key]=t),l&&l(o),_&&(Nn(o,u),Nn(o,f),Ln(function(){Nn(o,c),In(o,u),x.cancelled||b||(Yn(w)?setTimeout(x,w):Un(o,s,x))})),h&&h(o,x),_||b||x())}var o=t.elm;o._enterCb&&(o._enterCb.cancelled=!0,o._enterCb());var i=Mn(t.data.transition);if(!i)return e();if(!o._leaveCb&&1===o.nodeType){var a=i.css,s=i.type,u=i.leaveClass,c=i.leaveToClass,f=i.leaveActiveClass,l=i.beforeLeave,h=i.leave,d=i.afterLeave,v=i.leaveCancelled,y=i.delayLeave,m=i.duration,_=!1!==a&&!Bo,b=Vn(h),w=r(p(m)?m.leave:m),x=o._leaveCb=g(function(){o.parentNode&&o.parentNode._pending&&(o.parentNode._pending[t.key]=null),_&&(In(o,c),In(o,f)),x.cancelled?(_&&In(o,u),v&&v(o)):(e(),d&&d(o)),o._leaveCb=null});y?y(n):n()}}function Yn(t){return\"number\"==typeof t&&!isNaN(t)}function Vn(t){if(!t)return!1;var e=t.fns;return e?Vn(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function zn(t,e){e.data.show||qn(e)}function Jn(t,e,n){var r=e.value,o=t.multiple;if(!o||Array.isArray(r)){for(var i,a,s=0,u=t.options.length;s<u;s++)if(a=t.options[s],o)i=m(r,Gn(a))>-1,a.selected!==i&&(a.selected=i);else if(y(Gn(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));o||(t.selectedIndex=-1)}}function Kn(t,e){for(var n=0,r=e.length;n<r;n++)if(y(Gn(e[n]),t))return!1;return!0}function Gn(t){return\"_value\"in t?t._value:t.value}function Wn(t){t.target.composing=!0}function Xn(t){t.target.composing=!1,Zn(t.target,\"input\")}function Zn(t,e){var n=document.createEvent(\"HTMLEvents\");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Qn(t){return!t.componentInstance||t.data&&t.data.transition?t:Qn(t.componentInstance._vnode)}function tr(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?tr(Q(e.children)):t}function er(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var o=n._parentListeners;for(var i in o)e[Oo(i)]=o[i];return e}function nr(t,e){return/\\d-keep-alive$/.test(e.tag)?t(\"keep-alive\"):null}function rr(t){for(;t=t.parent;)if(t.data.transition)return!0}function or(t,e){return e.key===t.key&&e.tag===t.tag}function ir(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function ar(t){t.data.newPos=t.elm.getBoundingClientRect()}function sr(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,o=e.top-n.top;if(r||o){t.data.moved=!0;var i=t.elm.style;i.transform=i.WebkitTransform=\"translate(\"+r+\"px,\"+o+\"px)\",i.transitionDuration=\"0s\"}}function ur(t){return Fa=Fa||document.createElement(\"div\"),Fa.innerHTML=t,Fa.textContent}function cr(t,e){var n=e?Es:As;return t.replace(n,function(t){return xs[t]})}function fr(t,e){function n(e){f+=e,t=t.substring(e)}function r(t,n,r){var o,s;if(null==n&&(n=f),null==r&&(r=f),t&&(s=t.toLowerCase()),t)for(o=a.length-1;o>=0&&a[o].lowerCasedTag!==s;o--);else o=0;if(o>=0){for(var u=a.length-1;u>=o;u--)e.end&&e.end(a[u].tag,n,r);a.length=o,i=o&&a[o-1].tag}else\"br\"===s?e.start&&e.start(t,[],!0,n,r):\"p\"===s&&(e.start&&e.start(t,[],!1,n,r),e.end&&e.end(t,n,r))}for(var o,i,a=[],s=e.expectHTML,u=e.isUnaryTag||To,c=e.canBeLeftOpenTag||To,f=0;t;){if(o=t,i&&bs(i)){var l=i.toLowerCase(),p=ws[l]||(ws[l]=new RegExp(\"([\\\\s\\\\S]*?)(</\"+l+\"[^>]*>)\",\"i\")),h=0,d=t.replace(p,function(t,n,r){return h=r.length,bs(l)||\"noscript\"===l||(n=n.replace(/<!--([\\s\\S]*?)-->/g,\"$1\").replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g,\"$1\")),e.chars&&e.chars(n),\"\"});f+=t.length-d.length,t=d,r(l,f-h,f)}else{var v=t.indexOf(\"<\");if(0===v){if(Qa.test(t)){var y=t.indexOf(\"--\\x3e\");if(y>=0){n(y+3);continue}}if(ts.test(t)){var m=t.indexOf(\"]>\");if(m>=0){n(m+2);continue}}var g=t.match(Za);if(g){n(g[0].length);continue}var _=t.match(Xa);if(_){var b=f;n(_[0].length),r(_[1],b,f);continue}var w=function(){var e=t.match(Ga);if(e){var r={tagName:e[1],attrs:[],start:f};n(e[0].length);for(var o,i;!(o=t.match(Wa))&&(i=t.match(Ja));)n(i[0].length),r.attrs.push(i);if(o)return r.unarySlash=o[1],n(o[0].length),r.end=f,r}}();if(w){!function(t){var n=t.tagName,o=t.unarySlash;s&&(\"p\"===i&&Va(n)&&r(i),c(n)&&i===n&&r(n));for(var f=u(n)||\"html\"===n&&\"head\"===i||!!o,l=t.attrs.length,p=new Array(l),h=0;h<l;h++){var d=t.attrs[h];es&&-1===d[0].indexOf('\"\"')&&(\"\"===d[3]&&delete d[3],\"\"===d[4]&&delete d[4],\"\"===d[5]&&delete d[5]);var v=d[3]||d[4]||d[5]||\"\";p[h]={name:d[1],value:cr(v,e.shouldDecodeNewlines)}}f||(a.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:p}),i=n),e.start&&e.start(n,p,f,t.start,t.end)}(w);continue}}var x=void 0,A=void 0,E=void 0;if(v>=0){for(A=t.slice(v);!(Xa.test(A)||Ga.test(A)||Qa.test(A)||ts.test(A)||(E=A.indexOf(\"<\",1))<0);)v+=E,A=t.slice(v);x=t.substring(0,v),n(v)}v<0&&(x=t,t=\"\"),e.chars&&x&&e.chars(x)}if(t===o){e.chars&&e.chars(t);break}}r()}function lr(t,e){var n=e?Cs(e):Os;if(n.test(t)){for(var r,o,i=[],a=n.lastIndex=0;r=n.exec(t);){o=r.index,o>a&&i.push(JSON.stringify(t.slice(a,o)));var s=We(r[1].trim());i.push(\"_s(\"+s+\")\"),a=o+r[0].length}return a<t.length&&i.push(JSON.stringify(t.slice(a))),i.join(\"+\")}}function pr(t,e){function n(t){t.pre&&(s=!1),ss(t.tag)&&(u=!1)}ns=e.warn||Ze,cs=e.getTagNamespace||To,us=e.mustUseProp||To,ss=e.isPreTag||To,is=Qe(e.modules,\"preTransformNode\"),os=Qe(e.modules,\"transformNode\"),as=Qe(e.modules,\"postTransformNode\"),rs=e.delimiters;var r,o,i=[],a=!1!==e.preserveWhitespace,s=!1,u=!1;return fr(t,{warn:ns,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,start:function(t,a,c){var f=o&&o.ns||cs(t);Uo&&\"svg\"===f&&(a=Tr(a));var l={type:1,tag:t,attrsList:a,attrsMap:kr(a),parent:o,children:[]};f&&(l.ns=f),Sr(l)&&!Yo()&&(l.forbidden=!0);for(var p=0;p<is.length;p++)is[p](l,e);if(s||(hr(l),l.pre&&(s=!0)),ss(l.tag)&&(u=!0),s)dr(l);else{mr(l),gr(l),xr(l),vr(l),l.plain=!l.key&&!a.length,yr(l),Ar(l),Er(l);for(var h=0;h<os.length;h++)os[h](l,e);Or(l)}if(r?i.length||r.if&&(l.elseif||l.else)&&wr(r,{exp:l.elseif,block:l}):r=l,o&&!l.forbidden)if(l.elseif||l.else)_r(l,o);else if(l.slotScope){o.plain=!1;var d=l.slotTarget||'\"default\"';(o.scopedSlots||(o.scopedSlots={}))[d]=l}else o.children.push(l),l.parent=o;c?n(l):(o=l,i.push(l));for(var v=0;v<as.length;v++)as[v](l,e)},end:function(){var t=i[i.length-1],e=t.children[t.children.length-1];e&&3===e.type&&\" \"===e.text&&!u&&t.children.pop(),i.length-=1,o=i[i.length-1],n(t)},chars:function(t){if(o&&(!Uo||\"textarea\"!==o.tag||o.attrsMap.placeholder!==t)){var e=o.children;if(t=u||t.trim()?Ms(t):a&&e.length?\" \":\"\"){var n;!s&&\" \"!==t&&(n=lr(t,rs))?e.push({type:2,expression:n,text:t}):\" \"===t&&e.length&&\" \"===e[e.length-1].text||e.push({type:3,text:t})}}}}),r}function hr(t){null!=an(t,\"v-pre\")&&(t.pre=!0)}function dr(t){var e=t.attrsList.length;if(e)for(var n=t.attrs=new Array(e),r=0;r<e;r++)n[r]={name:t.attrsList[r].name,value:JSON.stringify(t.attrsList[r].value)};else t.pre||(t.plain=!0)}function vr(t){var e=on(t,\"key\");e&&(t.key=e)}function yr(t){var e=on(t,\"ref\");e&&(t.ref=e,t.refInFor=Cr(t))}function mr(t){var e;if(e=an(t,\"v-for\")){var n=e.match(Ss);if(!n)return;t.for=n[2].trim();var r=n[1].trim(),o=r.match(Ts);o?(t.alias=o[1].trim(),t.iterator1=o[2].trim(),o[3]&&(t.iterator2=o[3].trim())):t.alias=r}}function gr(t){var e=an(t,\"v-if\");if(e)t.if=e,wr(t,{exp:e,block:t});else{null!=an(t,\"v-else\")&&(t.else=!0);var n=an(t,\"v-else-if\");n&&(t.elseif=n)}}function _r(t,e){var n=br(e.children);n&&n.if&&wr(n,{exp:t.elseif,block:t})}function br(t){for(var e=t.length;e--;){if(1===t[e].type)return t[e];t.pop()}}function wr(t,e){t.ifConditions||(t.ifConditions=[]),t.ifConditions.push(e)}function xr(t){null!=an(t,\"v-once\")&&(t.once=!0)}function Ar(t){if(\"slot\"===t.tag)t.slotName=on(t,\"name\");else{var e=on(t,\"slot\");e&&(t.slotTarget='\"\"'===e?'\"default\"':e),\"template\"===t.tag&&(t.slotScope=an(t,\"scope\"))}}function Er(t){var e;(e=on(t,\"is\"))&&(t.component=e),null!=an(t,\"inline-template\")&&(t.inlineTemplate=!0)}function Or(t){var e,n,r,o,i,a,s,u=t.attrsList;for(e=0,n=u.length;e<n;e++)if(r=o=u[e].name,i=u[e].value,ks.test(r))if(t.hasBindings=!0,a=$r(r),a&&(r=r.replace(Ps,\"\")),Rs.test(r))r=r.replace(Rs,\"\"),i=We(i),s=!1,a&&(a.prop&&(s=!0,\"innerHtml\"===(r=Oo(r))&&(r=\"innerHTML\")),a.camel&&(r=Oo(r))),s||us(t.tag,t.attrsMap.type,r)?tn(t,r,i):en(t,r,i);else if($s.test(r))r=r.replace($s,\"\"),rn(t,r,i,a);else{r=r.replace(ks,\"\");var c=r.match(js),f=c&&c[1];f&&(r=r.slice(0,-(f.length+1))),nn(t,r,o,i,f,a)}else{en(t,r,JSON.stringify(i))}}function Cr(t){for(var e=t;e;){if(void 0!==e.for)return!0;e=e.parent}return!1}function $r(t){var e=t.match(Ps);if(e){var n={};return e.forEach(function(t){n[t.slice(1)]=!0}),n}}function kr(t){for(var e={},n=0,r=t.length;n<r;n++)e[t[n].name]=t[n].value;return e}function Sr(t){return\"style\"===t.tag||\"script\"===t.tag&&(!t.attrsMap.type||\"text/javascript\"===t.attrsMap.type)}function Tr(t){for(var e=[],n=0;n<t.length;n++){var r=t[n];Ls.test(r.name)||(r.name=r.name.replace(Ns,\"\"),e.push(r))}return e}function jr(t,e){t&&(fs=Is(e.staticKeys||\"\"),ls=e.isReservedTag||To,Pr(t),Mr(t,!1))}function Rr(t){return o(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs\"+(t?\",\"+t:\"\"))}function Pr(t){if(t.static=Nr(t),1===t.type){if(!ls(t.tag)&&\"slot\"!==t.tag&&null==t.attrsMap[\"inline-template\"])return;for(var e=0,n=t.children.length;e<n;e++){var r=t.children[e];Pr(r),r.static||(t.static=!1)}}}function Mr(t,e){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=e),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(var n=0,r=t.children.length;n<r;n++)Mr(t.children[n],e||!!t.for);t.ifConditions&&Lr(t.ifConditions,e)}}function Lr(t,e){for(var n=1,r=t.length;n<r;n++)Mr(t[n].block,e)}function Nr(t){return 2!==t.type&&(3===t.type||!(!t.pre&&(t.hasBindings||t.if||t.for||Ao(t.tag)||!ls(t.tag)||Ir(t)||!Object.keys(t).every(fs))))}function Ir(t){for(;t.parent;){if(t=t.parent,\"template\"!==t.tag)return!1;if(t.for)return!0}return!1}function Ur(t,e){var n=e?\"nativeOn:{\":\"on:{\";for(var r in t)n+='\"'+r+'\":'+Br(r,t[r])+\",\";return n.slice(0,-1)+\"}\"}function Br(t,e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\"+e.map(function(e){return Br(t,e)}).join(\",\")+\"]\";var n=Bs.test(e.value),r=Us.test(e.value);if(e.modifiers){var o=\"\",i=\"\",a=[];for(var s in e.modifiers)qs[s]?(i+=qs[s],Ds[s]&&a.push(s)):a.push(s);a.length&&(o+=Dr(a)),i&&(o+=i);return\"function($event){\"+o+(n?e.value+\"($event)\":r?\"(\"+e.value+\")($event)\":e.value)+\"}\"}return n||r?e.value:\"function($event){\"+e.value+\"}\"}function Dr(t){return\"if(!('button' in $event)&&\"+t.map(Fr).join(\"&&\")+\")return null;\"}function Fr(t){var e=parseInt(t,10);if(e)return\"$event.keyCode!==\"+e;var n=Ds[t];return\"_k($event.keyCode,\"+JSON.stringify(t)+(n?\",\"+JSON.stringify(n):\"\")+\")\"}function qr(t,e){t.wrapData=function(n){return\"_b(\"+n+\",'\"+t.tag+\"',\"+e.value+(e.modifiers&&e.modifiers.prop?\",true\":\"\")+\")\"}}function Hr(t,e){var n=ms,r=ms=[],o=gs;gs=0,_s=e,ps=e.warn||Ze,hs=Qe(e.modules,\"transformCode\"),ds=Qe(e.modules,\"genData\"),vs=e.directives||{},ys=e.isReservedTag||To;var i=t?Yr(t):'_c(\"div\")';return ms=n,gs=o,{render:\"with(this){return \"+i+\"}\",staticRenderFns:r}}function Yr(t){if(t.staticRoot&&!t.staticProcessed)return Vr(t);if(t.once&&!t.onceProcessed)return zr(t);if(t.for&&!t.forProcessed)return Gr(t);if(t.if&&!t.ifProcessed)return Jr(t);if(\"template\"!==t.tag||t.slotTarget){if(\"slot\"===t.tag)return so(t);var e;if(t.component)e=uo(t.component,t);else{var n=t.plain?void 0:Wr(t),r=t.inlineTemplate?null:eo(t,!0);e=\"_c('\"+t.tag+\"'\"+(n?\",\"+n:\"\")+(r?\",\"+r:\"\")+\")\"}for(var o=0;o<hs.length;o++)e=hs[o](t,e);return e}return eo(t)||\"void 0\"}function Vr(t){return t.staticProcessed=!0,ms.push(\"with(this){return \"+Yr(t)+\"}\"),\"_m(\"+(ms.length-1)+(t.staticInFor?\",true\":\"\")+\")\"}function zr(t){if(t.onceProcessed=!0,t.if&&!t.ifProcessed)return Jr(t);if(t.staticInFor){for(var e=\"\",n=t.parent;n;){if(n.for){e=n.key;break}n=n.parent}return e?\"_o(\"+Yr(t)+\",\"+gs+++(e?\",\"+e:\"\")+\")\":Yr(t)}return Vr(t)}function Jr(t){return t.ifProcessed=!0,Kr(t.ifConditions.slice())}function Kr(t){function e(t){return t.once?zr(t):Yr(t)}if(!t.length)return\"_e()\";var n=t.shift();return n.exp?\"(\"+n.exp+\")?\"+e(n.block)+\":\"+Kr(t):\"\"+e(n.block)}function Gr(t){var e=t.for,n=t.alias,r=t.iterator1?\",\"+t.iterator1:\"\",o=t.iterator2?\",\"+t.iterator2:\"\";return t.forProcessed=!0,\"_l((\"+e+\"),function(\"+n+r+o+\"){return \"+Yr(t)+\"})\"}function Wr(t){var e=\"{\",n=Xr(t);n&&(e+=n+\",\"),t.key&&(e+=\"key:\"+t.key+\",\"),t.ref&&(e+=\"ref:\"+t.ref+\",\"),t.refInFor&&(e+=\"refInFor:true,\"),t.pre&&(e+=\"pre:true,\"),t.component&&(e+='tag:\"'+t.tag+'\",');for(var r=0;r<ds.length;r++)e+=ds[r](t);if(t.attrs&&(e+=\"attrs:{\"+co(t.attrs)+\"},\"),t.props&&(e+=\"domProps:{\"+co(t.props)+\"},\"),t.events&&(e+=Ur(t.events)+\",\"),t.nativeEvents&&(e+=Ur(t.nativeEvents,!0)+\",\"),t.slotTarget&&(e+=\"slot:\"+t.slotTarget+\",\"),t.scopedSlots&&(e+=Qr(t.scopedSlots)+\",\"),t.model&&(e+=\"model:{value:\"+t.model.value+\",callback:\"+t.model.callback+\",expression:\"+t.model.expression+\"},\"),t.inlineTemplate){var o=Zr(t);o&&(e+=o+\",\")}return e=e.replace(/,$/,\"\")+\"}\",t.wrapData&&(e=t.wrapData(e)),e}function Xr(t){var e=t.directives;if(e){var n,r,o,i,a=\"directives:[\",s=!1;for(n=0,r=e.length;n<r;n++){o=e[n],i=!0;var u=vs[o.name]||Hs[o.name];u&&(i=!!u(t,o,ps)),i&&(s=!0,a+='{name:\"'+o.name+'\",rawName:\"'+o.rawName+'\"'+(o.value?\",value:(\"+o.value+\"),expression:\"+JSON.stringify(o.value):\"\")+(o.arg?',arg:\"'+o.arg+'\"':\"\")+(o.modifiers?\",modifiers:\"+JSON.stringify(o.modifiers):\"\")+\"},\")}return s?a.slice(0,-1)+\"]\":void 0}}function Zr(t){var e=t.children[0];if(1===e.type){var n=Hr(e,_s);return\"inlineTemplate:{render:function(){\"+n.render+\"},staticRenderFns:[\"+n.staticRenderFns.map(function(t){return\"function(){\"+t+\"}\"}).join(\",\")+\"]}\"}}function Qr(t){return\"scopedSlots:_u([\"+Object.keys(t).map(function(e){return to(e,t[e])}).join(\",\")+\"])\"}function to(t,e){return\"[\"+t+\",function(\"+String(e.attrsMap.scope)+\"){return \"+(\"template\"===e.tag?eo(e)||\"void 0\":Yr(e))+\"}]\"}function eo(t,e){var n=t.children;if(n.length){var r=n[0];if(1===n.length&&r.for&&\"template\"!==r.tag&&\"slot\"!==r.tag)return Yr(r);var o=e?no(n):0;return\"[\"+n.map(io).join(\",\")+\"]\"+(o?\",\"+o:\"\")}}function no(t){for(var e=0,n=0;n<t.length;n++){var r=t[n];if(1===r.type){if(ro(r)||r.ifConditions&&r.ifConditions.some(function(t){return ro(t.block)})){e=2;break}(oo(r)||r.ifConditions&&r.ifConditions.some(function(t){return oo(t.block)}))&&(e=1)}}return e}function ro(t){return void 0!==t.for||\"template\"===t.tag||\"slot\"===t.tag}function oo(t){return!ys(t.tag)}function io(t){return 1===t.type?Yr(t):ao(t)}function ao(t){return\"_v(\"+(2===t.type?t.expression:fo(JSON.stringify(t.text)))+\")\"}function so(t){var e=t.slotName||'\"default\"',n=eo(t),r=\"_t(\"+e+(n?\",\"+n:\"\"),o=t.attrs&&\"{\"+t.attrs.map(function(t){return Oo(t.name)+\":\"+t.value}).join(\",\")+\"}\",i=t.attrsMap[\"v-bind\"];return!o&&!i||n||(r+=\",null\"),o&&(r+=\",\"+o),i&&(r+=(o?\"\":\",null\")+\",\"+i),r+\")\"}function uo(t,e){var n=e.inlineTemplate?null:eo(e,!0);return\"_c(\"+t+\",\"+Wr(e)+(n?\",\"+n:\"\")+\")\"}function co(t){for(var e=\"\",n=0;n<t.length;n++){var r=t[n];e+='\"'+r.name+'\":'+fo(r.value)+\",\"}return e.slice(0,-1)}function fo(t){return t.replace(/\\u2028/g,\"\\\\u2028\").replace(/\\u2029/g,\"\\\\u2029\")}function lo(t,e){var n=pr(t.trim(),e);jr(n,e);var r=Hr(n,e);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}}function po(t,e){try{return new Function(t)}catch(n){return e.push({err:n,code:t}),v}}function ho(t,e){var n=(e.warn,an(t,\"class\"));n&&(t.staticClass=JSON.stringify(n));var r=on(t,\"class\",!1);r&&(t.classBinding=r)}function vo(t){var e=\"\";return t.staticClass&&(e+=\"staticClass:\"+t.staticClass+\",\"),t.classBinding&&(e+=\"class:\"+t.classBinding+\",\"),e}function yo(t,e){var n=(e.warn,an(t,\"style\"));if(n){t.staticStyle=JSON.stringify(pa(n))}var r=on(t,\"style\",!1);r&&(t.styleBinding=r)}function mo(t){var e=\"\";return t.staticStyle&&(e+=\"staticStyle:\"+t.staticStyle+\",\"),t.styleBinding&&(e+=\"style:(\"+t.styleBinding+\"),\"),e}function go(t,e){e.value&&tn(t,\"textContent\",\"_s(\"+e.value+\")\")}function _o(t,e){e.value&&tn(t,\"innerHTML\",\"_s(\"+e.value+\")\")}function bo(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement(\"div\");return e.appendChild(t.cloneNode(!0)),e.innerHTML}var wo,xo,Ao=o(\"slot,component\",!0),Eo=Object.prototype.hasOwnProperty,Oo=u(function(t){return t.replace(/-(\\w)/g,function(t,e){return e?e.toUpperCase():\"\"})}),Co=u(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),$o=u(function(t){return t.replace(/([^-])([A-Z])/g,\"$1-$2\").replace(/([^-])([A-Z])/g,\"$1-$2\").toLowerCase()}),ko=Object.prototype.toString,So=\"[object Object]\",To=function(){return!1},jo=function(t){return t},Ro={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:To,isUnknownElement:To,getTagNamespace:v,parsePlatformTagName:jo,mustUseProp:To,_assetTypes:[\"component\",\"directive\",\"filter\"],_lifecycleHooks:[\"beforeCreate\",\"created\",\"beforeMount\",\"mounted\",\"beforeUpdate\",\"updated\",\"beforeDestroy\",\"destroyed\",\"activated\",\"deactivated\"],_maxUpdateCount:100},Po=Object.freeze({}),Mo=/[^\\w.$]/,Lo=\"__proto__\"in{},No=\"undefined\"!=typeof window,Io=No&&window.navigator.userAgent.toLowerCase(),Uo=Io&&/msie|trident/.test(Io),Bo=Io&&Io.indexOf(\"msie 9.0\")>0,Do=Io&&Io.indexOf(\"edge/\")>0,Fo=Io&&Io.indexOf(\"android\")>0,qo=Io&&/iphone|ipad|ipod|ios/.test(Io),Ho=Io&&/chrome\\/\\d+/.test(Io)&&!Do,Yo=function(){return void 0===wo&&(wo=!No&&void 0!==t&&\"server\"===t.process.env.VUE_ENV),wo},Vo=No&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,zo=\"undefined\"!=typeof Symbol&&x(Symbol)&&\"undefined\"!=typeof Reflect&&x(Reflect.ownKeys),Jo=function(){function t(){r=!1;var t=n.slice(0);n.length=0;for(var e=0;e<t.length;e++)t[e]()}var e,n=[],r=!1;if(\"undefined\"!=typeof Promise&&x(Promise)){var o=Promise.resolve(),i=function(t){console.error(t)};e=function(){o.then(t).catch(i),qo&&setTimeout(v)}}else if(\"undefined\"==typeof MutationObserver||!x(MutationObserver)&&\"[object MutationObserverConstructor]\"!==MutationObserver.toString())e=function(){setTimeout(t,0)};else{var a=1,s=new MutationObserver(t),u=document.createTextNode(String(a));s.observe(u,{characterData:!0}),e=function(){a=(a+1)%2,u.data=String(a)}}return function(t,o){var i;if(n.push(function(){t&&t.call(o),i&&i(o)}),r||(r=!0,e()),!t&&\"undefined\"!=typeof Promise)return new Promise(function(t){i=t})}}();xo=\"undefined\"!=typeof Set&&x(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var Ko=v,Go=0,Wo=function(){this.id=Go++,this.subs=[]};Wo.prototype.addSub=function(t){this.subs.push(t)},Wo.prototype.removeSub=function(t){i(this.subs,t)},Wo.prototype.depend=function(){Wo.target&&Wo.target.addDep(this)},Wo.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;e<n;e++)t[e].update()},Wo.target=null;var Xo=[],Zo=Array.prototype,Qo=Object.create(Zo);[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\",\"sort\",\"reverse\"].forEach(function(t){var e=Zo[t];b(Qo,t,function(){for(var n=arguments,r=arguments.length,o=new Array(r);r--;)o[r]=n[r];var i,a=e.apply(this,o),s=this.__ob__;switch(t){case\"push\":case\"unshift\":i=o;break;case\"splice\":i=o.slice(2)}return i&&s.observeArray(i),s.dep.notify(),a})});var ti=Object.getOwnPropertyNames(Qo),ei={shouldConvert:!0,isSettingProps:!1},ni=function(t){if(this.value=t,this.dep=new Wo,this.vmCount=0,b(t,\"__ob__\",this),Array.isArray(t)){(Lo?O:C)(t,Qo,ti),this.observeArray(t)}else this.walk(t)};ni.prototype.walk=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)k(t,e[n],t[e[n]])},ni.prototype.observeArray=function(t){for(var e=0,n=t.length;e<n;e++)$(t[e])};var ri=Ro.optionMergeStrategies;ri.data=function(t,e,n){return n?t||e?function(){var r=\"function\"==typeof e?e.call(n):e,o=\"function\"==typeof t?t.call(n):void 0;return r?R(r,o):o}:void 0:e?\"function\"!=typeof e?t:t?function(){return R(e.call(this),t.call(this))}:e:t},Ro._lifecycleHooks.forEach(function(t){ri[t]=P}),Ro._assetTypes.forEach(function(t){ri[t+\"s\"]=M}),ri.watch=function(t,e){if(!e)return Object.create(t||null);if(!t)return e;var n={};l(n,t);for(var r in e){var o=n[r],i=e[r];o&&!Array.isArray(o)&&(o=[o]),n[r]=o?o.concat(i):[i]}return n},ri.props=ri.methods=ri.computed=function(t,e){if(!e)return Object.create(t||null);if(!t)return e;var n=Object.create(null);return l(n,t),l(n,e),n};var oi=function(t,e){return void 0===e?t:e},ii=function(t,e,n,r,o,i,a){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.functionalContext=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1},ai={child:{}};ai.child.get=function(){return this.componentInstance},Object.defineProperties(ii.prototype,ai);var si,ui=function(){var t=new ii;return t.text=\"\",t.isComment=!0,t},ci=u(function(t){var e=\"~\"===t.charAt(0);t=e?t.slice(1):t;var n=\"!\"===t.charAt(0);return t=n?t.slice(1):t,{name:t,once:e,capture:n}}),fi=null,li=[],pi={},hi=!1,di=!1,vi=0,yi=0,mi=function(t,e,n,r){this.vm=t,t._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++yi,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new xo,this.newDepIds=new xo,this.expression=\"\",\"function\"==typeof e?this.getter=e:(this.getter=w(e),this.getter||(this.getter=function(){})),this.value=this.lazy?void 0:this.get()};mi.prototype.get=function(){A(this);var t,e=this.vm;if(this.user)try{t=this.getter.call(e,e)}catch(t){H(t,e,'getter for watcher \"'+this.expression+'\"')}else t=this.getter.call(e,e);return this.deep&&mt(t),E(),this.cleanupDeps(),t},mi.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},mi.prototype.cleanupDeps=function(){for(var t=this,e=this.deps.length;e--;){var n=t.deps[e];t.newDepIds.has(n.id)||n.removeSub(t)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},mi.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():yt(this)},mi.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||p(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){H(t,this.vm,'callback for watcher \"'+this.expression+'\"')}else this.cb.call(this.vm,t,e)}}},mi.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},mi.prototype.depend=function(){for(var t=this,e=this.deps.length;e--;)t.deps[e].depend()},mi.prototype.teardown=function(){var t=this;if(this.active){this.vm._isBeingDestroyed||i(this.vm._watchers,this);for(var e=this.deps.length;e--;)t.deps[e].removeSub(t);this.active=!1}};var gi=new xo,_i={enumerable:!0,configurable:!0,get:v,set:v},bi={lazy:!0},wi={init:function(t,e,n,r){if(!t.componentInstance||t.componentInstance._isDestroyed){(t.componentInstance=Rt(t,fi,n,r)).$mount(e?t.elm:void 0,e)}else if(t.data.keepAlive){var o=t;wi.prepatch(o,o)}},prepatch:function(t,e){var n=e.componentOptions;ct(e.componentInstance=t.componentInstance,n.propsData,n.listeners,e,n.children)},insert:function(t){t.componentInstance._isMounted||(t.componentInstance._isMounted=!0,ht(t.componentInstance,\"mounted\")),t.data.keepAlive&&lt(t.componentInstance,!0)},destroy:function(t){t.componentInstance._isDestroyed||(t.data.keepAlive?pt(t.componentInstance,!0):t.componentInstance.$destroy())}},xi=Object.keys(wi),Ai=1,Ei=2,Oi=0;!function(t){t.prototype._init=function(t){var e=this;e._uid=Oi++,e._isVue=!0,t&&t._isComponent?te(e,t):e.$options=I(ee(e.constructor),t||{},e),e._renderProxy=e,e._self=e,st(e),tt(e),Xt(e),ht(e,\"beforeCreate\"),Qt(e),bt(e),Zt(e),ht(e,\"created\"),e.$options.el&&e.$mount(e.$options.el)}}(oe),function(t){var e={};e.get=function(){return this._data};var n={};n.get=function(){return this._props},Object.defineProperty(t.prototype,\"$data\",e),Object.defineProperty(t.prototype,\"$props\",n),t.prototype.$set=S,t.prototype.$delete=T,t.prototype.$watch=function(t,e,n){var r=this;n=n||{},n.user=!0;var o=new mi(r,t,e,n);return n.immediate&&e.call(r,o.value),function(){o.teardown()}}}(oe),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this,o=this;if(Array.isArray(t))for(var i=0,a=t.length;i<a;i++)r.$on(t[i],n);else(o._events[t]||(o._events[t]=[])).push(n),e.test(t)&&(o._hasHookEvent=!0);return o},t.prototype.$once=function(t,e){function n(){r.$off(t,n),e.apply(r,arguments)}var r=this;return n.fn=e,r.$on(t,n),r},t.prototype.$off=function(t,e){var n=this,r=this;if(!arguments.length)return r._events=Object.create(null),r;if(Array.isArray(t)){for(var o=0,i=t.length;o<i;o++)n.$off(t[o],e);return r}var a=r._events[t];if(!a)return r;if(1===arguments.length)return r._events[t]=null,r;for(var s,u=a.length;u--;)if((s=a[u])===e||s.fn===e){a.splice(u,1);break}return r},t.prototype.$emit=function(t){var e=this,n=e._events[t];if(n){n=n.length>1?f(n):n;for(var r=f(arguments,1),o=0,i=n.length;o<i;o++)n[o].apply(e,r)}return e}}(oe),function(t){t.prototype._update=function(t,e){var n=this;n._isMounted&&ht(n,\"beforeUpdate\");var r=n.$el,o=n._vnode,i=fi;fi=n,n._vnode=t,n.$el=o?n.__patch__(o,t):n.__patch__(n.$el,t,e,!1,n.$options._parentElm,n.$options._refElm),fi=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},t.prototype.$forceUpdate=function(){var t=this;t._watcher&&t._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){ht(t,\"beforeDestroy\"),t._isBeingDestroyed=!0;var e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||i(e.$children,t),t._watcher&&t._watcher.teardown();for(var n=t._watchers.length;n--;)t._watchers[n].teardown();t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),ht(t,\"destroyed\"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$options._parentElm=t.$options._refElm=null}}}(oe),function(t){t.prototype.$nextTick=function(t){return Jo(t,this)},t.prototype._render=function(){var t=this,e=t.$options,n=e.render,r=e.staticRenderFns,o=e._parentVnode;if(t._isMounted)for(var i in t.$slots)t.$slots[i]=z(t.$slots[i]);t.$scopedSlots=o&&o.data.scopedSlots||Po,r&&!t._staticTrees&&(t._staticTrees=[]),t.$vnode=o;var a;try{a=n.call(t._renderProxy,t.$createElement)}catch(e){H(e,t,\"render function\"),a=t._vnode}return a instanceof ii||(a=ui()),a.parent=o,a},t.prototype._o=Kt,t.prototype._n=r,t.prototype._s=n,t.prototype._l=qt,t.prototype._t=Ht,t.prototype._q=y,t.prototype._i=m,t.prototype._m=Jt,t.prototype._f=Yt,t.prototype._k=Vt,t.prototype._b=zt,t.prototype._v=Y,t.prototype._e=ui,t.prototype._u=at}(oe);var Ci=[String,RegExp],$i={name:\"keep-alive\",abstract:!0,props:{include:Ci,exclude:Ci},created:function(){this.cache=Object.create(null)},destroyed:function(){var t=this;for(var e in t.cache)de(t.cache[e])},watch:{include:function(t){he(this.cache,function(e){return pe(t,e)})},exclude:function(t){he(this.cache,function(e){return!pe(t,e)})}},render:function(){var t=Q(this.$slots.default),e=t&&t.componentOptions;if(e){var n=le(e);if(n&&(this.include&&!pe(this.include,n)||this.exclude&&pe(this.exclude,n)))return t;var r=null==t.key?e.Ctor.cid+(e.tag?\"::\"+e.tag:\"\"):t.key;this.cache[r]?t.componentInstance=this.cache[r].componentInstance:this.cache[r]=t,t.data.keepAlive=!0}return t}},ki={KeepAlive:$i};!function(t){var e={};e.get=function(){return Ro},Object.defineProperty(t,\"config\",e),t.util={warn:Ko,extend:l,mergeOptions:I,defineReactive:k},t.set=S,t.delete=T,t.nextTick=Jo,t.options=Object.create(null),Ro._assetTypes.forEach(function(e){t.options[e+\"s\"]=Object.create(null)}),t.options._base=t,l(t.options.components,ki),ie(t),ae(t),se(t),fe(t)}(oe),Object.defineProperty(oe.prototype,\"$isServer\",{get:Yo}),oe.version=\"2.2.6\";var Si,Ti,ji,Ri,Pi,Mi,Li,Ni,Ii,Ui=o(\"input,textarea,option,select\"),Bi=function(t,e,n){return\"value\"===n&&Ui(t)&&\"button\"!==e||\"selected\"===n&&\"option\"===t||\"checked\"===n&&\"input\"===t||\"muted\"===n&&\"video\"===t},Di=o(\"contenteditable,draggable,spellcheck\"),Fi=o(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible\"),qi=\"http://www.w3.org/1999/xlink\",Hi=function(t){return\":\"===t.charAt(5)&&\"xlink\"===t.slice(0,5)},Yi=function(t){return Hi(t)?t.slice(6,t.length):\"\"},Vi=function(t){return null==t||!1===t},zi={svg:\"http://www.w3.org/2000/svg\",math:\"http://www.w3.org/1998/Math/MathML\"},Ji=o(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template\"),Ki=o(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\",!0),Gi=function(t){return\"pre\"===t},Wi=function(t){return Ji(t)||Ki(t)},Xi=Object.create(null),Zi=Object.freeze({createElement:Ae,createElementNS:Ee,createTextNode:Oe,createComment:Ce,insertBefore:$e,removeChild:ke,appendChild:Se,parentNode:Te,nextSibling:je,tagName:Re,setTextContent:Pe,setAttribute:Me}),Qi={create:function(t,e){Le(e)},update:function(t,e){t.data.ref!==e.data.ref&&(Le(t,!0),Le(e))},destroy:function(t){Le(t,!0)}},ta=new ii(\"\",{},[]),ea=[\"create\",\"activate\",\"update\",\"remove\",\"destroy\"],na={create:qe,update:qe,destroy:function(t){qe(t,ta)}},ra=Object.create(null),oa=[Qi,na],ia={create:Je,update:Je},aa={create:Ge,update:Ge},sa=/[\\w).+\\-_$\\]]/,ua=\"__r\",ca=\"__c\",fa={create:An,update:An},la={create:En,update:En},pa=u(function(t){var e={};return t.split(/;(?![^(]*\\))/g).forEach(function(t){if(t){var n=t.split(/:(.+)/);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}),ha=/^--/,da=/\\s*!important$/,va=function(t,e,n){ha.test(e)?t.style.setProperty(e,n):da.test(n)?t.style.setProperty(e,n.replace(da,\"\"),\"important\"):t.style[ma(e)]=n},ya=[\"Webkit\",\"Moz\",\"ms\"],ma=u(function(t){if(Ii=Ii||document.createElement(\"div\"),\"filter\"!==(t=Oo(t))&&t in Ii.style)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),n=0;n<ya.length;n++){var r=ya[n]+e;if(r in Ii.style)return r}}),ga={create:jn,update:jn},_a=u(function(t){return{enterClass:t+\"-enter\",enterToClass:t+\"-enter-to\",enterActiveClass:t+\"-enter-active\",leaveClass:t+\"-leave\",leaveToClass:t+\"-leave-to\",leaveActiveClass:t+\"-leave-active\"}}),ba=No&&!Bo,wa=\"transition\",xa=\"animation\",Aa=\"transition\",Ea=\"transitionend\",Oa=\"animation\",Ca=\"animationend\";ba&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Aa=\"WebkitTransition\",Ea=\"webkitTransitionEnd\"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Oa=\"WebkitAnimation\",Ca=\"webkitAnimationEnd\"));var $a=No&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout,ka=/\\b(transform|all)(,|$)/,Sa=No?{create:zn,activate:zn,remove:function(t,e){t.data.show?e():Hn(t,e)}}:{},Ta=[ia,aa,fa,la,ga,Sa],ja=Ta.concat(oa),Ra=function(t){function e(t){return new ii($.tagName(t).toLowerCase(),{},[],void 0,t)}function n(t,e){function n(){0==--n.listeners&&r(t)}return n.listeners=e,n}function r(t){var e=$.parentNode(t);Ie(e)&&$.removeChild(e,t)}function i(t,e,n,r,o){if(t.isRootInsert=!o,!a(t,e,n,r)){var i=t.data,s=t.children,u=t.tag;Ie(u)?(t.elm=t.ns?$.createElementNS(t.ns,u):$.createElement(u,t),d(t),l(t,s,e),Ie(i)&&h(t,e),f(n,t.elm,r)):Ue(t.isComment)?(t.elm=$.createComment(t.text),f(n,t.elm,r)):(t.elm=$.createTextNode(t.text),f(n,t.elm,r))}}function a(t,e,n,r){var o=t.data;if(Ie(o)){var i=Ie(t.componentInstance)&&o.keepAlive;if(Ie(o=o.hook)&&Ie(o=o.init)&&o(t,!1,n,r),Ie(t.componentInstance))return u(t,e),Ue(i)&&c(t,e,n,r),!0}}function u(t,e){Ie(t.data.pendingInsert)&&e.push.apply(e,t.data.pendingInsert),t.elm=t.componentInstance.$el,p(t)?(h(t,e),d(t)):(Le(t),e.push(t))}function c(t,e,n,r){for(var o,i=t;i.componentInstance;)if(i=i.componentInstance._vnode,Ie(o=i.data)&&Ie(o=o.transition)){for(o=0;o<O.activate.length;++o)O.activate[o](ta,i);e.push(i);break}f(n,t.elm,r)}function f(t,e,n){Ie(t)&&(Ie(n)?$.insertBefore(t,e,n):$.appendChild(t,e))}function l(t,e,n){if(Array.isArray(e))for(var r=0;r<e.length;++r)i(e[r],n,t.elm,null,!0);else s(t.text)&&$.appendChild(t.elm,$.createTextNode(t.text))}function p(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return Ie(t.tag)}function h(t,e){for(var n=0;n<O.create.length;++n)O.create[n](ta,t);A=t.data.hook,Ie(A)&&(Ie(A.create)&&A.create(ta,t),Ie(A.insert)&&e.push(t))}function d(t){for(var e,n=t;n;)Ie(e=n.context)&&Ie(e=e.$options._scopeId)&&$.setAttribute(t.elm,e,\"\"),n=n.parent;Ie(e=fi)&&e!==t.context&&Ie(e=e.$options._scopeId)&&$.setAttribute(t.elm,e,\"\")}function v(t,e,n,r,o,a){for(;r<=o;++r)i(n[r],a,t,e)}function y(t){var e,n,r=t.data;if(Ie(r))for(Ie(e=r.hook)&&Ie(e=e.destroy)&&e(t),e=0;e<O.destroy.length;++e)O.destroy[e](t);if(Ie(e=t.children))for(n=0;n<t.children.length;++n)y(t.children[n])}function m(t,e,n,o){for(;n<=o;++n){var i=e[n];Ie(i)&&(Ie(i.tag)?(g(i),y(i)):r(i.elm))}}function g(t,e){if(Ie(e)||Ie(t.data)){var o=O.remove.length+1;for(Ie(e)?e.listeners+=o:e=n(t.elm,o),Ie(A=t.componentInstance)&&Ie(A=A._vnode)&&Ie(A.data)&&g(A,e),A=0;A<O.remove.length;++A)O.remove[A](t,e);Ie(A=t.data.hook)&&Ie(A=A.remove)?A(t,e):e()}else r(t.elm)}function _(t,e,n,r,o){for(var a,s,u,c,f=0,l=0,p=e.length-1,h=e[0],d=e[p],y=n.length-1,g=n[0],_=n[y],w=!o;f<=p&&l<=y;)Ne(h)?h=e[++f]:Ne(d)?d=e[--p]:Be(h,g)?(b(h,g,r),h=e[++f],g=n[++l]):Be(d,_)?(b(d,_,r),d=e[--p],_=n[--y]):Be(h,_)?(b(h,_,r),w&&$.insertBefore(t,h.elm,$.nextSibling(d.elm)),h=e[++f],_=n[--y]):Be(d,g)?(b(d,g,r),w&&$.insertBefore(t,d.elm,h.elm),d=e[--p],g=n[++l]):(Ne(a)&&(a=Fe(e,f,p)),s=Ie(g.key)?a[g.key]:null,Ne(s)?(i(g,r,t,h.elm),g=n[++l]):(u=e[s],Be(u,g)?(b(u,g,r),e[s]=void 0,w&&$.insertBefore(t,g.elm,h.elm),g=n[++l]):(i(g,r,t,h.elm),g=n[++l])));f>p?(c=Ne(n[y+1])?null:n[y+1].elm,v(t,c,n,l,y,r)):l>y&&m(t,e,f,p)}function b(t,e,n,r){if(t!==e){if(Ue(e.isStatic)&&Ue(t.isStatic)&&e.key===t.key&&(Ue(e.isCloned)||Ue(e.isOnce)))return e.elm=t.elm,void(e.componentInstance=t.componentInstance);var o,i=e.data;Ie(i)&&Ie(o=i.hook)&&Ie(o=o.prepatch)&&o(t,e);var a=e.elm=t.elm,s=t.children,u=e.children;if(Ie(i)&&p(e)){for(o=0;o<O.update.length;++o)O.update[o](t,e);Ie(o=i.hook)&&Ie(o=o.update)&&o(t,e)}Ne(e.text)?Ie(s)&&Ie(u)?s!==u&&_(a,s,u,n,r):Ie(u)?(Ie(t.text)&&$.setTextContent(a,\"\"),v(a,null,u,0,u.length-1,n)):Ie(s)?m(a,s,0,s.length-1):Ie(t.text)&&$.setTextContent(a,\"\"):t.text!==e.text&&$.setTextContent(a,e.text),Ie(i)&&Ie(o=i.hook)&&Ie(o=o.postpatch)&&o(t,e)}}function w(t,e,n){if(Ue(n)&&Ie(t.parent))t.parent.data.pendingInsert=e;else for(var r=0;r<e.length;++r)e[r].data.hook.insert(e[r])}function x(t,e,n){e.elm=t;var r=e.tag,o=e.data,i=e.children;if(Ie(o)&&(Ie(A=o.hook)&&Ie(A=A.init)&&A(e,!0),Ie(A=e.componentInstance)))return u(e,n),!0;if(Ie(r)){if(Ie(i))if(t.hasChildNodes()){for(var a=!0,s=t.firstChild,c=0;c<i.length;c++){if(!s||!x(s,i[c],n)){a=!1;break}s=s.nextSibling}if(!a||s)return!1}else l(e,i,n);if(Ie(o))for(var f in o)if(!k(f)){h(e,n);break}}else t.data!==e.text&&(t.data=e.text);return!0}var A,E,O={},C=t.modules,$=t.nodeOps;for(A=0;A<ea.length;++A)for(O[ea[A]]=[],E=0;E<C.length;++E)Ie(C[E][ea[A]])&&O[ea[A]].push(C[E][ea[A]]);var k=o(\"attrs,style,class,staticClass,staticStyle,key\");return function(t,n,r,o,a,s){if(Ne(n))return void(Ie(t)&&y(t));var u=!1,c=[];if(Ne(t))u=!0,i(n,c,a,s);else{var f=Ie(t.nodeType);if(!f&&Be(t,n))b(t,n,c,o);else{if(f){if(1===t.nodeType&&t.hasAttribute(\"server-rendered\")&&(t.removeAttribute(\"server-rendered\"),r=!0),Ue(r)&&x(t,n,c))return w(n,c,!0),t;t=e(t)}var l=t.elm,h=$.parentNode(l);if(i(n,c,l._leaveCb?null:h,$.nextSibling(l)),Ie(n.parent)){for(var d=n.parent;d;)d.elm=n.elm,d=d.parent;if(p(n))for(var v=0;v<O.create.length;++v)O.create[v](ta,n.parent)}Ie(h)?m(h,[t],0,0):Ie(t.tag)&&y(t)}}return w(n,c,u),n.elm}}({nodeOps:Zi,modules:ja});Bo&&document.addEventListener(\"selectionchange\",function(){var t=document.activeElement;t&&t.vmodel&&Zn(t,\"input\")});var Pa={inserted:function(t,e,n){if(\"select\"===n.tag){var r=function(){Jn(t,e,n.context)};r(),(Uo||Do)&&setTimeout(r,0)}else\"textarea\"!==n.tag&&\"text\"!==t.type&&\"password\"!==t.type||(t._vModifiers=e.modifiers,e.modifiers.lazy||(Fo||(t.addEventListener(\"compositionstart\",Wn),t.addEventListener(\"compositionend\",Xn)),Bo&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if(\"select\"===n.tag){Jn(t,e,n.context);(t.multiple?e.value.some(function(e){return Kn(e,t.options)}):e.value!==e.oldValue&&Kn(e.value,t.options))&&Zn(t,\"change\")}}},Ma={bind:function(t,e,n){var r=e.value;n=Qn(n);var o=n.data&&n.data.transition,i=t.__vOriginalDisplay=\"none\"===t.style.display?\"\":t.style.display;r&&o&&!Bo?(n.data.show=!0,qn(n,function(){t.style.display=i})):t.style.display=r?i:\"none\"},update:function(t,e,n){var r=e.value;r!==e.oldValue&&(n=Qn(n),n.data&&n.data.transition&&!Bo?(n.data.show=!0,r?qn(n,function(){t.style.display=t.__vOriginalDisplay}):Hn(n,function(){t.style.display=\"none\"})):t.style.display=r?t.__vOriginalDisplay:\"none\")},unbind:function(t,e,n,r,o){o||(t.style.display=t.__vOriginalDisplay)}},La={model:Pa,show:Ma},Na={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]},Ia={name:\"transition\",props:Na,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(function(t){return t.tag}),n.length)){var r=this.mode,o=n[0];if(rr(this.$vnode))return o;var i=tr(o);if(!i)return o;if(this._leaving)return nr(t,o);var a=\"__transition-\"+this._uid+\"-\";i.key=null==i.key?a+i.tag:s(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var u=(i.data||(i.data={})).transition=er(this),c=this._vnode,f=tr(c);if(i.data.directives&&i.data.directives.some(function(t){return\"show\"===t.name})&&(i.data.show=!0),f&&f.data&&!or(i,f)){var p=f&&(f.data.transition=l({},u));if(\"out-in\"===r)return this._leaving=!0,G(p,\"afterLeave\",function(){e._leaving=!1,e.$forceUpdate()}),nr(t,o);if(\"in-out\"===r){var h,d=function(){h()};G(u,\"afterEnter\",d),G(u,\"enterCancelled\",d),G(p,\"delayLeave\",function(t){h=t})}}return o}}},Ua=l({tag:String,moveClass:String},Na);delete Ua.mode;var Ba={props:Ua,render:function(t){for(var e=this.tag||this.$vnode.data.tag||\"span\",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=er(this),s=0;s<o.length;s++){var u=o[s];if(u.tag)if(null!=u.key&&0!==String(u.key).indexOf(\"__vlist\"))i.push(u),n[u.key]=u,(u.data||(u.data={})).transition=a;else;}if(r){for(var c=[],f=[],l=0;l<r.length;l++){var p=r[l];p.data.transition=a,p.data.pos=p.elm.getBoundingClientRect(),n[p.key]?c.push(p):f.push(p)}this.kept=t(e,null,c),this.removed=f}return t(e,null,i)},beforeUpdate:function(){this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||\"v\")+\"-move\";if(t.length&&this.hasMove(t[0].elm,e)){t.forEach(ir),t.forEach(ar),t.forEach(sr);var n=document.body;n.offsetHeight;t.forEach(function(t){if(t.data.moved){var n=t.elm,r=n.style;Nn(n,e),r.transform=r.WebkitTransform=r.transitionDuration=\"\",n.addEventListener(Ea,n._moveCb=function t(r){r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Ea,t),n._moveCb=null,In(n,e))})}})}},methods:{hasMove:function(t,e){if(!ba)return!1;if(null!=this._hasMove)return this._hasMove;var n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach(function(t){Pn(n,t)}),Rn(n,e),n.style.display=\"none\",this.$el.appendChild(n);var r=Bn(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}},Da={Transition:Ia,TransitionGroup:Ba};oe.config.mustUseProp=Bi,oe.config.isReservedTag=Wi,oe.config.getTagNamespace=be,oe.config.isUnknownElement=we,l(oe.options.directives,La),l(oe.options.components,Da),oe.prototype.__patch__=No?Ra:v,oe.prototype.$mount=function(t,e){return t=t&&No?xe(t):void 0,ut(this,t,e)},setTimeout(function(){Ro.devtools&&Vo&&Vo.emit(\"init\",oe)},0);var Fa,qa=!!No&&function(t,e){var n=document.createElement(\"div\");return n.innerHTML='<div a=\"'+t+'\">',n.innerHTML.indexOf(e)>0}(\"\\n\",\"&#10;\"),Ha=o(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),Ya=o(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),Va=o(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),za=[/\"([^\"]*)\"+/.source,/'([^']*)'+/.source,/([^\\s\"'=<>`]+)/.source],Ja=new RegExp(\"^\\\\s*\"+/([^\\s\"'<>\\/=]+)/.source+\"(?:\\\\s*(\"+/(?:=)/.source+\")\\\\s*(?:\"+za.join(\"|\")+\"))?\"),Ka=\"[a-zA-Z_][\\\\w\\\\-\\\\.]*\",Ga=new RegExp(\"^<((?:\"+Ka+\"\\\\:)?\"+Ka+\")\"),Wa=/^\\s*(\\/?)>/,Xa=new RegExp(\"^<\\\\/((?:\"+Ka+\"\\\\:)?\"+Ka+\")[^>]*>\"),Za=/^<!DOCTYPE [^>]+>/i,Qa=/^<!--/,ts=/^<!\\[/,es=!1;\"x\".replace(/x(.)?/g,function(t,e){es=\"\"===e});var ns,rs,os,is,as,ss,us,cs,fs,ls,ps,hs,ds,vs,ys,ms,gs,_s,bs=o(\"script,style,textarea\",!0),ws={},xs={\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&amp;\":\"&\",\"&#10;\":\"\\n\"},As=/&(?:lt|gt|quot|amp);/g,Es=/&(?:lt|gt|quot|amp|#10);/g,Os=/\\{\\{((?:.|\\n)+?)\\}\\}/g,Cs=u(function(t){var e=t[0].replace(/[-.*+?^${}()|[\\]\\/\\\\]/g,\"\\\\$&\"),n=t[1].replace(/[-.*+?^${}()|[\\]\\/\\\\]/g,\"\\\\$&\");return new RegExp(e+\"((?:.|\\\\n)+?)\"+n,\"g\")}),$s=/^@|^v-on:/,ks=/^v-|^@|^:/,Ss=/(.*?)\\s+(?:in|of)\\s+(.*)/,Ts=/\\((\\{[^}]*\\}|[^,]*),([^,]*)(?:,([^,]*))?\\)/,js=/:(.*)$/,Rs=/^:|^v-bind:/,Ps=/\\.[^.]+/g,Ms=u(ur),Ls=/^xmlns:NS\\d+/,Ns=/^NS\\d+:/,Is=u(Rr),Us=/^\\s*([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*\\(/,Bs=/^\\s*[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['.*?']|\\[\".*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*\\s*$/,Ds={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Fs=function(t){return\"if(\"+t+\")return null;\"},qs={stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:Fs(\"$event.target !== $event.currentTarget\"),ctrl:Fs(\"!$event.ctrlKey\"),shift:Fs(\"!$event.shiftKey\"),alt:Fs(\"!$event.altKey\"),meta:Fs(\"!$event.metaKey\"),left:Fs(\"'button' in $event && $event.button !== 0\"),middle:Fs(\"'button' in $event && $event.button !== 1\"),right:Fs(\"'button' in $event && $event.button !== 2\")},Hs={bind:qr,cloak:v},Ys=(new RegExp(\"\\\\b\"+\"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\"),new RegExp(\"\\\\b\"+\"delete,typeof,void\".split(\",\").join(\"\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b\")+\"\\\\s*\\\\([^\\\\)]*\\\\)\"),{staticKeys:[\"staticClass\"],transformNode:ho,genData:vo}),Vs={staticKeys:[\"staticStyle\"],transformNode:yo,genData:mo},zs=[Ys,Vs],Js={model:vn,text:go,html:_o},Ks={expectHTML:!0,modules:zs,directives:Js,isPreTag:Gi,isUnaryTag:Ha,mustUseProp:Bi,canBeLeftOpenTag:Ya,isReservedTag:Wi,getTagNamespace:be,staticKeys:function(t){return t.reduce(function(t,e){return t.concat(e.staticKeys||[])},[]).join(\",\")}(zs)},Gs=function(t){function e(e,n){var r=Object.create(t),o=[],i=[];if(r.warn=function(t,e){(e?i:o).push(t)},n){n.modules&&(r.modules=(t.modules||[]).concat(n.modules)),n.directives&&(r.directives=l(Object.create(t.directives),n.directives));for(var a in n)\"modules\"!==a&&\"directives\"!==a&&(r[a]=n[a])}var s=lo(e,r);return s.errors=o,s.tips=i,s}function n(t,n,o){n=n||{};var i=n.delimiters?String(n.delimiters)+t:t;if(r[i])return r[i];var a=e(t,n),s={},u=[];s.render=po(a.render,u);var c=a.staticRenderFns.length;s.staticRenderFns=new Array(c);for(var f=0;f<c;f++)s.staticRenderFns[f]=po(a.staticRenderFns[f],u);return r[i]=s}var r=Object.create(null);return{compile:e,compileToFunctions:n}}(Ks),Ws=Gs.compileToFunctions,Xs=u(function(t){var e=xe(t);return e&&e.innerHTML}),Zs=oe.prototype.$mount;oe.prototype.$mount=function(t,e){if((t=t&&xe(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if(\"string\"==typeof r)\"#\"===r.charAt(0)&&(r=Xs(r));else{if(!r.nodeType)return this;r=r.innerHTML}else t&&(r=bo(t));if(r){var o=Ws(r,{shouldDecodeNewlines:qa,delimiters:n.delimiters},this),i=o.render,a=o.staticRenderFns;n.render=i,n.staticRenderFns=a}}return Zs.call(this,t,e)},oe.compile=Ws,e.a=oe}).call(e,n(46))},function(t,e,n){\"use strict\";(function(e){function r(t,e){!o.isUndefined(t)&&o.isUndefined(t[\"Content-Type\"])&&(t[\"Content-Type\"]=e)}var o=n(11),i=n(132),a={\"Content-Type\":\"application/x-www-form-urlencoded\"},s={adapter:function(){var t;return\"undefined\"!=typeof XMLHttpRequest?t=n(81):void 0!==e&&(t=n(81)),t}(),transformRequest:[function(t,e){return i(e,\"Content-Type\"),o.isFormData(t)||o.isArrayBuffer(t)||o.isBuffer(t)||o.isStream(t)||o.isFile(t)||o.isBlob(t)?t:o.isArrayBufferView(t)?t.buffer:o.isURLSearchParams(t)?(r(e,\"application/x-www-form-urlencoded;charset=utf-8\"),t.toString()):o.isObject(t)?(r(e,\"application/json;charset=utf-8\"),JSON.stringify(t)):t}],transformResponse:[function(t){if(\"string\"==typeof t)try{t=JSON.parse(t)}catch(t){}return t}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,validateStatus:function(t){return t>=200&&t<300}};s.headers={common:{Accept:\"application/json, text/plain, */*\"}},o.forEach([\"delete\",\"get\",\"head\"],function(t){s.headers[t]={}}),o.forEach([\"post\",\"put\",\"patch\"],function(t){s.headers[t]=o.merge(a)}),t.exports=s}).call(e,n(214))},,,,,function(t,e,n){\"use strict\";function r(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var o=n(162),i=r(o),a=n(161),s=r(a),u=\"function\"==typeof s.default&&\"symbol\"==typeof i.default?function(t){return typeof t}:function(t){return t&&\"function\"==typeof s.default&&t.constructor===s.default&&t!==s.default.prototype?\"symbol\":typeof t};e.default=\"function\"==typeof s.default&&\"symbol\"===u(i.default)?function(t){return void 0===t?\"undefined\":u(t)}:function(t){return t&&\"function\"==typeof s.default&&t.constructor===s.default&&t!==s.default.prototype?\"symbol\":void 0===t?\"undefined\":u(t)}},function(t,e){t.exports=function(t){if(\"function\"!=typeof t)throw TypeError(t+\" is not a function!\");return t}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError(\"Can't call method on  \"+t);return t}},function(t,e,n){var r=n(44),o=n(13).document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,e){t.exports=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\")},function(t,e,n){var r=n(27),o=n(187),i=n(70),a=n(73)(\"IE_PROTO\"),s=function(){},u=function(){var t,e=n(69)(\"iframe\"),r=i.length;for(e.style.display=\"none\",n(101).appendChild(e),e.src=\"javascript:\",t=e.contentWindow.document,t.open(),t.write(\"<script>document.F=Object<\\/script>\"),t.close(),u=t.F;r--;)delete u.prototype[i[r]];return u()};t.exports=Object.create||function(t,e){var n;return null!==t?(s.prototype=r(t),n=new s,s.prototype=null,n[a]=t):n=u(),void 0===e?n:o(n,e)}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,n){var r=n(74)(\"keys\"),o=n(59);t.exports=function(t){return r[t]||(r[t]=o(t))}},function(t,e,n){var r=n(13),o=r[\"__core-js_shared__\"]||(r[\"__core-js_shared__\"]={});t.exports=function(t){return o[t]||(o[t]={})}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e,n){var r=n(44);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&\"function\"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if(\"function\"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&\"function\"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError(\"Can't convert object to primitive value\")}},function(t,e,n){var r=n(13),o=n(12),i=n(55),a=n(78),s=n(26).f;t.exports=function(t){var e=o.Symbol||(o.Symbol=i?{}:r.Symbol||{});\"_\"==t.charAt(0)||t in e||s(e,t,{value:a.f(t)})}},function(t,e,n){e.f=n(10)},,function(t,e,n){t.exports=n(118)},function(t,e,n){\"use strict\";var r=n(11),o=n(124),i=n(127),a=n(133),s=n(131),u=n(84),c=\"undefined\"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(126);t.exports=function(t){return new Promise(function(e,f){var l=t.data,p=t.headers;r.isFormData(l)&&delete p[\"Content-Type\"];var h=new XMLHttpRequest,d=\"onreadystatechange\",v=!1;if(\"undefined\"==typeof window||!window.XDomainRequest||\"withCredentials\"in h||s(t.url)||(h=new window.XDomainRequest,d=\"onload\",v=!0,h.onprogress=function(){},h.ontimeout=function(){}),t.auth){var y=t.auth.username||\"\",m=t.auth.password||\"\";p.Authorization=\"Basic \"+c(y+\":\"+m)}if(h.open(t.method.toUpperCase(),i(t.url,t.params,t.paramsSerializer),!0),h.timeout=t.timeout,h[d]=function(){if(h&&(4===h.readyState||v)&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf(\"file:\"))){var n=\"getAllResponseHeaders\"in h?a(h.getAllResponseHeaders()):null,r=t.responseType&&\"text\"!==t.responseType?h.response:h.responseText,i={data:r,status:1223===h.status?204:h.status,statusText:1223===h.status?\"No Content\":h.statusText,headers:n,config:t,request:h};o(e,f,i),h=null}},h.onerror=function(){f(u(\"Network Error\",t)),h=null},h.ontimeout=function(){f(u(\"timeout of \"+t.timeout+\"ms exceeded\",t,\"ECONNABORTED\")),h=null},r.isStandardBrowserEnv()){var g=n(129),_=(t.withCredentials||s(t.url))&&t.xsrfCookieName?g.read(t.xsrfCookieName):void 0;_&&(p[t.xsrfHeaderName]=_)}if(\"setRequestHeader\"in h&&r.forEach(p,function(t,e){void 0===l&&\"content-type\"===e.toLowerCase()?delete p[e]:h.setRequestHeader(e,t)}),t.withCredentials&&(h.withCredentials=!0),t.responseType)try{h.responseType=t.responseType}catch(e){if(\"json\"!==t.responseType)throw e}\"function\"==typeof t.onDownloadProgress&&h.addEventListener(\"progress\",t.onDownloadProgress),\"function\"==typeof t.onUploadProgress&&h.upload&&h.upload.addEventListener(\"progress\",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then(function(t){h&&(h.abort(),f(t),h=null)}),void 0===l&&(l=null),h.send(l)})}},function(t,e,n){\"use strict\";function r(t){this.message=t}r.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},r.prototype.__CANCEL__=!0,t.exports=r},function(t,e,n){\"use strict\";t.exports=function(t){return!(!t||!t.__CANCEL__)}},function(t,e,n){\"use strict\";var r=n(123);t.exports=function(t,e,n,o){var i=new Error(t);return r(i,e,n,o)}},function(t,e,n){\"use strict\";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},,,,,,,,,,,,,,function(t,e,n){\"use strict\";(function(t){function r(){return i.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(t,e){if(r()<e)throw new RangeError(\"Invalid typed array length\");return i.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e),t.__proto__=i.prototype):(null===t&&(t=new i(e)),t.length=e),t}function i(t,e,n){if(!(i.TYPED_ARRAY_SUPPORT||this instanceof i))return new i(t,e,n);if(\"number\"==typeof t){if(\"string\"==typeof e)throw new Error(\"If encoding is specified then the first argument must be a string\");return c(this,t)}return a(this,t,e,n)}function a(t,e,n,r){if(\"number\"==typeof e)throw new TypeError('\"value\" argument must not be a number');return\"undefined\"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?p(t,e,n,r):\"string\"==typeof e?f(t,e,n):h(t,e)}function s(t){if(\"number\"!=typeof t)throw new TypeError('\"size\" argument must be a number');if(t<0)throw new RangeError('\"size\" argument must not be negative')}function u(t,e,n,r){return s(e),e<=0?o(t,e):void 0!==n?\"string\"==typeof r?o(t,e).fill(n,r):o(t,e).fill(n):o(t,e)}function c(t,e){if(s(e),t=o(t,e<0?0:0|d(e)),!i.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function f(t,e,n){if(\"string\"==typeof n&&\"\"!==n||(n=\"utf8\"),!i.isEncoding(n))throw new TypeError('\"encoding\" must be a valid string encoding');var r=0|y(e,n);t=o(t,r);var a=t.write(e,n);return a!==r&&(t=t.slice(0,a)),t}function l(t,e){var n=e.length<0?0:0|d(e.length);t=o(t,n);for(var r=0;r<n;r+=1)t[r]=255&e[r];return t}function p(t,e,n,r){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError(\"'offset' is out of bounds\");if(e.byteLength<n+(r||0))throw new RangeError(\"'length' is out of bounds\");return e=void 0===n&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,n):new Uint8Array(e,n,r),i.TYPED_ARRAY_SUPPORT?(t=e,t.__proto__=i.prototype):t=l(t,e),t}function h(t,e){if(i.isBuffer(e)){var n=0|d(e.length);return t=o(t,n),0===t.length?t:(e.copy(t,0,0,n),t)}if(e){if(\"undefined\"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||\"length\"in e)return\"number\"!=typeof e.length||G(e.length)?o(t,0):l(t,e);if(\"Buffer\"===e.type&&Z(e.data))return l(t,e.data)}throw new TypeError(\"First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.\")}function d(t){if(t>=r())throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+r().toString(16)+\" bytes\");return 0|t}function v(t){return+t!=t&&(t=0),i.alloc(+t)}function y(t,e){if(i.isBuffer(t))return t.length;if(\"undefined\"!=typeof ArrayBuffer&&\"function\"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;\"string\"!=typeof t&&(t=\"\"+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case\"ascii\":case\"latin1\":case\"binary\":return n;case\"utf8\":case\"utf-8\":case void 0:return Y(t).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*n;case\"hex\":return n>>>1;case\"base64\":return J(t).length;default:if(r)return Y(t).length;e=(\"\"+e).toLowerCase(),r=!0}}function m(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return\"\";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return\"\";if(n>>>=0,e>>>=0,n<=e)return\"\";for(t||(t=\"utf8\");;)switch(t){case\"hex\":return R(this,e,n);case\"utf8\":case\"utf-8\":return k(this,e,n);case\"ascii\":return T(this,e,n);case\"latin1\":case\"binary\":return j(this,e,n);case\"base64\":return $(this,e,n);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return P(this,e,n);default:if(r)throw new TypeError(\"Unknown encoding: \"+t);t=(t+\"\").toLowerCase(),r=!0}}function g(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function _(t,e,n,r,o){if(0===t.length)return-1;if(\"string\"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(o)return-1;n=t.length-1}else if(n<0){if(!o)return-1;n=0}if(\"string\"==typeof e&&(e=i.from(e,r)),i.isBuffer(e))return 0===e.length?-1:b(t,e,n,r,o);if(\"number\"==typeof e)return e&=255,i.TYPED_ARRAY_SUPPORT&&\"function\"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):b(t,[e],n,r,o);throw new TypeError(\"val must be string, number or Buffer\")}function b(t,e,n,r,o){function i(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}var a=1,s=t.length,u=e.length;if(void 0!==r&&(\"ucs2\"===(r=String(r).toLowerCase())||\"ucs-2\"===r||\"utf16le\"===r||\"utf-16le\"===r)){if(t.length<2||e.length<2)return-1;a=2,s/=2,u/=2,n/=2}var c;if(o){var f=-1;for(c=n;c<s;c++)if(i(t,c)===i(e,-1===f?0:c-f)){if(-1===f&&(f=c),c-f+1===u)return f*a}else-1!==f&&(c-=c-f),f=-1}else for(n+u>s&&(n=s-u),c=n;c>=0;c--){for(var l=!0,p=0;p<u;p++)if(i(t,c+p)!==i(e,p)){l=!1;break}if(l)return c}return-1}function w(t,e,n,r){n=Number(n)||0;var o=t.length-n;r?(r=Number(r))>o&&(r=o):r=o;var i=e.length;if(i%2!=0)throw new TypeError(\"Invalid hex string\");r>i/2&&(r=i/2);for(var a=0;a<r;++a){var s=parseInt(e.substr(2*a,2),16);if(isNaN(s))return a;t[n+a]=s}return a}function x(t,e,n,r){return K(Y(e,t.length-n),t,n,r)}function A(t,e,n,r){return K(V(e),t,n,r)}function E(t,e,n,r){return A(t,e,n,r)}function O(t,e,n,r){return K(J(e),t,n,r)}function C(t,e,n,r){return K(z(e,t.length-n),t,n,r)}function $(t,e,n){return 0===e&&n===t.length?W.fromByteArray(t):W.fromByteArray(t.slice(e,n))}function k(t,e,n){n=Math.min(t.length,n);for(var r=[],o=e;o<n;){var i=t[o],a=null,s=i>239?4:i>223?3:i>191?2:1;if(o+s<=n){var u,c,f,l;switch(s){case 1:i<128&&(a=i);break;case 2:u=t[o+1],128==(192&u)&&(l=(31&i)<<6|63&u)>127&&(a=l);break;case 3:u=t[o+1],c=t[o+2],128==(192&u)&&128==(192&c)&&(l=(15&i)<<12|(63&u)<<6|63&c)>2047&&(l<55296||l>57343)&&(a=l);break;case 4:u=t[o+1],c=t[o+2],f=t[o+3],128==(192&u)&&128==(192&c)&&128==(192&f)&&(l=(15&i)<<18|(63&u)<<12|(63&c)<<6|63&f)>65535&&l<1114112&&(a=l)}}null===a?(a=65533,s=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),o+=s}return S(r)}function S(t){var e=t.length;if(e<=Q)return String.fromCharCode.apply(String,t);for(var n=\"\",r=0;r<e;)n+=String.fromCharCode.apply(String,t.slice(r,r+=Q));return n}function T(t,e,n){var r=\"\";n=Math.min(t.length,n);for(var o=e;o<n;++o)r+=String.fromCharCode(127&t[o]);return r}function j(t,e,n){var r=\"\";n=Math.min(t.length,n);for(var o=e;o<n;++o)r+=String.fromCharCode(t[o]);return r}function R(t,e,n){var r=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>r)&&(n=r);for(var o=\"\",i=e;i<n;++i)o+=H(t[i]);return o}function P(t,e,n){for(var r=t.slice(e,n),o=\"\",i=0;i<r.length;i+=2)o+=String.fromCharCode(r[i]+256*r[i+1]);return o}function M(t,e,n){if(t%1!=0||t<0)throw new RangeError(\"offset is not uint\");if(t+e>n)throw new RangeError(\"Trying to access beyond buffer length\")}function L(t,e,n,r,o,a){if(!i.isBuffer(t))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(e>o||e<a)throw new RangeError('\"value\" argument is out of bounds');if(n+r>t.length)throw new RangeError(\"Index out of range\")}function N(t,e,n,r){e<0&&(e=65535+e+1);for(var o=0,i=Math.min(t.length-n,2);o<i;++o)t[n+o]=(e&255<<8*(r?o:1-o))>>>8*(r?o:1-o)}function I(t,e,n,r){e<0&&(e=4294967295+e+1);for(var o=0,i=Math.min(t.length-n,4);o<i;++o)t[n+o]=e>>>8*(r?o:3-o)&255}function U(t,e,n,r,o,i){if(n+r>t.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"Index out of range\")}function B(t,e,n,r,o){return o||U(t,e,n,4,3.4028234663852886e38,-3.4028234663852886e38),X.write(t,e,n,r,23,4),n+4}function D(t,e,n,r,o){return o||U(t,e,n,8,1.7976931348623157e308,-1.7976931348623157e308),X.write(t,e,n,r,52,8),n+8}function F(t){if(t=q(t).replace(tt,\"\"),t.length<2)return\"\";for(;t.length%4!=0;)t+=\"=\";return t}function q(t){return t.trim?t.trim():t.replace(/^\\s+|\\s+$/g,\"\")}function H(t){return t<16?\"0\"+t.toString(16):t.toString(16)}function Y(t,e){e=e||1/0;for(var n,r=t.length,o=null,i=[],a=0;a<r;++a){if((n=t.charCodeAt(a))>55295&&n<57344){if(!o){if(n>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(e-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(e-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(e-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((e-=1)<0)break;i.push(n)}else if(n<2048){if((e-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error(\"Invalid code point\");if((e-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function V(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}function z(t,e){for(var n,r,o,i=[],a=0;a<t.length&&!((e-=2)<0);++a)n=t.charCodeAt(a),r=n>>8,o=n%256,i.push(o),i.push(r);return i}function J(t){return W.toByteArray(F(t))}function K(t,e,n,r){for(var o=0;o<r&&!(o+n>=e.length||o>=t.length);++o)e[o+n]=t[o];return o}function G(t){return t!==t}/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\nvar W=n(163),X=n(212),Z=n(213);e.Buffer=i,e.SlowBuffer=v,e.INSPECT_MAX_BYTES=50,i.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&\"function\"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}(),e.kMaxLength=r(),i.poolSize=8192,i._augment=function(t){return t.__proto__=i.prototype,t},i.from=function(t,e,n){return a(null,t,e,n)},i.TYPED_ARRAY_SUPPORT&&(i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,\"undefined\"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0})),i.alloc=function(t,e,n){return u(null,t,e,n)},i.allocUnsafe=function(t){return c(null,t)},i.allocUnsafeSlow=function(t){return c(null,t)},i.isBuffer=function(t){return!(null==t||!t._isBuffer)},i.compare=function(t,e){if(!i.isBuffer(t)||!i.isBuffer(e))throw new TypeError(\"Arguments must be Buffers\");if(t===e)return 0;for(var n=t.length,r=e.length,o=0,a=Math.min(n,r);o<a;++o)if(t[o]!==e[o]){n=t[o],r=e[o];break}return n<r?-1:r<n?1:0},i.isEncoding=function(t){switch(String(t).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},i.concat=function(t,e){if(!Z(t))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===t.length)return i.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var r=i.allocUnsafe(e),o=0;for(n=0;n<t.length;++n){var a=t[n];if(!i.isBuffer(a))throw new TypeError('\"list\" argument must be an Array of Buffers');a.copy(r,o),o+=a.length}return r},i.byteLength=y,i.prototype._isBuffer=!0,i.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(var e=0;e<t;e+=2)g(this,e,e+1);return this},i.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(var e=0;e<t;e+=4)g(this,e,e+3),g(this,e+1,e+2);return this},i.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(var e=0;e<t;e+=8)g(this,e,e+7),g(this,e+1,e+6),g(this,e+2,e+5),g(this,e+3,e+4);return this},i.prototype.toString=function(){var t=0|this.length;return 0===t?\"\":0===arguments.length?k(this,0,t):m.apply(this,arguments)},i.prototype.equals=function(t){if(!i.isBuffer(t))throw new TypeError(\"Argument must be a Buffer\");return this===t||0===i.compare(this,t)},i.prototype.inspect=function(){var t=\"\",n=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString(\"hex\",0,n).match(/.{2}/g).join(\" \"),this.length>n&&(t+=\" ... \")),\"<Buffer \"+t+\">\"},i.prototype.compare=function(t,e,n,r,o){if(!i.isBuffer(t))throw new TypeError(\"Argument must be a Buffer\");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),e<0||n>t.length||r<0||o>this.length)throw new RangeError(\"out of range index\");if(r>=o&&e>=n)return 0;if(r>=o)return-1;if(e>=n)return 1;if(e>>>=0,n>>>=0,r>>>=0,o>>>=0,this===t)return 0;for(var a=o-r,s=n-e,u=Math.min(a,s),c=this.slice(r,o),f=t.slice(e,n),l=0;l<u;++l)if(c[l]!==f[l]){a=c[l],s=f[l];break}return a<s?-1:s<a?1:0},i.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},i.prototype.indexOf=function(t,e,n){return _(this,t,e,n,!0)},i.prototype.lastIndexOf=function(t,e,n){return _(this,t,e,n,!1)},i.prototype.write=function(t,e,n,r){if(void 0===e)r=\"utf8\",n=this.length,e=0;else if(void 0===n&&\"string\"==typeof e)r=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");e|=0,isFinite(n)?(n|=0,void 0===r&&(r=\"utf8\")):(r=n,n=void 0)}var o=this.length-e;if((void 0===n||n>o)&&(n=o),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");r||(r=\"utf8\");for(var i=!1;;)switch(r){case\"hex\":return w(this,t,e,n);case\"utf8\":case\"utf-8\":return x(this,t,e,n);case\"ascii\":return A(this,t,e,n);case\"latin1\":case\"binary\":return E(this,t,e,n);case\"base64\":return O(this,t,e,n);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return C(this,t,e,n);default:if(i)throw new TypeError(\"Unknown encoding: \"+r);r=(\"\"+r).toLowerCase(),i=!0}},i.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};var Q=4096;i.prototype.slice=function(t,e){var n=this.length;t=~~t,e=void 0===e?n:~~e,t<0?(t+=n)<0&&(t=0):t>n&&(t=n),e<0?(e+=n)<0&&(e=0):e>n&&(e=n),e<t&&(e=t);var r;if(i.TYPED_ARRAY_SUPPORT)r=this.subarray(t,e),r.__proto__=i.prototype;else{var o=e-t;r=new i(o,void 0);for(var a=0;a<o;++a)r[a]=this[a+t]}return r},i.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||M(t,e,this.length);for(var r=this[t],o=1,i=0;++i<e&&(o*=256);)r+=this[t+i]*o;return r},i.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||M(t,e,this.length);for(var r=this[t+--e],o=1;e>0&&(o*=256);)r+=this[t+--e]*o;return r},i.prototype.readUInt8=function(t,e){return e||M(t,1,this.length),this[t]},i.prototype.readUInt16LE=function(t,e){return e||M(t,2,this.length),this[t]|this[t+1]<<8},i.prototype.readUInt16BE=function(t,e){return e||M(t,2,this.length),this[t]<<8|this[t+1]},i.prototype.readUInt32LE=function(t,e){return e||M(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},i.prototype.readUInt32BE=function(t,e){return e||M(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},i.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||M(t,e,this.length);for(var r=this[t],o=1,i=0;++i<e&&(o*=256);)r+=this[t+i]*o;return o*=128,r>=o&&(r-=Math.pow(2,8*e)),r},i.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||M(t,e,this.length);for(var r=e,o=1,i=this[t+--r];r>0&&(o*=256);)i+=this[t+--r]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*e)),i},i.prototype.readInt8=function(t,e){return e||M(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},i.prototype.readInt16LE=function(t,e){e||M(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt16BE=function(t,e){e||M(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt32LE=function(t,e){return e||M(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},i.prototype.readInt32BE=function(t,e){return e||M(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},i.prototype.readFloatLE=function(t,e){return e||M(t,4,this.length),X.read(this,t,!0,23,4)},i.prototype.readFloatBE=function(t,e){return e||M(t,4,this.length),X.read(this,t,!1,23,4)},i.prototype.readDoubleLE=function(t,e){return e||M(t,8,this.length),X.read(this,t,!0,52,8)},i.prototype.readDoubleBE=function(t,e){return e||M(t,8,this.length),X.read(this,t,!1,52,8)},i.prototype.writeUIntLE=function(t,e,n,r){if(t=+t,e|=0,n|=0,!r){L(this,t,e,n,Math.pow(2,8*n)-1,0)}var o=1,i=0;for(this[e]=255&t;++i<n&&(o*=256);)this[e+i]=t/o&255;return e+n},i.prototype.writeUIntBE=function(t,e,n,r){if(t=+t,e|=0,n|=0,!r){L(this,t,e,n,Math.pow(2,8*n)-1,0)}var o=n-1,i=1;for(this[e+o]=255&t;--o>=0&&(i*=256);)this[e+o]=t/i&255;return e+n},i.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||L(this,t,e,1,255,0),i.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},i.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||L(this,t,e,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):N(this,t,e,!0),e+2},i.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||L(this,t,e,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):N(this,t,e,!1),e+2},i.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||L(this,t,e,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):I(this,t,e,!0),e+4},i.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||L(this,t,e,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):I(this,t,e,!1),e+4},i.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var o=Math.pow(2,8*n-1);L(this,t,e,n,o-1,-o)}var i=0,a=1,s=0;for(this[e]=255&t;++i<n&&(a*=256);)t<0&&0===s&&0!==this[e+i-1]&&(s=1),this[e+i]=(t/a>>0)-s&255;return e+n},i.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var o=Math.pow(2,8*n-1);L(this,t,e,n,o-1,-o)}var i=n-1,a=1,s=0;for(this[e+i]=255&t;--i>=0&&(a*=256);)t<0&&0===s&&0!==this[e+i+1]&&(s=1),this[e+i]=(t/a>>0)-s&255;return e+n},i.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||L(this,t,e,1,127,-128),i.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},i.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||L(this,t,e,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):N(this,t,e,!0),e+2},i.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||L(this,t,e,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):N(this,t,e,!1),e+2},i.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||L(this,t,e,4,2147483647,-2147483648),i.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):I(this,t,e,!0),e+4},i.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||L(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):I(this,t,e,!1),e+4},i.prototype.writeFloatLE=function(t,e,n){return B(this,t,e,!0,n)},i.prototype.writeFloatBE=function(t,e,n){return B(this,t,e,!1,n)},i.prototype.writeDoubleLE=function(t,e,n){return D(this,t,e,!0,n)},i.prototype.writeDoubleBE=function(t,e,n){return D(this,t,e,!1,n)},i.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError(\"targetStart out of bounds\");if(n<0||n>=this.length)throw new RangeError(\"sourceStart out of bounds\");if(r<0)throw new RangeError(\"sourceEnd out of bounds\");r>this.length&&(r=this.length),t.length-e<r-n&&(r=t.length-e+n);var o,a=r-n;if(this===t&&n<e&&e<r)for(o=a-1;o>=0;--o)t[o+e]=this[o+n];else if(a<1e3||!i.TYPED_ARRAY_SUPPORT)for(o=0;o<a;++o)t[o+e]=this[o+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+a),e);return a},i.prototype.fill=function(t,e,n,r){if(\"string\"==typeof t){if(\"string\"==typeof e?(r=e,e=0,n=this.length):\"string\"==typeof n&&(r=n,n=this.length),1===t.length){var o=t.charCodeAt(0);o<256&&(t=o)}if(void 0!==r&&\"string\"!=typeof r)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof r&&!i.isEncoding(r))throw new TypeError(\"Unknown encoding: \"+r)}else\"number\"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError(\"Out of range index\");if(n<=e)return this;e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0);var a;if(\"number\"==typeof t)for(a=e;a<n;++a)this[a]=t;else{var s=i.isBuffer(t)?t:Y(new i(t,r).toString()),u=s.length;for(a=0;a<n-e;++a)this[a+e]=s[a%u]}return this};var tt=/[^+\\/0-9A-Za-z-_]/g}).call(e,n(46))},function(t,e,n){var r=n(42),o=n(10)(\"toStringTag\"),i=\"Arguments\"==r(function(){return arguments}()),a=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,n,s;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(n=a(e=Object(t),o))?n:i?r(e):\"Object\"==(s=r(e))&&\"function\"==typeof e.callee?\"Arguments\":s}},function(t,e,n){t.exports=n(13).document&&document.documentElement},function(t,e,n){t.exports=!n(25)&&!n(43)(function(){return 7!=Object.defineProperty(n(69)(\"div\"),\"a\",{get:function(){return 7}}).a})},function(t,e,n){\"use strict\";var r=n(55),o=n(33),i=n(108),a=n(29),s=n(28),u=n(45),c=n(181),f=n(58),l=n(189),p=n(10)(\"iterator\"),h=!([].keys&&\"next\"in[].keys()),d=function(){return this};t.exports=function(t,e,n,v,y,m,g){c(n,e,v);var _,b,w,x=function(t){if(!h&&t in C)return C[t];switch(t){case\"keys\":case\"values\":return function(){return new n(this,t)}}return function(){return new n(this,t)}},A=e+\" Iterator\",E=\"values\"==y,O=!1,C=t.prototype,$=C[p]||C[\"@@iterator\"]||y&&C[y],k=$||x(y),S=y?E?x(\"entries\"):k:void 0,T=\"Array\"==e?C.entries||$:$;if(T&&(w=l(T.call(new t)))!==Object.prototype&&(f(w,A,!0),r||s(w,p)||a(w,p,d)),E&&$&&\"values\"!==$.name&&(O=!0,k=function(){return $.call(this)}),r&&!g||!h&&!O&&C[p]||a(C,p,k),u[e]=k,u[A]=d,y)if(_={values:E?k:x(\"values\"),keys:m?k:x(\"keys\"),entries:S},g)for(b in _)b in C||i(C,b,_[b]);else o(o.P+o.F*(h||O),e,_);return _}},function(t,e,n){var r=n(30),o=n(105).f,i={}.toString,a=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return o(t)}catch(t){return a.slice()}};t.exports.f=function(t){return a&&\"[object Window]\"==i.call(t)?s(t):o(r(t))}},function(t,e,n){var r=n(107),o=n(70).concat(\"length\",\"prototype\");e.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,n){var r=n(28),o=n(30),i=n(173)(!1),a=n(73)(\"IE_PROTO\");t.exports=function(t,e){var n,s=o(t),u=0,c=[];for(n in s)n!=a&&r(s,n)&&c.push(n);for(;e.length>u;)r(s,n=e[u++])&&(~i(c,n)||c.push(n));return c}},function(t,e,n){t.exports=n(29)},function(t,e,n){var r,o,i,a=n(54),s=n(176),u=n(101),c=n(69),f=n(13),l=f.process,p=f.setImmediate,h=f.clearImmediate,d=f.MessageChannel,v=0,y={},m=function(){var t=+this;if(y.hasOwnProperty(t)){var e=y[t];delete y[t],e()}},g=function(t){m.call(t.data)};p&&h||(p=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return y[++v]=function(){s(\"function\"==typeof t?t:Function(t),e)},r(v),v},h=function(t){delete y[t]},\"process\"==n(42)(l)?r=function(t){l.nextTick(a(m,t,1))}:d?(o=new d,i=o.port2,o.port1.onmessage=g,r=a(i.postMessage,i,1)):f.addEventListener&&\"function\"==typeof postMessage&&!f.importScripts?(r=function(t){f.postMessage(t+\"\",\"*\")},f.addEventListener(\"message\",g,!1)):r=\"onreadystatechange\"in c(\"script\")?function(t){u.appendChild(c(\"script\")).onreadystatechange=function(){u.removeChild(this),m.call(t)}}:function(t){setTimeout(a(m,t,1),0)}),t.exports={set:p,clear:h}},function(t,e,n){var r=n(75),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,e){},function(t,e,n){\"use strict\";var r=n(194)(!0);n(103)(String,\"String\",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){n(198);for(var r=n(13),o=n(29),i=n(45),a=n(10)(\"toStringTag\"),s=[\"NodeList\",\"DOMTokenList\",\"MediaList\",\"StyleSheetList\",\"CSSRuleList\"],u=0;u<5;u++){var c=s[u],f=r[c],l=f&&f.prototype;l&&!l[a]&&o(l,a,c),i[c]=i.Array}},,,,,function(t,e,n){\"use strict\";function r(t){var e=new a(t),n=i(a.prototype.request,e);return o.extend(n,a.prototype,e),o.extend(n,e),n}var o=n(11),i=n(85),a=n(120),s=n(61),u=r(s);u.Axios=a,u.create=function(t){return r(o.merge(s,t))},u.Cancel=n(82),u.CancelToken=n(119),u.isCancel=n(83),u.all=function(t){return Promise.all(t)},u.spread=n(134),t.exports=u,t.exports.default=u},function(t,e,n){\"use strict\";function r(t){if(\"function\"!=typeof t)throw new TypeError(\"executor must be a function.\");var e;this.promise=new Promise(function(t){e=t});var n=this;t(function(t){n.reason||(n.reason=new o(t),e(n.reason))})}var o=n(82);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var t;return{token:new r(function(e){t=e}),cancel:t}},t.exports=r},function(t,e,n){\"use strict\";function r(t){this.defaults=t,this.interceptors={request:new a,response:new a}}var o=n(61),i=n(11),a=n(121),s=n(122),u=n(130),c=n(128);r.prototype.request=function(t){\"string\"==typeof t&&(t=i.merge({url:arguments[0]},arguments[1])),t=i.merge(o,this.defaults,{method:\"get\"},t),t.baseURL&&!u(t.url)&&(t.url=c(t.baseURL,t.url));var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n},i.forEach([\"delete\",\"get\",\"head\",\"options\"],function(t){r.prototype[t]=function(e,n){return this.request(i.merge(n||{},{method:t,url:e}))}}),i.forEach([\"post\",\"put\",\"patch\"],function(t){r.prototype[t]=function(e,n,r){return this.request(i.merge(r||{},{method:t,url:e,data:n}))}}),t.exports=r},function(t,e,n){\"use strict\";function r(){this.handlers=[]}var o=n(11);r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){o.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=r},function(t,e,n){\"use strict\";function r(t){t.cancelToken&&t.cancelToken.throwIfRequested()}var o=n(11),i=n(125),a=n(83),s=n(61);t.exports=function(t){return r(t),t.headers=t.headers||{},t.data=i(t.data,t.headers,t.transformRequest),t.headers=o.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),o.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],function(e){delete t.headers[e]}),(t.adapter||s.adapter)(t).then(function(e){return r(t),e.data=i(e.data,e.headers,t.transformResponse),e},function(e){return a(e)||(r(t),e&&e.response&&(e.response.data=i(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)})}},function(t,e,n){\"use strict\";t.exports=function(t,e,n,r){return t.config=e,n&&(t.code=n),t.response=r,t}},function(t,e,n){\"use strict\";var r=n(84);t.exports=function(t,e,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?e(r(\"Request failed with status code \"+n.status,n.config,null,n)):t(n)}},function(t,e,n){\"use strict\";var r=n(11);t.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},function(t,e,n){\"use strict\";function r(){this.message=\"String contains an invalid character\"}function o(t){for(var e,n,o=String(t),a=\"\",s=0,u=i;o.charAt(0|s)||(u=\"=\",s%1);a+=u.charAt(63&e>>8-s%1*8)){if((n=o.charCodeAt(s+=.75))>255)throw new r;e=e<<8|n}return a}var i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.prototype=new Error,r.prototype.code=5,r.prototype.name=\"InvalidCharacterError\",t.exports=o},function(t,e,n){\"use strict\";function r(t){return encodeURIComponent(t).replace(/%40/gi,\"@\").replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}var o=n(11);t.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else if(o.isURLSearchParams(e))i=e.toString();else{var a=[];o.forEach(e,function(t,e){null!==t&&void 0!==t&&(o.isArray(t)&&(e+=\"[]\"),o.isArray(t)||(t=[t]),o.forEach(t,function(t){o.isDate(t)?t=t.toISOString():o.isObject(t)&&(t=JSON.stringify(t)),a.push(r(e)+\"=\"+r(t))}))}),i=a.join(\"&\")}return i&&(t+=(-1===t.indexOf(\"?\")?\"?\":\"&\")+i),t}},function(t,e,n){\"use strict\";t.exports=function(t,e){return e?t.replace(/\\/+$/,\"\")+\"/\"+e.replace(/^\\/+/,\"\"):t}},function(t,e,n){\"use strict\";var r=n(11);t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,o,i,a){var s=[];s.push(t+\"=\"+encodeURIComponent(e)),r.isNumber(n)&&s.push(\"expires=\"+new Date(n).toGMTString()),r.isString(o)&&s.push(\"path=\"+o),r.isString(i)&&s.push(\"domain=\"+i),!0===a&&s.push(\"secure\"),document.cookie=s.join(\"; \")},read:function(t){var e=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+t+\")=([^;]*)\"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,\"\",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,e,n){\"use strict\";t.exports=function(t){return/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(t)}},function(t,e,n){\"use strict\";var r=n(11);t.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(o.setAttribute(\"href\",e),e=o.href),o.setAttribute(\"href\",e),{href:o.href,protocol:o.protocol?o.protocol.replace(/:$/,\"\"):\"\",host:o.host,search:o.search?o.search.replace(/^\\?/,\"\"):\"\",hash:o.hash?o.hash.replace(/^#/,\"\"):\"\",hostname:o.hostname,port:o.port,pathname:\"/\"===o.pathname.charAt(0)?o.pathname:\"/\"+o.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),o=document.createElement(\"a\");return e=t(window.location.href),function(n){var o=r.isString(n)?t(n):n;return o.protocol===e.protocol&&o.host===e.host}}():function(){return function(){return!0}}()},function(t,e,n){\"use strict\";var r=n(11);t.exports=function(t,e){r.forEach(t,function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])})}},function(t,e,n){\"use strict\";var r=n(11);t.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split(\"\\n\"),function(t){o=t.indexOf(\":\"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+\", \"+n:n)}),i):i}},function(t,e,n){\"use strict\";t.exports=function(t){return function(e){return t.apply(null,e)}}},,,,,,,,,,,,,,,,,,,,,,function(t,e,n){t.exports={default:n(164),__esModule:!0}},function(t,e,n){t.exports={default:n(165),__esModule:!0}},function(t,e,n){t.exports={default:n(166),__esModule:!0}},function(t,e,n){t.exports={default:n(167),__esModule:!0}},function(t,e,n){t.exports={default:n(168),__esModule:!0}},function(t,e,n){t.exports={default:n(169),__esModule:!0}},function(t,e,n){t.exports={default:n(170),__esModule:!0}},function(t,e,n){\"use strict\";function r(t){var e=t.length;if(e%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");return\"=\"===t[e-2]?2:\"=\"===t[e-1]?1:0}function o(t){return 3*t.length/4-r(t)}function i(t){var e,n,o,i,a,s,u=t.length;a=r(t),s=new l(3*u/4-a),o=a>0?u-4:u;var c=0;for(e=0,n=0;e<o;e+=4,n+=3)i=f[t.charCodeAt(e)]<<18|f[t.charCodeAt(e+1)]<<12|f[t.charCodeAt(e+2)]<<6|f[t.charCodeAt(e+3)],s[c++]=i>>16&255,s[c++]=i>>8&255,s[c++]=255&i;return 2===a?(i=f[t.charCodeAt(e)]<<2|f[t.charCodeAt(e+1)]>>4,s[c++]=255&i):1===a&&(i=f[t.charCodeAt(e)]<<10|f[t.charCodeAt(e+1)]<<4|f[t.charCodeAt(e+2)]>>2,s[c++]=i>>8&255,s[c++]=255&i),s}function a(t){return c[t>>18&63]+c[t>>12&63]+c[t>>6&63]+c[63&t]}function s(t,e,n){for(var r,o=[],i=e;i<n;i+=3)r=(t[i]<<16)+(t[i+1]<<8)+t[i+2],o.push(a(r));return o.join(\"\")}function u(t){for(var e,n=t.length,r=n%3,o=\"\",i=[],a=0,u=n-r;a<u;a+=16383)i.push(s(t,a,a+16383>u?u:a+16383));return 1===r?(e=t[n-1],o+=c[e>>2],o+=c[e<<4&63],o+=\"==\"):2===r&&(e=(t[n-2]<<8)+t[n-1],o+=c[e>>10],o+=c[e>>4&63],o+=c[e<<2&63],o+=\"=\"),i.push(o),i.join(\"\")}e.byteLength=o,e.toByteArray=i,e.fromByteArray=u;for(var c=[],f=[],l=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",h=0,d=p.length;h<d;++h)c[h]=p[h],f[p.charCodeAt(h)]=h;f[\"-\".charCodeAt(0)]=62,f[\"_\".charCodeAt(0)]=63},function(t,e,n){var r=n(12),o=r.JSON||(r.JSON={stringify:JSON.stringify});t.exports=function(t){return o.stringify.apply(o,arguments)}},function(t,e,n){n(199);var r=n(12).Object;t.exports=function(t,e){return r.create(t,e)}},function(t,e,n){n(200);var r=n(12).Object;t.exports=function(t,e,n){return r.defineProperty(t,e,n)}},function(t,e,n){n(201);var r=n(12).Object;t.exports=function(t){return r.getOwnPropertyNames(t)}},function(t,e,n){n(111),n(112),n(113),n(202),t.exports=n(12).Promise},function(t,e,n){n(203),n(111),n(204),n(205),t.exports=n(12).Symbol},function(t,e,n){n(112),n(113),t.exports=n(78).f(\"iterator\")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e,n,r){if(!(t instanceof e)||void 0!==r&&r in t)throw TypeError(n+\": incorrect invocation!\");return t}},function(t,e,n){var r=n(30),o=n(110),i=n(195);t.exports=function(t){return function(e,n,a){var s,u=r(e),c=o(u.length),f=i(a,c);if(t&&n!=n){for(;c>f;)if((s=u[f++])!=s)return!0}else for(;c>f;f++)if((t||f in u)&&u[f]===n)return t||f||0;return!t&&-1}}},function(t,e,n){var r=n(56),o=n(106),i=n(72);t.exports=function(t){var e=r(t),n=o.f;if(n)for(var a,s=n(t),u=i.f,c=0;s.length>c;)u.call(t,a=s[c++])&&e.push(a);return e}},function(t,e,n){var r=n(54),o=n(180),i=n(178),a=n(27),s=n(110),u=n(197),c={},f={},e=t.exports=function(t,e,n,l,p){var h,d,v,y,m=p?function(){return t}:u(t),g=r(n,l,e?2:1),_=0;if(\"function\"!=typeof m)throw TypeError(t+\" is not iterable!\");if(i(m)){for(h=s(t.length);h>_;_++)if((y=e?g(a(d=t[_])[0],d[1]):g(t[_]))===c||y===f)return y}else for(v=m.call(t);!(d=v.next()).done;)if((y=o(v,g,d.value,e))===c||y===f)return y};e.BREAK=c,e.RETURN=f},function(t,e){t.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},function(t,e,n){var r=n(42);t.exports=Object(\"z\").propertyIsEnumerable(0)?Object:function(t){return\"String\"==r(t)?t.split(\"\"):Object(t)}},function(t,e,n){var r=n(45),o=n(10)(\"iterator\"),i=Array.prototype;t.exports=function(t){return void 0!==t&&(r.Array===t||i[o]===t)}},function(t,e,n){var r=n(42);t.exports=Array.isArray||function(t){return\"Array\"==r(t)}},function(t,e,n){var r=n(27);t.exports=function(t,e,n,o){try{return o?e(r(n)[0],n[1]):e(n)}catch(e){var i=t.return;throw void 0!==i&&r(i.call(t)),e}}},function(t,e,n){\"use strict\";var r=n(71),o=n(57),i=n(58),a={};n(29)(a,n(10)(\"iterator\"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(a,{next:o(1,n)}),i(t,e+\" Iterator\")}},function(t,e,n){var r=n(10)(\"iterator\"),o=!1;try{var i=[7][r]();i.return=function(){o=!0},Array.from(i,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!o)return!1;var n=!1;try{var i=[7],a=i[r]();a.next=function(){return{done:n=!0}},i[r]=function(){return a},t(i)}catch(t){}return n}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){var r=n(56),o=n(30);t.exports=function(t,e){for(var n,i=o(t),a=r(i),s=a.length,u=0;s>u;)if(i[n=a[u++]]===e)return n}},function(t,e,n){var r=n(59)(\"meta\"),o=n(44),i=n(28),a=n(26).f,s=0,u=Object.isExtensible||function(){return!0},c=!n(43)(function(){return u(Object.preventExtensions({}))}),f=function(t){a(t,r,{value:{i:\"O\"+ ++s,w:{}}})},l=function(t,e){if(!o(t))return\"symbol\"==typeof t?t:(\"string\"==typeof t?\"S\":\"P\")+t;if(!i(t,r)){if(!u(t))return\"F\";if(!e)return\"E\";f(t)}return t[r].i},p=function(t,e){if(!i(t,r)){if(!u(t))return!0;if(!e)return!1;f(t)}return t[r].w},h=function(t){return c&&d.NEED&&u(t)&&!i(t,r)&&f(t),t},d=t.exports={KEY:r,NEED:!1,fastKey:l,getWeak:p,onFreeze:h}},function(t,e,n){var r=n(13),o=n(109).set,i=r.MutationObserver||r.WebKitMutationObserver,a=r.process,s=r.Promise,u=\"process\"==n(42)(a);t.exports=function(){var t,e,n,c=function(){var r,o;for(u&&(r=a.domain)&&r.exit();t;){o=t.fn,t=t.next;try{o()}catch(r){throw t?n():e=void 0,r}}e=void 0,r&&r.enter()};if(u)n=function(){a.nextTick(c)};else if(i){var f=!0,l=document.createTextNode(\"\");new i(c).observe(l,{characterData:!0}),n=function(){l.data=f=!f}}else if(s&&s.resolve){var p=s.resolve();n=function(){p.then(c)}}else n=function(){o.call(r,c)};return function(r){var o={fn:r,next:void 0};e&&(e.next=o),t||(t=o,n()),e=o}}},function(t,e,n){var r=n(26),o=n(27),i=n(56);t.exports=n(25)?Object.defineProperties:function(t,e){o(t);for(var n,a=i(e),s=a.length,u=0;s>u;)r.f(t,n=a[u++],e[n]);return t}},function(t,e,n){var r=n(72),o=n(57),i=n(30),a=n(76),s=n(28),u=n(102),c=Object.getOwnPropertyDescriptor;e.f=n(25)?c:function(t,e){if(t=i(t),e=a(e,!0),u)try{return c(t,e)}catch(t){}if(s(t,e))return o(!r.f.call(t,e),t[e])}},function(t,e,n){var r=n(28),o=n(196),i=n(73)(\"IE_PROTO\"),a=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=o(t),r(t,i)?t[i]:\"function\"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?a:null}},function(t,e,n){var r=n(33),o=n(12),i=n(43);t.exports=function(t,e){var n=(o.Object||{})[t]||Object[t],a={};a[t]=e(n),r(r.S+r.F*i(function(){n(1)}),\"Object\",a)}},function(t,e,n){var r=n(29);t.exports=function(t,e,n){for(var o in e)n&&t[o]?t[o]=e[o]:r(t,o,e[o]);return t}},function(t,e,n){\"use strict\";var r=n(13),o=n(12),i=n(26),a=n(25),s=n(10)(\"species\");t.exports=function(t){var e=\"function\"==typeof o[t]?o[t]:r[t];a&&e&&!e[s]&&i.f(e,s,{configurable:!0,get:function(){return this}})}},function(t,e,n){var r=n(27),o=n(67),i=n(10)(\"species\");t.exports=function(t,e){var n,a=r(t).constructor;return void 0===a||void 0==(n=r(a)[i])?e:o(n)}},function(t,e,n){var r=n(75),o=n(68);t.exports=function(t){return function(e,n){var i,a,s=String(o(e)),u=r(n),c=s.length;return u<0||u>=c?t?\"\":void 0:(i=s.charCodeAt(u),i<55296||i>56319||u+1===c||(a=s.charCodeAt(u+1))<56320||a>57343?t?s.charAt(u):i:t?s.slice(u,u+2):a-56320+(i-55296<<10)+65536)}}},function(t,e,n){var r=n(75),o=Math.max,i=Math.min;t.exports=function(t,e){return t=r(t),t<0?o(t+e,0):i(t,e)}},function(t,e,n){var r=n(68);t.exports=function(t){return Object(r(t))}},function(t,e,n){var r=n(100),o=n(10)(\"iterator\"),i=n(45);t.exports=n(12).getIteratorMethod=function(t){if(void 0!=t)return t[o]||t[\"@@iterator\"]||i[r(t)]}},function(t,e,n){\"use strict\";var r=n(171),o=n(183),i=n(45),a=n(30);t.exports=n(103)(Array,\"Array\",function(t,e){this._t=a(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,o(1)):\"keys\"==e?o(0,n):\"values\"==e?o(0,t[n]):o(0,[n,t[n]])},\"values\"),i.Arguments=i.Array,r(\"keys\"),r(\"values\"),r(\"entries\")},function(t,e,n){var r=n(33);r(r.S,\"Object\",{create:n(71)})},function(t,e,n){var r=n(33);r(r.S+r.F*!n(25),\"Object\",{defineProperty:n(26).f})},function(t,e,n){n(190)(\"getOwnPropertyNames\",function(){return n(104).f})},function(t,e,n){\"use strict\";var r,o,i,a=n(55),s=n(13),u=n(54),c=n(100),f=n(33),l=n(44),p=n(67),h=n(172),d=n(175),v=n(193),y=n(109).set,m=n(186)(),g=s.TypeError,_=s.process,b=s.Promise,_=s.process,w=\"process\"==c(_),x=function(){},A=!!function(){try{var t=b.resolve(1),e=(t.constructor={})[n(10)(\"species\")]=function(t){t(x,x)};return(w||\"function\"==typeof PromiseRejectionEvent)&&t.then(x)instanceof e}catch(t){}}(),E=function(t,e){return t===e||t===b&&e===i},O=function(t){var e;return!(!l(t)||\"function\"!=typeof(e=t.then))&&e},C=function(t){return E(b,t)?new $(t):new o(t)},$=o=function(t){var e,n;this.promise=new t(function(t,r){if(void 0!==e||void 0!==n)throw g(\"Bad Promise constructor\");e=t,n=r}),this.resolve=p(e),this.reject=p(n)},k=function(t){try{t()}catch(t){return{error:t}}},S=function(t,e){if(!t._n){t._n=!0;var n=t._c;m(function(){for(var r=t._v,o=1==t._s,i=0;n.length>i;)!function(e){var n,i,a=o?e.ok:e.fail,s=e.resolve,u=e.reject,c=e.domain;try{a?(o||(2==t._h&&R(t),t._h=1),!0===a?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===e.promise?u(g(\"Promise-chain cycle\")):(i=O(n))?i.call(n,s,u):s(n)):u(r)}catch(t){u(t)}}(n[i++]);t._c=[],t._n=!1,e&&!t._h&&T(t)})}},T=function(t){y.call(s,function(){var e,n,r,o=t._v;if(j(t)&&(e=k(function(){w?_.emit(\"unhandledRejection\",o,t):(n=s.onunhandledrejection)?n({promise:t,reason:o}):(r=s.console)&&r.error&&r.error(\"Unhandled promise rejection\",o)}),t._h=w||j(t)?2:1),t._a=void 0,e)throw e.error})},j=function(t){if(1==t._h)return!1;for(var e,n=t._a||t._c,r=0;n.length>r;)if(e=n[r++],e.fail||!j(e.promise))return!1;return!0},R=function(t){y.call(s,function(){var e;w?_.emit(\"rejectionHandled\",t):(e=s.onrejectionhandled)&&e({promise:t,reason:t._v})})},P=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),S(e,!0))},M=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw g(\"Promise can't be resolved itself\");(e=O(t))?m(function(){var r={_w:n,_d:!1};try{e.call(t,u(M,r,1),u(P,r,1))}catch(t){P.call(r,t)}}):(n._v=t,n._s=1,S(n,!1))}catch(t){P.call({_w:n,_d:!1},t)}}};A||(b=function(t){h(this,b,\"Promise\",\"_h\"),p(t),r.call(this);try{t(u(M,this,1),u(P,this,1))}catch(t){P.call(this,t)}},r=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n(191)(b.prototype,{then:function(t,e){var n=C(v(this,b));return n.ok=\"function\"!=typeof t||t,n.fail=\"function\"==typeof e&&e,n.domain=w?_.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&S(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),$=function(){var t=new r;this.promise=t,this.resolve=u(M,t,1),this.reject=u(P,t,1)}),f(f.G+f.W+f.F*!A,{Promise:b}),n(58)(b,\"Promise\"),n(192)(\"Promise\"),i=n(12).Promise,f(f.S+f.F*!A,\"Promise\",{reject:function(t){var e=C(this);return(0,e.reject)(t),e.promise}}),f(f.S+f.F*(a||!A),\"Promise\",{resolve:function(t){if(t instanceof b&&E(t.constructor,this))return t;var e=C(this);return(0,e.resolve)(t),e.promise}}),f(f.S+f.F*!(A&&n(182)(function(t){b.all(t).catch(x)})),\"Promise\",{all:function(t){var e=this,n=C(e),r=n.resolve,o=n.reject,i=k(function(){var n=[],i=0,a=1;d(t,!1,function(t){var s=i++,u=!1;n.push(void 0),a++,e.resolve(t).then(function(t){u||(u=!0,n[s]=t,--a||r(n))},o)}),--a||r(n)});return i&&o(i.error),n.promise},race:function(t){var e=this,n=C(e),r=n.reject,o=k(function(){d(t,!1,function(t){e.resolve(t).then(n.resolve,r)})});return o&&r(o.error),n.promise}})},function(t,e,n){\"use strict\";var r=n(13),o=n(28),i=n(25),a=n(33),s=n(108),u=n(185).KEY,c=n(43),f=n(74),l=n(58),p=n(59),h=n(10),d=n(78),v=n(77),y=n(184),m=n(174),g=n(179),_=n(27),b=n(30),w=n(76),x=n(57),A=n(71),E=n(104),O=n(188),C=n(26),$=n(56),k=O.f,S=C.f,T=E.f,j=r.Symbol,R=r.JSON,P=R&&R.stringify,M=h(\"_hidden\"),L=h(\"toPrimitive\"),N={}.propertyIsEnumerable,I=f(\"symbol-registry\"),U=f(\"symbols\"),B=f(\"op-symbols\"),D=Object.prototype,F=\"function\"==typeof j,q=r.QObject,H=!q||!q.prototype||!q.prototype.findChild,Y=i&&c(function(){return 7!=A(S({},\"a\",{get:function(){return S(this,\"a\",{value:7}).a}})).a})?function(t,e,n){var r=k(D,e);r&&delete D[e],S(t,e,n),r&&t!==D&&S(D,e,r)}:S,V=function(t){var e=U[t]=A(j.prototype);return e._k=t,e},z=F&&\"symbol\"==typeof j.iterator?function(t){return\"symbol\"==typeof t}:function(t){return t instanceof j},J=function(t,e,n){return t===D&&J(B,e,n),_(t),e=w(e,!0),_(n),o(U,e)?(n.enumerable?(o(t,M)&&t[M][e]&&(t[M][e]=!1),n=A(n,{enumerable:x(0,!1)})):(o(t,M)||S(t,M,x(1,{})),t[M][e]=!0),Y(t,e,n)):S(t,e,n)},K=function(t,e){_(t);for(var n,r=m(e=b(e)),o=0,i=r.length;i>o;)J(t,n=r[o++],e[n]);return t},G=function(t,e){return void 0===e?A(t):K(A(t),e)},W=function(t){var e=N.call(this,t=w(t,!0));return!(this===D&&o(U,t)&&!o(B,t))&&(!(e||!o(this,t)||!o(U,t)||o(this,M)&&this[M][t])||e)},X=function(t,e){if(t=b(t),e=w(e,!0),t!==D||!o(U,e)||o(B,e)){var n=k(t,e);return!n||!o(U,e)||o(t,M)&&t[M][e]||(n.enumerable=!0),n}},Z=function(t){for(var e,n=T(b(t)),r=[],i=0;n.length>i;)o(U,e=n[i++])||e==M||e==u||r.push(e);return r},Q=function(t){for(var e,n=t===D,r=T(n?B:b(t)),i=[],a=0;r.length>a;)!o(U,e=r[a++])||n&&!o(D,e)||i.push(U[e]);return i};F||(j=function(){if(this instanceof j)throw TypeError(\"Symbol is not a constructor!\");var t=p(arguments.length>0?arguments[0]:void 0),e=function(n){this===D&&e.call(B,n),o(this,M)&&o(this[M],t)&&(this[M][t]=!1),Y(this,t,x(1,n))};return i&&H&&Y(D,t,{configurable:!0,set:e}),V(t)},s(j.prototype,\"toString\",function(){return this._k}),O.f=X,C.f=J,n(105).f=E.f=Z,n(72).f=W,n(106).f=Q,i&&!n(55)&&s(D,\"propertyIsEnumerable\",W,!0),d.f=function(t){return V(h(t))}),a(a.G+a.W+a.F*!F,{Symbol:j});for(var tt=\"hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables\".split(\",\"),et=0;tt.length>et;)h(tt[et++]);for(var tt=$(h.store),et=0;tt.length>et;)v(tt[et++]);a(a.S+a.F*!F,\"Symbol\",{for:function(t){return o(I,t+=\"\")?I[t]:I[t]=j(t)},keyFor:function(t){if(z(t))return y(I,t);throw TypeError(t+\" is not a symbol!\")},useSetter:function(){H=!0},useSimple:function(){H=!1}}),a(a.S+a.F*!F,\"Object\",{create:G,defineProperty:J,defineProperties:K,getOwnPropertyDescriptor:X,getOwnPropertyNames:Z,getOwnPropertySymbols:Q}),R&&a(a.S+a.F*(!F||c(function(){var t=j();return\"[null]\"!=P([t])||\"{}\"!=P({a:t})||\"{}\"!=P(Object(t))})),\"JSON\",{stringify:function(t){if(void 0!==t&&!z(t)){for(var e,n,r=[t],o=1;arguments.length>o;)r.push(arguments[o++]);return e=r[1],\"function\"==typeof e&&(n=e),!n&&g(e)||(e=function(t,e){if(n&&(e=n.call(this,t,e)),!z(e))return e}),r[1]=e,P.apply(R,r)}}}),j.prototype[L]||n(29)(j.prototype,L,j.prototype.valueOf),l(j,\"Symbol\"),l(Math,\"Math\",!0),l(r.JSON,\"JSON\",!0)},function(t,e,n){n(77)(\"asyncIterator\")},function(t,e,n){n(77)(\"observable\")},,,,,,,function(t,e){e.read=function(t,e,n,r,o){var i,a,s=8*o-r-1,u=(1<<s)-1,c=u>>1,f=-7,l=n?o-1:0,p=n?-1:1,h=t[e+l];for(l+=p,i=h&(1<<-f)-1,h>>=-f,f+=s;f>0;i=256*i+t[e+l],l+=p,f-=8);for(a=i&(1<<-f)-1,i>>=-f,f+=r;f>0;a=256*a+t[e+l],l+=p,f-=8);if(0===i)i=1-c;else{if(i===u)return a?NaN:1/0*(h?-1:1);a+=Math.pow(2,r),i-=c}return(h?-1:1)*a*Math.pow(2,i-r)},e.write=function(t,e,n,r,o,i){var a,s,u,c=8*i-o-1,f=(1<<c)-1,l=f>>1,p=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:i-1,d=r?1:-1,v=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=f):(a=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-a))<1&&(a--,u*=2),e+=a+l>=1?p/u:p*Math.pow(2,1-l),e*u>=2&&(a++,u/=2),a+l>=f?(s=0,a=f):a+l>=1?(s=(e*u-1)*Math.pow(2,o),a+=l):(s=e*Math.pow(2,l-1)*Math.pow(2,o),a=0));o>=8;t[n+h]=255&s,h+=d,s/=256,o-=8);for(a=a<<o|s,c+=o;c>0;t[n+h]=255&a,h+=d,a/=256,c-=8);t[n+h-d]|=128*v}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return\"[object Array]\"==n.call(t)}},function(t,e){function n(){throw new Error(\"setTimeout has not been defined\")}function r(){throw new Error(\"clearTimeout has not been defined\")}function o(t){if(f===setTimeout)return setTimeout(t,0);if((f===n||!f)&&setTimeout)return f=setTimeout,setTimeout(t,0);try{return f(t,0)}catch(e){try{return f.call(null,t,0)}catch(e){return f.call(this,t,0)}}}function i(t){if(l===clearTimeout)return clearTimeout(t);if((l===r||!l)&&clearTimeout)return l=clearTimeout,clearTimeout(t);try{return l(t)}catch(e){try{return l.call(null,t)}catch(e){return l.call(this,t)}}}function a(){v&&h&&(v=!1,h.length?d=h.concat(d):y=-1,d.length&&s())}function s(){if(!v){var t=o(a);v=!0;for(var e=d.length;e;){for(h=d,d=[];++y<e;)h&&h[y].run();y=-1,e=d.length}h=null,v=!1,i(t)}}function u(t,e){this.fun=t,this.array=e}function c(){}var f,l,p=t.exports={};!function(){try{f=\"function\"==typeof setTimeout?setTimeout:n}catch(t){f=n}try{l=\"function\"==typeof clearTimeout?clearTimeout:r}catch(t){l=r}}();var h,d=[],v=!1,y=-1;p.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];d.push(new u(t,e)),1!==d.length||v||o(s)},u.prototype.run=function(){this.fun.apply(null,this.array)},p.title=\"browser\",p.browser=!0,p.env={},p.argv=[],p.version=\"\",p.versions={},p.on=c,p.addListener=c,p.once=c,p.off=c,p.removeListener=c,p.removeAllListeners=c,p.emit=c,p.binding=function(t){throw new Error(\"process.binding is not supported\")},p.cwd=function(){return\"/\"},p.chdir=function(t){throw new Error(\"process.chdir is not supported\")},p.umask=function(){return 0}},,,,,,,,,,,,function(t,e,n){\"use strict\";function r(t,e){}function o(t,e){switch(typeof e){case\"undefined\":return;case\"object\":return e;case\"function\":return e(t);case\"boolean\":return e?t.params:void 0}}function i(t,e,n){void 0===e&&(e={});var r,o=n||a;try{r=o(t||\"\")}catch(t){r={}}for(var i in e){var s=e[i];r[i]=Array.isArray(s)?s.slice():s}return r}function a(t){var e={};return(t=t.trim().replace(/^(\\?|#|&)/,\"\"))?(t.split(\"&\").forEach(function(t){var n=t.replace(/\\+/g,\" \").split(\"=\"),r=Rt(n.shift()),o=n.length>0?Rt(n.join(\"=\")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]}),e):e}function s(t){var e=t?Object.keys(t).map(function(e){var n=t[e];if(void 0===n)return\"\";if(null===n)return jt(e);if(Array.isArray(n)){var r=[];return n.slice().forEach(function(t){void 0!==t&&(null===t?r.push(jt(e)):r.push(jt(e)+\"=\"+jt(t)))}),r.join(\"&\")}return jt(e)+\"=\"+jt(n)}).filter(function(t){return t.length>0}).join(\"&\"):null;return e?\"?\"+e:\"\"}function u(t,e,n,r){var o=r&&r.options.stringifyQuery,i={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||\"/\",hash:e.hash||\"\",query:e.query||{},params:e.params||{},fullPath:f(e,o),matched:t?c(t):[]};return n&&(i.redirectedFrom=f(n,o)),Object.freeze(i)}function c(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function f(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;void 0===o&&(o=\"\");var i=e||s;return(n||\"/\")+i(r)+o}function l(t,e){return e===Mt?t===e:!!e&&(t.path&&e.path?t.path.replace(Pt,\"\")===e.path.replace(Pt,\"\")&&t.hash===e.hash&&p(t.query,e.query):!(!t.name||!e.name)&&(t.name===e.name&&t.hash===e.hash&&p(t.query,e.query)&&p(t.params,e.params)))}function p(t,e){void 0===t&&(t={}),void 0===e&&(e={});var n=Object.keys(t),r=Object.keys(e);return n.length===r.length&&n.every(function(n){return String(t[n])===String(e[n])})}function h(t,e){return 0===t.path.replace(Pt,\"/\").indexOf(e.path.replace(Pt,\"/\"))&&(!e.hash||t.hash===e.hash)&&d(t.query,e.query)}function d(t,e){for(var n in e)if(!(n in t))return!1;return!0}function v(t){if(!(t.metaKey||t.ctrlKey||t.shiftKey||t.defaultPrevented||void 0!==t.button&&0!==t.button)){if(t.currentTarget&&t.currentTarget.getAttribute){if(/\\b_blank\\b/i.test(t.currentTarget.getAttribute(\"target\")))return}return t.preventDefault&&t.preventDefault(),!0}}function y(t){if(t)for(var e,n=0;n<t.length;n++){if(e=t[n],\"a\"===e.tag)return e;if(e.children&&(e=y(e.children)))return e}}function m(t){if(!m.installed){m.installed=!0,kt=t,Object.defineProperty(t.prototype,\"$router\",{get:function(){return this.$root._router}}),Object.defineProperty(t.prototype,\"$route\",{get:function(){return this.$root._route}});var e=function(t){return void 0!==t},n=function(t,n){var r=t.$options._parentVnode;e(r)&&e(r=r.data)&&e(r=r.registerRouteInstance)&&r(t,n)};t.mixin({beforeCreate:function(){e(this.$options.router)&&(this._router=this.$options.router,this._router.init(this),t.util.defineReactive(this,\"_route\",this._router.history.current)),n(this,this)},destroyed:function(){n(this)}}),t.component(\"router-view\",St),t.component(\"router-link\",It);var r=t.config.optionMergeStrategies;r.beforeRouteEnter=r.beforeRouteLeave=r.created}}function g(t,e,n){var r=t.charAt(0);if(\"/\"===r)return t;if(\"?\"===r||\"#\"===r)return e+t;var o=e.split(\"/\");n&&o[o.length-1]||o.pop();for(var i=t.replace(/^\\//,\"\").split(\"/\"),a=0;a<i.length;a++){var s=i[a];\"..\"===s?o.pop():\".\"!==s&&o.push(s)}return\"\"!==o[0]&&o.unshift(\"\"),o.join(\"/\")}function _(t){var e=\"\",n=\"\",r=t.indexOf(\"#\");r>=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf(\"?\");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}function b(t){return t.replace(/\\/\\//g,\"/\")}function w(t,e){for(var n,r=[],o=0,i=0,a=\"\",s=e&&e.delimiter||\"/\";null!=(n=zt.exec(t));){var u=n[0],c=n[1],f=n.index;if(a+=t.slice(i,f),i=f+u.length,c)a+=c[1];else{var l=t[i],p=n[2],h=n[3],d=n[4],v=n[5],y=n[6],m=n[7];a&&(r.push(a),a=\"\");var g=null!=p&&null!=l&&l!==p,_=\"+\"===y||\"*\"===y,b=\"?\"===y||\"*\"===y,w=n[2]||s,x=d||v;r.push({name:h||o++,prefix:p||\"\",delimiter:w,optional:b,repeat:_,partial:g,asterisk:!!m,pattern:x?$(x):m?\".*\":\"[^\"+C(w)+\"]+?\"})}}return i<t.length&&(a+=t.substr(i)),a&&r.push(a),r}function x(t,e){return O(w(t,e))}function A(t){return encodeURI(t).replace(/[\\/?#]/g,function(t){return\"%\"+t.charCodeAt(0).toString(16).toUpperCase()})}function E(t){return encodeURI(t).replace(/[?#]/g,function(t){return\"%\"+t.charCodeAt(0).toString(16).toUpperCase()})}function O(t){for(var e=new Array(t.length),n=0;n<t.length;n++)\"object\"==typeof t[n]&&(e[n]=new RegExp(\"^(?:\"+t[n].pattern+\")$\"));return function(n,r){for(var o=\"\",i=n||{},a=r||{},s=a.pretty?A:encodeURIComponent,u=0;u<t.length;u++){var c=t[u];if(\"string\"!=typeof c){var f,l=i[c.name];if(null==l){if(c.optional){c.partial&&(o+=c.prefix);continue}throw new TypeError('Expected \"'+c.name+'\" to be defined')}if(Dt(l)){if(!c.repeat)throw new TypeError('Expected \"'+c.name+'\" to not repeat, but received `'+JSON.stringify(l)+\"`\");if(0===l.length){if(c.optional)continue;throw new TypeError('Expected \"'+c.name+'\" to not be empty')}for(var p=0;p<l.length;p++){if(f=s(l[p]),!e[u].test(f))throw new TypeError('Expected all \"'+c.name+'\" to match \"'+c.pattern+'\", but received `'+JSON.stringify(f)+\"`\");o+=(0===p?c.prefix:c.delimiter)+f}}else{if(f=c.asterisk?E(l):s(l),!e[u].test(f))throw new TypeError('Expected \"'+c.name+'\" to match \"'+c.pattern+'\", but received \"'+f+'\"');o+=c.prefix+f}}else o+=c}return o}}function C(t){return t.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g,\"\\\\$1\")}function $(t){return t.replace(/([=!:$\\/()])/g,\"\\\\$1\")}function k(t,e){return t.keys=e,t}function S(t){return t.sensitive?\"\":\"i\"}function T(t,e){var n=t.source.match(/\\((?!\\?)/g);if(n)for(var r=0;r<n.length;r++)e.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return k(t,e)}function j(t,e,n){for(var r=[],o=0;o<t.length;o++)r.push(M(t[o],e,n).source);return k(new RegExp(\"(?:\"+r.join(\"|\")+\")\",S(n)),e)}function R(t,e,n){return P(w(t,n),e,n)}function P(t,e,n){Dt(e)||(n=e||n,e=[]),n=n||{};for(var r=n.strict,o=!1!==n.end,i=\"\",a=0;a<t.length;a++){var s=t[a];if(\"string\"==typeof s)i+=C(s);else{var u=C(s.prefix),c=\"(?:\"+s.pattern+\")\";e.push(s),s.repeat&&(c+=\"(?:\"+u+c+\")*\"),c=s.optional?s.partial?u+\"(\"+c+\")?\":\"(?:\"+u+\"(\"+c+\"))?\":u+\"(\"+c+\")\",i+=c}}var f=C(n.delimiter||\"/\"),l=i.slice(-f.length)===f;return r||(i=(l?i.slice(0,-f.length):i)+\"(?:\"+f+\"(?=$))?\"),i+=o?\"$\":r&&l?\"\":\"(?=\"+f+\"|$)\",k(new RegExp(\"^\"+i,S(n)),e)}function M(t,e,n){return Dt(e)||(n=e||n,e=[]),n=n||{},t instanceof RegExp?T(t,e):Dt(t)?j(t,e,n):R(t,e,n)}function L(t,e,n){try{return(Jt[t]||(Jt[t]=Ft.compile(t)))(e||{},{pretty:!0})}catch(t){return\"\"}}function N(t,e,n,r){var o=e||[],i=n||Object.create(null),a=r||Object.create(null);t.forEach(function(t){I(o,i,a,t)});for(var s=0,u=o.length;s<u;s++)\"*\"===o[s]&&(o.push(o.splice(s,1)[0]),u--,s--);return{pathList:o,pathMap:i,nameMap:a}}function I(t,e,n,r,o,i){var a=r.path,s=r.name,u=B(a,o),c={path:u,regex:U(u),components:r.components||{default:r.component},instances:{},name:s,parent:o,matchAs:i,redirect:r.redirect,beforeEnter:r.beforeEnter,meta:r.meta||{},props:null==r.props?{}:r.components?r.props:{default:r.props}};if(r.children&&r.children.forEach(function(r){var o=i?b(i+\"/\"+r.path):void 0;I(t,e,n,r,c,o)}),void 0!==r.alias)if(Array.isArray(r.alias))r.alias.forEach(function(i){var a={path:i,children:r.children};I(t,e,n,a,o,c.path)});else{var f={path:r.alias,children:r.children};I(t,e,n,f,o,c.path)}e[c.path]||(t.push(c.path),e[c.path]=c),s&&(n[s]||(n[s]=c))}function U(t){var e=Ft(t);return e}function B(t,e){return t=t.replace(/\\/$/,\"\"),\"/\"===t[0]?t:null==e?t:b(e.path+\"/\"+t)}function D(t,e,n,r){var o=\"string\"==typeof t?{path:t}:t;if(o.name||o._normalized)return o;if(!o.path&&o.params&&e){o=F({},o),o._normalized=!0;var a=F(F({},e.params),o.params);if(e.name)o.name=e.name,o.params=a;else if(e.matched){var s=e.matched[e.matched.length-1].path;o.path=L(s,a,\"path \"+e.path)}return o}var u=_(o.path||\"\"),c=e&&e.path||\"/\",f=u.path?g(u.path,c,n||o.append):c,l=i(u.query,o.query,r&&r.options.parseQuery),p=o.hash||u.hash;return p&&\"#\"!==p.charAt(0)&&(p=\"#\"+p),{_normalized:!0,path:f,query:l,hash:p}}function F(t,e){for(var n in e)t[n]=e[n];return t}function q(t,e){function n(t){N(t,c,f,l)}function r(t,n,r){var o=D(t,n,!1,e),i=o.name;if(i){var s=l[i],u=s.regex.keys.filter(function(t){return!t.optional}).map(function(t){return t.name});if(\"object\"!=typeof o.params&&(o.params={}),n&&\"object\"==typeof n.params)for(var p in n.params)!(p in o.params)&&u.indexOf(p)>-1&&(o.params[p]=n.params[p]);if(s)return o.path=L(s.path,o.params,'named route \"'+i+'\"'),a(s,o,r)}else if(o.path){o.params={};for(var h=0;h<c.length;h++){var d=c[h],v=f[d];if(H(v.regex,o.path,o.params))return a(v,o,r)}}return a(null,o)}function o(t,n){var o=t.redirect,i=\"function\"==typeof o?o(u(t,n,null,e)):o;if(\"string\"==typeof i&&(i={path:i}),!i||\"object\"!=typeof i)return a(null,n);var s=i,c=s.name,f=s.path,p=n.query,h=n.hash,d=n.params;if(p=s.hasOwnProperty(\"query\")?s.query:p,h=s.hasOwnProperty(\"hash\")?s.hash:h,d=s.hasOwnProperty(\"params\")?s.params:d,c){l[c];return r({_normalized:!0,name:c,query:p,hash:h,params:d},void 0,n)}if(f){var v=Y(f,t);return r({_normalized:!0,path:L(v,d,'redirect route with path \"'+v+'\"'),query:p,hash:h},void 0,n)}return a(null,n)}function i(t,e,n){var o=L(n,e.params,'aliased route with path \"'+n+'\"'),i=r({_normalized:!0,path:o});if(i){var s=i.matched,u=s[s.length-1];return e.params=i.params,a(u,e)}return a(null,e)}function a(t,n,r){return t&&t.redirect?o(t,r||n):t&&t.matchAs?i(t,n,t.matchAs):u(t,n,r,e)}var s=N(t),c=s.pathList,f=s.pathMap,l=s.nameMap;return{match:r,addRoutes:n}}function H(t,e,n){var r=e.match(t);if(!r)return!1;if(!n)return!0;for(var o=1,i=r.length;o<i;++o){var a=t.keys[o-1],s=\"string\"==typeof r[o]?decodeURIComponent(r[o]):r[o];a&&(n[a.name]=s)}return!0}function Y(t,e){return g(t,e.parent?e.parent.path:\"/\",!0)}function V(){window.addEventListener(\"popstate\",function(t){J(),t.state&&t.state.key&&et(t.state.key)})}function z(t,e,n,r){if(t.app){var o=t.options.scrollBehavior;o&&t.app.$nextTick(function(){var t=K(),i=o(e,n,r?t:null);if(i){var a=\"object\"==typeof i;if(a&&\"string\"==typeof i.selector){var s=document.querySelector(i.selector);s?t=G(s):W(i)&&(t=X(i))}else a&&W(i)&&(t=X(i));t&&window.scrollTo(t.x,t.y)}})}}function J(){var t=tt();t&&(Kt[t]={x:window.pageXOffset,y:window.pageYOffset})}function K(){var t=tt();if(t)return Kt[t]}function G(t){var e=document.documentElement,n=e.getBoundingClientRect(),r=t.getBoundingClientRect();return{x:r.left-n.left,y:r.top-n.top}}function W(t){return Z(t.x)||Z(t.y)}function X(t){return{x:Z(t.x)?t.x:window.pageXOffset,y:Z(t.y)?t.y:window.pageYOffset}}function Z(t){return\"number\"==typeof t}function Q(){return Wt.now().toFixed(3)}function tt(){return Xt}function et(t){Xt=t}function nt(t,e){J();var n=window.history;try{e?n.replaceState({key:Xt},\"\",t):(Xt=Q(),n.pushState({key:Xt},\"\",t))}catch(n){window.location[e?\"replace\":\"assign\"](t)}}function rt(t){nt(t,!0)}function ot(t,e,n){var r=function(o){o>=t.length?n():t[o]?e(t[o],function(){r(o+1)}):r(o+1)};r(0)}function it(t){if(!t)if(Ut){var e=document.querySelector(\"base\");t=e&&e.getAttribute(\"href\")||\"/\"}else t=\"/\";return\"/\"!==t.charAt(0)&&(t=\"/\"+t),t.replace(/\\/$/,\"\")}function at(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n<r&&t[n]===e[n];n++);return{updated:e.slice(0,n),activated:e.slice(n),deactivated:t.slice(n)}}function st(t,e,n,r){var o=yt(t,function(t,r,o,i){var a=ut(t,e);if(a)return Array.isArray(a)?a.map(function(t){return n(t,r,o,i)}):n(a,r,o,i)});return mt(r?o.reverse():o)}function ut(t,e){return\"function\"!=typeof t&&(t=kt.extend(t)),t.options[e]}function ct(t){return st(t,\"beforeRouteLeave\",lt,!0)}function ft(t){return st(t,\"beforeRouteUpdate\",lt)}function lt(t,e){if(e)return function(){return t.apply(e,arguments)}}function pt(t,e,n){return st(t,\"beforeRouteEnter\",function(t,r,o,i){return ht(t,o,i,e,n)})}function ht(t,e,n,r,o){return function(i,a,s){return t(i,a,function(t){s(t),\"function\"==typeof t&&r.push(function(){dt(t,e.instances,n,o)})})}}function dt(t,e,n,r){e[n]?t(e[n]):r()&&setTimeout(function(){dt(t,e,n,r)},16)}function vt(t){return function(e,n,r){var o=!1,i=0,a=null;yt(t,function(t,e,n,s){if(\"function\"==typeof t&&void 0===t.cid){o=!0,i++;var u,c=gt(function(e){t.resolved=\"function\"==typeof e?e:kt.extend(e),n.components[s]=e,--i<=0&&r()}),f=gt(function(t){var e=\"Failed to resolve async component \"+s+\": \"+t;a||(a=_t(t)?t:new Error(e),r(a))});try{u=t(c,f)}catch(t){f(t)}if(u)if(\"function\"==typeof u.then)u.then(c,f);else{var l=u.component;l&&\"function\"==typeof l.then&&l.then(c,f)}}}),o||r()}}function yt(t,e){return mt(t.map(function(t){return Object.keys(t.components).map(function(n){return e(t.components[n],t.instances[n],t,n)})}))}function mt(t){return Array.prototype.concat.apply([],t)}function gt(t){var e=!1;return function(){if(!e)return e=!0,t.apply(this,arguments)}}function _t(t){return Object.prototype.toString.call(t).indexOf(\"Error\")>-1}function bt(t){var e=window.location.pathname;return t&&0===e.indexOf(t)&&(e=e.slice(t.length)),(e||\"/\")+window.location.search+window.location.hash}function wt(t){var e=bt(t);if(!/^\\/#/.test(e))return window.location.replace(b(t+\"/#\"+e)),!0}function xt(){var t=At();return\"/\"===t.charAt(0)||(Ot(\"/\"+t),!1)}function At(){var t=window.location.href,e=t.indexOf(\"#\");return-1===e?\"\":t.slice(e+1)}function Et(t){window.location.hash=t}function Ot(t){var e=window.location.href.indexOf(\"#\");window.location.replace(window.location.href.slice(0,e>=0?e:0)+\"#\"+t)}function Ct(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function $t(t,e,n){var r=\"hash\"===n?\"#\"+e:e;return t?b(t+\"/\"+r):r}var kt,St={name:\"router-view\",functional:!0,props:{name:{type:String,default:\"default\"}},render:function(t,e){var n=e.props,r=e.children,i=e.parent,a=e.data;a.routerView=!0;for(var s=i.$createElement,u=n.name,c=i.$route,f=i._routerViewCache||(i._routerViewCache={}),l=0,p=!1;i;)i.$vnode&&i.$vnode.data.routerView&&l++,i._inactive&&(p=!0),i=i.$parent;if(a.routerViewDepth=l,p)return s(f[u],a,r);var h=c.matched[l];if(!h)return f[u]=null,s();var d=f[u]=h.components[u];return a.registerRouteInstance=function(t,e){h.instances[u]!==t&&(h.instances[u]=e)},(a.hook||(a.hook={})).prepatch=function(t,e){h.instances[u]=e.componentInstance},a.props=o(c,h.props&&h.props[u]),s(d,a,r)}},Tt=function(t){return\"%\"+t.charCodeAt(0).toString(16)},jt=function(t){return encodeURIComponent(t).replace(/[!'()*]/g,Tt).replace(/%2C/g,\",\")},Rt=decodeURIComponent,Pt=/\\/?$/,Mt=u(null,{path:\"/\"}),Lt=[String,Object],Nt=[String,Array],It={name:\"router-link\",props:{to:{type:Lt,required:!0},tag:{type:String,default:\"a\"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:Nt,default:\"click\"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,c={},f=n.options.linkActiveClass,p=n.options.linkExactActiveClass,d=null==f?\"router-link-active\":f,m=null==p?\"router-link-exact-active\":p,g=null==this.activeClass?d:this.activeClass,_=null==this.exactActiveClass?m:this.exactActiveClass,b=i.path?u(null,i,null,n):a;c[_]=l(r,b),c[g]=this.exact?c[_]:h(r,b);var w=function(t){v(t)&&(e.replace?n.replace(i):n.push(i))},x={click:v};Array.isArray(this.event)?this.event.forEach(function(t){x[t]=w}):x[this.event]=w;var A={class:c};if(\"a\"===this.tag)A.on=x,A.attrs={href:s};else{var E=y(this.$slots.default);if(E){E.isStatic=!1;var O=kt.util.extend;(E.data=O({},E.data)).on=x;(E.data.attrs=O({},E.data.attrs)).href=s}else A.on=x}return t(this.tag,A,this.$slots.default)}},Ut=\"undefined\"!=typeof window,Bt=Array.isArray||function(t){return\"[object Array]\"==Object.prototype.toString.call(t)},Dt=Bt,Ft=M,qt=w,Ht=x,Yt=O,Vt=P,zt=new RegExp([\"(\\\\\\\\.)\",\"([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))\"].join(\"|\"),\"g\");Ft.parse=qt,Ft.compile=Ht,Ft.tokensToFunction=Yt,Ft.tokensToRegExp=Vt;var Jt=Object.create(null),Kt=Object.create(null),Gt=Ut&&function(){var t=window.navigator.userAgent;return(-1===t.indexOf(\"Android 2.\")&&-1===t.indexOf(\"Android 4.0\")||-1===t.indexOf(\"Mobile Safari\")||-1!==t.indexOf(\"Chrome\")||-1!==t.indexOf(\"Windows Phone\"))&&(window.history&&\"pushState\"in window.history)}(),Wt=Ut&&window.performance&&window.performance.now?window.performance:Date,Xt=Q(),Zt=function(t,e){this.router=t,this.base=it(e),this.current=Mt,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};Zt.prototype.listen=function(t){this.cb=t},Zt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Zt.prototype.onError=function(t){this.errorCbs.push(t)},Zt.prototype.transitionTo=function(t,e,n){var r=this,o=this.router.match(t,this.current);this.confirmTransition(o,function(){r.updateRoute(o),e&&e(o),r.ensureURL(),r.ready||(r.ready=!0,r.readyCbs.forEach(function(t){t(o)}))},function(t){n&&n(t),t&&!r.ready&&(r.ready=!0,r.readyErrorCbs.forEach(function(e){e(t)}))})},Zt.prototype.confirmTransition=function(t,e,n){var o=this,i=this.current,a=function(t){_t(t)&&(o.errorCbs.length?o.errorCbs.forEach(function(e){e(t)}):(r(!1,\"uncaught error during route navigation:\"),console.error(t))),n&&n(t)};if(l(t,i)&&t.matched.length===i.matched.length)return this.ensureURL(),a();var s=at(this.current.matched,t.matched),u=s.updated,c=s.deactivated,f=s.activated,p=[].concat(ct(c),this.router.beforeHooks,ft(u),f.map(function(t){return t.beforeEnter}),vt(f));this.pending=t;var h=function(e,n){if(o.pending!==t)return a();try{e(t,i,function(t){!1===t||_t(t)?(o.ensureURL(!0),a(t)):\"string\"==typeof t||\"object\"==typeof t&&(\"string\"==typeof t.path||\"string\"==typeof t.name)?(a(),\"object\"==typeof t&&t.replace?o.replace(t):o.push(t)):n(t)})}catch(t){a(t)}};ot(p,h,function(){var n=[];ot(pt(f,n,function(){return o.current===t}).concat(o.router.resolveHooks),h,function(){if(o.pending!==t)return a();o.pending=null,e(t),o.router.app&&o.router.app.$nextTick(function(){n.forEach(function(t){t()})})})})},Zt.prototype.updateRoute=function(t){var e=this.current;this.current=t,this.cb&&this.cb(t),this.router.afterHooks.forEach(function(n){n&&n(t,e)})};var Qt=function(t){function e(e,n){var r=this;t.call(this,e,n);var o=e.options.scrollBehavior;o&&V(),window.addEventListener(\"popstate\",function(t){r.transitionTo(bt(r.base),function(t){o&&z(e,t,r.current,!0)})})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,function(t){nt(b(r.base+t.fullPath)),z(r.router,t,i,!1),e&&e(t)},n)},e.prototype.replace=function(t,e,n){var r=this,o=this,i=o.current;this.transitionTo(t,function(t){rt(b(r.base+t.fullPath)),z(r.router,t,i,!1),e&&e(t)},n)},e.prototype.ensureURL=function(t){if(bt(this.base)!==this.current.fullPath){var e=b(this.base+this.current.fullPath);t?nt(e):rt(e)}},e.prototype.getCurrentLocation=function(){return bt(this.base)},e}(Zt),te=function(t){function e(e,n,r){t.call(this,e,n),r&&wt(this.base)||xt()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;window.addEventListener(\"hashchange\",function(){xt()&&t.transitionTo(At(),function(t){Ot(t.fullPath)})})},e.prototype.push=function(t,e,n){this.transitionTo(t,function(t){Et(t.fullPath),e&&e(t)},n)},e.prototype.replace=function(t,e,n){this.transitionTo(t,function(t){Ot(t.fullPath),e&&e(t)},n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;At()!==e&&(t?Et(e):Ot(e))},e.prototype.getCurrentLocation=function(){return At()},e}(Zt),ee=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)},n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)},n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,function(){e.index=n,e.updateRoute(r)})}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:\"/\"},e.prototype.ensureURL=function(){},e}(Zt),ne=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=q(t.routes||[],this);var e=t.mode||\"hash\";switch(this.fallback=\"history\"===e&&!Gt,this.fallback&&(e=\"hash\"),Ut||(e=\"abstract\"),this.mode=e,e){case\"history\":this.history=new Qt(this,t.base);break;case\"hash\":this.history=new te(this,t.base,this.fallback);break;case\"abstract\":this.history=new ee(this,t.base)}},re={currentRoute:{}};ne.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},re.currentRoute.get=function(){return this.history&&this.history.current},ne.prototype.init=function(t){var e=this;if(this.apps.push(t),!this.app){this.app=t;var n=this.history;if(n instanceof Qt)n.transitionTo(n.getCurrentLocation());else if(n instanceof te){var r=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen(function(t){e.apps.forEach(function(e){e._route=t})})}},ne.prototype.beforeEach=function(t){return Ct(this.beforeHooks,t)},ne.prototype.beforeResolve=function(t){return Ct(this.resolveHooks,t)},ne.prototype.afterEach=function(t){return Ct(this.afterHooks,t)},ne.prototype.onReady=function(t,e){this.history.onReady(t,e)},ne.prototype.onError=function(t){this.history.onError(t)},ne.prototype.push=function(t,e,n){this.history.push(t,e,n)},ne.prototype.replace=function(t,e,n){this.history.replace(t,e,n)},ne.prototype.go=function(t){this.history.go(t)},ne.prototype.back=function(){this.go(-1)},ne.prototype.forward=function(){this.go(1)},ne.prototype.getMatchedComponents=function(t){var e=t?this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map(function(t){return Object.keys(t.components).map(function(e){return t.components[e]})})):[]},ne.prototype.resolve=function(t,e,n){var r=D(t,e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:$t(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},ne.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==Mt&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(ne.prototype,re),ne.install=m,ne.version=\"2.5.2\",Ut&&window.Vue&&window.Vue.use(ne),e.a=ne},function(t,e){t.exports=function(t,e){for(var n=[],r={},o=0;o<e.length;o++){var i=e[o],a=i[0],s=i[1],u=i[2],c=i[3],f={id:t+\":\"+o,css:s,media:u,sourceMap:c};r[a]?r[a].parts.push(f):n.push(r[a]={id:a,parts:[f]})}return n}},function(t,e,n){\"use strict\";function r(t){O&&(t._devtoolHook=O,O.emit(\"vuex:init\",t),O.on(\"vuex:travel-to-state\",function(e){t.replaceState(e)}),t.subscribe(function(t,e){O.emit(\"vuex:mutation\",t,e)}))}function o(t,e){Object.keys(t).forEach(function(n){return e(t[n],n)})}function i(t){return null!==t&&\"object\"==typeof t}function a(t){return t&&\"function\"==typeof t.then}function s(t,e){if(!t)throw new Error(\"[vuex] \"+e)}function u(t,e){if(t.update(e),e.modules)for(var n in e.modules){if(!t.getChild(n))return void console.warn(\"[vuex] trying to add a new module '\"+n+\"' on hot reloading, manual reload is needed\");u(t.getChild(n),e.modules[n])}}function c(t,e){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null),t._modulesNamespaceMap=Object.create(null);var n=t.state;l(t,n,[],t._modules.root,!0),f(t,n,e)}function f(t,e,n){var r=t._vm;t.getters={};var i=t._wrappedGetters,a={};o(i,function(e,n){a[n]=function(){return e(t)},Object.defineProperty(t.getters,n,{get:function(){return t._vm[n]},enumerable:!0})});var s=S.config.silent;S.config.silent=!0,t._vm=new S({data:{$$state:e},computed:a}),S.config.silent=s,t.strict&&m(t),r&&(n&&t._withCommit(function(){r._data.$$state=null}),S.nextTick(function(){return r.$destroy()}))}function l(t,e,n,r,o){var i=!n.length,a=t._modules.getNamespace(n);if(r.namespaced&&(t._modulesNamespaceMap[a]=r),!i&&!o){var s=g(e,n.slice(0,-1)),u=n[n.length-1];t._withCommit(function(){S.set(s,u,r.state)})}var c=r.context=p(t,a,n);r.forEachMutation(function(e,n){d(t,a+n,e,c)}),r.forEachAction(function(e,n){v(t,a+n,e,c)}),r.forEachGetter(function(e,n){y(t,a+n,e,c)}),r.forEachChild(function(r,i){l(t,e,n.concat(i),r,o)})}function p(t,e,n){var r=\"\"===e,o={dispatch:r?t.dispatch:function(n,r,o){var i=_(n,r,o),a=i.payload,s=i.options,u=i.type;return s&&s.root||(u=e+u,t._actions[u])?t.dispatch(u,a):void console.error(\"[vuex] unknown local action type: \"+i.type+\", global type: \"+u)},commit:r?t.commit:function(n,r,o){var i=_(n,r,o),a=i.payload,s=i.options,u=i.type;if(!(s&&s.root||(u=e+u,t._mutations[u])))return void console.error(\"[vuex] unknown local mutation type: \"+i.type+\", global type: \"+u);t.commit(u,a,s)}};return Object.defineProperties(o,{getters:{get:r?function(){return t.getters}:function(){return h(t,e)}},state:{get:function(){return g(t.state,n)}}}),o}function h(t,e){var n={},r=e.length;return Object.keys(t.getters).forEach(function(o){if(o.slice(0,r)===e){var i=o.slice(r);Object.defineProperty(n,i,{get:function(){return t.getters[o]},enumerable:!0})}}),n}function d(t,e,n,r){(t._mutations[e]||(t._mutations[e]=[])).push(function(t){n(r.state,t)})}function v(t,e,n,r){(t._actions[e]||(t._actions[e]=[])).push(function(e,o){var i=n({dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:t.getters,rootState:t.state},e,o);return a(i)||(i=Promise.resolve(i)),t._devtoolHook?i.catch(function(e){throw t._devtoolHook.emit(\"vuex:error\",e),e}):i})}function y(t,e,n,r){if(t._wrappedGetters[e])return void console.error(\"[vuex] duplicate getter key: \"+e);t._wrappedGetters[e]=function(t){return n(r.state,r.getters,t.state,t.getters)}}function m(t){t._vm.$watch(function(){return this._data.$$state},function(){s(t._committing,\"Do not mutate vuex store state outside mutation handlers.\")},{deep:!0,sync:!0})}function g(t,e){return e.length?e.reduce(function(t,e){return t[e]},t):t}function _(t,e,n){return i(t)&&t.type&&(n=e,e=t,t=t.type),s(\"string\"==typeof t,\"Expects string as the type, but found \"+typeof t+\".\"),{type:t,payload:e,options:n}}function b(t){if(S)return void console.error(\"[vuex] already installed. Vue.use(Vuex) should be called only once.\");S=t,E(S)}function w(t){return Array.isArray(t)?t.map(function(t){return{key:t,val:t}}):Object.keys(t).map(function(e){return{key:e,val:t[e]}})}function x(t){return function(e,n){return\"string\"!=typeof e?(n=e,e=\"\"):\"/\"!==e.charAt(e.length-1)&&(e+=\"/\"),t(e,n)}}function A(t,e,n){var r=t._modulesNamespaceMap[n];return r||console.error(\"[vuex] module namespace not found in \"+e+\"(): \"+n),r}/**\n * vuex v2.3.0\n * (c) 2017 Evan You\n * @license MIT\n */\nvar E=function(t){function e(){var t=this.$options;t.store?this.$store=t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}if(Number(t.version.split(\".\")[0])>=2){var n=t.config._lifecycleHooks.indexOf(\"init\")>-1;t.mixin(n?{init:e}:{beforeCreate:e})}else{var r=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[e].concat(t.init):e,r.call(this,t)}}},O=\"undefined\"!=typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,C=function(t,e){this.runtime=e,this._children=Object.create(null),this._rawModule=t;var n=t.state;this.state=(\"function\"==typeof n?n():n)||{}},$={namespaced:{}};$.namespaced.get=function(){return!!this._rawModule.namespaced},C.prototype.addChild=function(t,e){this._children[t]=e},C.prototype.removeChild=function(t){delete this._children[t]},C.prototype.getChild=function(t){return this._children[t]},C.prototype.update=function(t){this._rawModule.namespaced=t.namespaced,t.actions&&(this._rawModule.actions=t.actions),t.mutations&&(this._rawModule.mutations=t.mutations),t.getters&&(this._rawModule.getters=t.getters)},C.prototype.forEachChild=function(t){o(this._children,t)},C.prototype.forEachGetter=function(t){this._rawModule.getters&&o(this._rawModule.getters,t)},C.prototype.forEachAction=function(t){this._rawModule.actions&&o(this._rawModule.actions,t)},C.prototype.forEachMutation=function(t){this._rawModule.mutations&&o(this._rawModule.mutations,t)},Object.defineProperties(C.prototype,$);var k=function(t){var e=this;this.root=new C(t,!1),t.modules&&o(t.modules,function(t,n){e.register([n],t,!1)})};k.prototype.get=function(t){return t.reduce(function(t,e){return t.getChild(e)},this.root)},k.prototype.getNamespace=function(t){var e=this.root;return t.reduce(function(t,n){return e=e.getChild(n),t+(e.namespaced?n+\"/\":\"\")},\"\")},k.prototype.update=function(t){u(this.root,t)},k.prototype.register=function(t,e,n){var r=this;void 0===n&&(n=!0);var i=this.get(t.slice(0,-1)),a=new C(e,n);i.addChild(t[t.length-1],a),e.modules&&o(e.modules,function(e,o){r.register(t.concat(o),e,n)})},k.prototype.unregister=function(t){var e=this.get(t.slice(0,-1)),n=t[t.length-1];e.getChild(n).runtime&&e.removeChild(n)};var S,T=function(t){var e=this;void 0===t&&(t={}),s(S,\"must call Vue.use(Vuex) before creating a store instance.\"),s(\"undefined\"!=typeof Promise,\"vuex requires a Promise polyfill in this browser.\");var n=t.state;void 0===n&&(n={});var o=t.plugins;void 0===o&&(o=[]);var i=t.strict;void 0===i&&(i=!1),this._committing=!1,this._actions=Object.create(null),this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new k(t),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new S;var a=this,u=this,c=u.dispatch,p=u.commit;this.dispatch=function(t,e){return c.call(a,t,e)},this.commit=function(t,e,n){return p.call(a,t,e,n)},this.strict=i,l(this,n,[],this._modules.root),f(this,n),o.concat(r).forEach(function(t){return t(e)})},j={state:{}};j.state.get=function(){return this._vm._data.$$state},j.state.set=function(t){s(!1,\"Use store.replaceState() to explicit replace store state.\")},T.prototype.commit=function(t,e,n){var r=this,o=_(t,e,n),i=o.type,a=o.payload,s=o.options,u={type:i,payload:a},c=this._mutations[i];if(!c)return void console.error(\"[vuex] unknown mutation type: \"+i);this._withCommit(function(){c.forEach(function(t){t(a)})}),this._subscribers.forEach(function(t){return t(u,r.state)}),s&&s.silent&&console.warn(\"[vuex] mutation type: \"+i+\". Silent option has been removed. Use the filter functionality in the vue-devtools\")},T.prototype.dispatch=function(t,e){var n=_(t,e),r=n.type,o=n.payload,i=this._actions[r];return i?i.length>1?Promise.all(i.map(function(t){return t(o)})):i[0](o):void console.error(\"[vuex] unknown action type: \"+r)},T.prototype.subscribe=function(t){var e=this._subscribers;return e.indexOf(t)<0&&e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}},T.prototype.watch=function(t,e,n){var r=this;return s(\"function\"==typeof t,\"store.watch only accepts a function.\"),this._watcherVM.$watch(function(){return t(r.state,r.getters)},e,n)},T.prototype.replaceState=function(t){var e=this;this._withCommit(function(){e._vm._data.$$state=t})},T.prototype.registerModule=function(t,e){\"string\"==typeof t&&(t=[t]),s(Array.isArray(t),\"module path must be a string or an Array.\"),this._modules.register(t,e),l(this,this.state,t,this._modules.get(t)),f(this,this.state)},T.prototype.unregisterModule=function(t){var e=this;\"string\"==typeof t&&(t=[t]),s(Array.isArray(t),\"module path must be a string or an Array.\"),this._modules.unregister(t),this._withCommit(function(){var n=g(e.state,t.slice(0,-1));S.delete(n,t[t.length-1])}),c(this)},T.prototype.hotUpdate=function(t){this._modules.update(t),c(this,!0)},T.prototype._withCommit=function(t){var e=this._committing;this._committing=!0,t(),this._committing=e},Object.defineProperties(T.prototype,j),\"undefined\"!=typeof window&&window.Vue&&b(window.Vue);var R=x(function(t,e){var n={};return w(e).forEach(function(e){var r=e.key,o=e.val;n[r]=function(){var e=this.$store.state,n=this.$store.getters;if(t){var r=A(this.$store,\"mapState\",t);if(!r)return;e=r.context.state,n=r.context.getters}return\"function\"==typeof o?o.call(this,e,n):e[o]},n[r].vuex=!0}),n}),P=x(function(t,e){var n={};return w(e).forEach(function(e){var r=e.key,o=e.val;o=t+o,n[r]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];if(!t||A(this.$store,\"mapMutations\",t))return this.$store.commit.apply(this.$store,[o].concat(e))}}),n}),M=x(function(t,e){var n={};return w(e).forEach(function(e){var r=e.key,o=e.val;o=t+o,n[r]=function(){if(!t||A(this.$store,\"mapGetters\",t))return o in this.$store.getters?this.$store.getters[o]:void console.error(\"[vuex] unknown getter: \"+o)},n[r].vuex=!0}),n}),L=x(function(t,e){var n={};return w(e).forEach(function(e){var r=e.key,o=e.val;o=t+o,n[r]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];if(!t||A(this.$store,\"mapActions\",t))return this.$store.dispatch.apply(this.$store,[o].concat(e))}}),n}),N={Store:T,install:b,version:\"2.3.0\",mapState:R,mapMutations:P,mapGetters:M,mapActions:L};e.a=N},function(t,e){(function(e){t.exports=e}).call(e,{})},function(t,e){t.exports=function(t){if(!t.webpackPolyfill){var e=Object.create(t);e.children||(e.children=[]),Object.defineProperty(e,\"loaded\",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,\"id\",{enumerable:!0,get:function(){return e.i}}),Object.defineProperty(e,\"exports\",{enumerable:!0}),e.webpackPolyfill=1}return e}},function(t,e,n){(function(e){function n(t,e){var n=t[1]||\"\",o=t[3];if(!o)return n;if(e){var i=r(o);return[n].concat(o.sources.map(function(t){return\"/*# sourceURL=\"+o.sourceRoot+t+\" */\"})).concat([i]).join(\"\\n\")}return[n].join(\"\\n\")}function r(t){return\"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,\"+new e(JSON.stringify(t)).toString(\"base64\")+\" */\"}t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var r=n(e,t);return e[2]?\"@media \"+e[2]+\"{\"+r+\"}\":r}).join(\"\")},e.i=function(t,n){\"string\"==typeof t&&(t=[[null,t,\"\"]]);for(var r={},o=0;o<this.length;o++){var i=this[o][0];\"number\"==typeof i&&(r[i]=!0)}for(o=0;o<t.length;o++){var a=t[o];\"number\"==typeof a[0]&&r[a[0]]||(n&&!a[2]?a[2]=n:n&&(a[2]=\"(\"+a[2]+\") and (\"+n+\")\"),e.push(a))}},e}}).call(e,n(99).Buffer)},function(t,e,n){function r(t){for(var e=0;e<t.length;e++){var n=t[e],r=f[n.id];if(r){r.refs++;for(var o=0;o<r.parts.length;o++)r.parts[o](n.parts[o]);for(;o<n.parts.length;o++)r.parts.push(i(n.parts[o]));r.parts.length>n.parts.length&&(r.parts.length=n.parts.length)}else{for(var a=[],o=0;o<n.parts.length;o++)a.push(i(n.parts[o]));f[n.id]={id:n.id,refs:1,parts:a}}}}function o(){var t=document.createElement(\"style\");return t.type=\"text/css\",l.appendChild(t),t}function i(t){var e,n,r=document.querySelector('style[data-vue-ssr-id~=\"'+t.id+'\"]');if(r){if(d)return v;r.parentNode.removeChild(r)}if(y){var i=h++;r=p||(p=o()),e=a.bind(null,r,i,!1),n=a.bind(null,r,i,!0)}else r=o(),e=s.bind(null,r),n=function(){r.parentNode.removeChild(r)};return e(t),function(r){if(r){if(r.css===t.css&&r.media===t.media&&r.sourceMap===t.sourceMap)return;e(t=r)}else n()}}function a(t,e,n,r){var o=n?\"\":r.css;if(t.styleSheet)t.styleSheet.cssText=m(e,o);else{var i=document.createTextNode(o),a=t.childNodes;a[e]&&t.removeChild(a[e]),a.length?t.insertBefore(i,a[e]):t.appendChild(i)}}function s(t,e){var n=e.css,r=e.media,o=e.sourceMap;if(r&&t.setAttribute(\"media\",r),o&&(n+=\"\\n/*# sourceURL=\"+o.sources[0]+\" */\",n+=\"\\n/*# sourceMappingURL=data:application/json;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+\" */\"),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}var u=\"undefined\"!=typeof document;if(\"undefined\"!=typeof DEBUG&&DEBUG&&!u)throw new Error(\"vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\");var c=n(227),f={},l=u&&(document.head||document.getElementsByTagName(\"head\")[0]),p=null,h=0,d=!1,v=function(){},y=\"undefined\"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());t.exports=function(t,e,n){d=n;var o=c(t,e);return r(o),function(e){for(var n=[],i=0;i<o.length;i++){var a=o[i],s=f[a.id];s.refs--,n.push(s)}e?(o=c(t,e),r(o)):o=[];for(var i=0;i<n.length;i++){var s=n[i];if(0===s.refs){for(var u=0;u<s.parts.length;u++)s.parts[u]();delete f[s.id]}}}};var m=function(){var t=[];return function(e,n){return t[e]=n,t.filter(Boolean).join(\"\\n\")}}()}]);"
  },
  {
    "path": "JsBox/routes/index.js",
    "content": "var express = require('express');\nvar fs = require('fs');\nvar path = require('path');\nvar crypto = require('crypto');\nvar verifyCode = require('../service/verifyCode.js');\nvar router = express.Router();\nvar secret = 'menuPath';\n\nvar onlinePath = path.join(__dirname, '../file/code/javascript/online')\nvar tempPath = path.join(__dirname, '../file/code/javascript/temp')\n\nrouter.get('/verify', function (req, res, next) {\n  var data = verifyCode.getCode()\n  data.answer = encode(data.answer)\n  res.json({\n    success: true,\n    data: data\n  })\n})\n\nrouter.get('/codeList', function(req, res, next) {\n  var list = []\n  fs.readdirSync(onlinePath).forEach(function (fileName) {\n    if(fs.statSync(path.join(onlinePath, fileName)).isFile()){\n      list.push({\n        title: fileName,\n        id: encode(path.join(onlinePath,fileName))\n      })\n    }\n  })\n  res.json({\n    success: true,\n    list: list\n  })\n});\n\nrouter.get('/codeDetail', function(req, res, next) {\n  var filePath = decode(req.query.id)\n  fs.readFile(filePath,'utf-8',function(err, data){\n    if(err){\n      res.json({\n        success: false\n      })\n    }else{\n      var dirs = filePath.split(path.sep)\n      res.json({\n        success: true,\n        title: dirs[dirs.length - 1],\n        content: data\n      })\n    }\n  })\n});\n\nrouter.post('/add', function (req, res, next) {\n  var token = req.body.token\n  var title = req.body.title\n  var content = req.body.content\n  var answer = req.body.answer\n  var option = req.body.option\n  if (answer !== encode(option)) {\n    res.json({ success: false, msg: '验证码错误'  })\n    return\n  }\n  var dirPath = null\n  if (token && token === '123456') {  // token正确\n    if (createDir(onlinePath)) {\n      dirPath = onlinePath\n    } else {\n      res.json({ success: false, msg: '添加失败'  })\n    }\n  } else {\n    if (createDir(tempPath)) {\n      dirPath = tempPath\n    } else {\n      res.json({ success: false, msg: '添加失败'  })\n    }\n  }\n  var newFilePath = path.join(dirPath, title)\n  fs.writeFile(newFilePath, content, function(err) {\n    if(err) {\n      res.json({ success: false, msg: '添加失败' })\n    }\n  })\n  res.json({ success: true })\n})\n\nfunction createDir (path) {\n  if (!fs.existsSync(path)) {\n    if (fs.mkdirSync(path)) {\n      return false\n    }\n  }\n  return true\n}\n\n/**\n* 路径编码\n* @param path\n* @returns {*}\n*/\nfunction encode (path) {\n  var cipher = crypto.createCipher('aes192', secret);\n  var enc = cipher.update(path, 'utf8', 'hex');//编码方式从utf-8转为hex;\n  enc += cipher.final('hex');//编码方式从转为hex;\n  return enc\n}\n\n/**\n * 路径解码\n * @param path\n * @returns {*}\n */\nfunction decode (path) {\n  var decipher = crypto.createDecipher('aes192', secret);\n  var dec = decipher.update(path, 'hex', 'utf8');//编码方式从hex转为utf-8;\n  dec += decipher.final('utf8');//编码方式从utf-8;\n  return dec\n}\n\nmodule.exports = router;\n"
  },
  {
    "path": "JsBox/routes/users.js",
    "content": "var express = require('express');\nvar router = express.Router();\n\n/* GET users listing. */\nrouter.get('/', function(req, res, next) {\n  res.send('respond with a resource');\n});\n\nmodule.exports = router;\n"
  },
  {
    "path": "JsBox/service/verifyCode.js",
    "content": "var verifyCode = {\n  getCode: function () {\n    var result = {}\n    var poemLength = poems.length\n    var curIndex = Math.round(Math.random() * (poemLength - 1))\n    var confuseIndexs = []\n    while (confuseIndexs.length < 3) {\n      var tempIndex = Math.round(Math.random() * (poemLength - 1))\n      if (curIndex !== tempIndex) {\n        var hasEqual = false\n        confuseIndexs.forEach(function (i) {\n          if (i === tempIndex) {\n            hasEqual = true\n          }\n        })\n        if (!hasEqual) {\n          confuseIndexs.push(tempIndex)\n        }\n      }\n    }\n\n    var currentPoem = poems[curIndex]\n    var curRandom = Math.round(Math.random() * (currentPoem.length - 2))\n    result.poem = currentPoem[curRandom]\n    result.answer = currentPoem[curRandom + 1]\n    result.options = []\n    var optionRandom = Math.round(Math.random() * (confuseIndexs.length - 1))\n    confuseIndexs.forEach(function (index) {\n      if (index === confuseIndexs[optionRandom]) {\n        result.options.push(currentPoem[curRandom + 1])\n      }\n      var cPoem = poems[index]\n      var cRandom = Math.round(Math.random() * (cPoem.length - 1))\n      result.options.push(cPoem[cRandom])\n    })\n    return result\n  }\n}\n\nmodule.exports = verifyCode\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar poems = [[\n  '慈母手中线', '游子身上衣','临行密密缝','意恐迟迟归','谁言寸草心','报得三春晖'\n], [\n  '千山鸟飞绝', '万径人踪灭', '孤舟蓑笠翁', '独钓寒江雪'\n], [\n  '松下问童子', '言师采药去', '只在此山中', '云深不知处'\n], [\n  '月落乌啼霜满天', '江枫渔火对愁眠', '姑苏城外寒山寺', '夜半钟声到客船'\n], [\n  '湖光秋月两相和', '潭面无风镜未磨', '遥望洞庭山水翠', '白银盘里一青螺'\n], [\n  '锄禾日当午', '汗滴禾下土', '谁知盘中餐', '粒粒皆辛苦'\n], [\n  '清明时节雨纷纷', '路上行人欲断魂', '借问酒家何处有', '牧童遥指杏花村'\n], [\n  '千里莺啼绿映红', '水村山郭酒旗风', '南朝四百八十寺', '多少楼台烟雨中'\n], [\n  '爆竹声中一岁除', '春风送暖入屠苏', '千门万户曈曈日', '总把新桃换旧符'\n], [\n  '竹外桃花三两枝', '春江水暖鸭先知', '蒌蒿满地芦芽短', '正是河豚欲上时'\n], [\n  '生当作人杰', '死亦为鬼雄', '至今思项羽', '不肯过江东'\n], [\n  '毕竟西湖六月中', '风光不与四时同', '接天莲叶无穷碧', '映日荷花别样红'\n], [\n  '草长莺飞二月天', '拂堤杨柳醉春烟', '儿童散学归来早', '忙趁东风放纸鸢'\n], [\n  '两个黄鹂鸣翠柳', '一行白鹭上青天', '窗含西岭千秋雪', '门泊东吴万里船'\n]]\n"
  },
  {
    "path": "JsBox/views/error.jade",
    "content": "extends layout\n\nblock content\n  h1= message\n  h2= error.status\n  pre #{error.stack}\n"
  },
  {
    "path": "JsBox/views/index.jade",
    "content": "extends layout\n\nblock content\n  h1= title\n  p Welcome to #{title}\n"
  },
  {
    "path": "JsBox/views/layout.jade",
    "content": "doctype html\nhtml\n  head\n    title= title\n    link(rel='stylesheet', href='/stylesheets/style.css')\n  body\n    block content\n"
  },
  {
    "path": "README.md",
    "content": "# JsBox\n[点击预览](http://code.smallcfj.club)\n\n采用Vue+nodejs实现的在线Js编辑器，前后台通过接口进行访问，可以在线编辑、保存、分享Js代码，实现了简单的响应式。\n前台：vue\n后台：nodejs、文件存储\n## 界面预览\n\n深色风格界面（装逼专用(〃'▽'〃)）\n\n![](https://github.com/zycfj/JsBox/blob/master/image/1.png?raw=true)\n\n左边可以收起来，中间的横条可以上下拉动噢\n\n![](https://github.com/zycfj/JsBox/blob/master/image/2.png?raw=true)\n\n为了防止重复提交，搞了个简单的验证码--诗歌验证\n\n![](https://github.com/zycfj/JsBox/blob/master/image/3.png?raw=true)\n## 运行\n下载项目到本地，里面有两个文件夹：\n\nfront-vue：采用vue实现的简单单页应用，访问接口与后台通信\n\nJsBox：项目后台，主要采用文件的方式存储信息\n\n1、进入JsBox文件夹\n```javascript\n\n// 安装项目的依赖包\nnpm install\n\n// 运行\nnpm start\n```\n\n2、进入front-vue文件夹\n```javascript\n// 安装项目的依赖包\nnpm install\n\n// 运行\nnpm run dev\n```\n## 发布\n1、进入front-vue文件夹\n```javascript\n// 编译（压缩）\nnpm run build\n```\n2、将dist文件夹中生成的文件全部拷贝到JsBox/public文件夹中，然后发布该node项目即可\n"
  },
  {
    "path": "front-vue/.babelrc",
    "content": "{\n  \"presets\": [\n    [\"env\", { \"modules\": false }],\n    \"stage-2\"\n  ],\n  \"plugins\": [\"transform-runtime\"],\n  \"comments\": false,\n  \"env\": {\n    \"test\": {\n      \"presets\": [\"env\", \"stage-2\"],\n      \"plugins\": [ \"istanbul\" ]\n    }\n  }\n}\n"
  },
  {
    "path": "front-vue/.editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n"
  },
  {
    "path": "front-vue/.eslintignore",
    "content": "build/*.js\nconfig/*.js\nsrc/assets/*\nsrc/store/*\n"
  },
  {
    "path": "front-vue/.eslintrc.js",
    "content": "// http://eslint.org/docs/user-guide/configuring\n\nmodule.exports = {\n  root: true,\n  parser: 'babel-eslint',\n  parserOptions: {\n    sourceType: 'module'\n  },\n  env: {\n    browser: true,\n  },\n  // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style\n  extends: 'standard',\n  // required to lint *.vue files\n  plugins: [\n    'html'\n  ],\n  // add your custom rules here\n  'rules': {\n    // allow paren-less arrow functions\n    'arrow-parens': 0,\n    // allow async-await\n    'generator-star-spacing': 0,\n    // allow debugger during development\n    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,\n    'no-eval': 0\n  }\n}\n"
  },
  {
    "path": "front-vue/.gitignore",
    "content": ".DS_Store\nnode_modules/\ndist/\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "front-vue/.postcssrc.js",
    "content": "// https://github.com/michael-ciniawsky/postcss-load-config\n\nmodule.exports = {\n  \"plugins\": {\n    // to edit target browsers: use \"browserlist\" field in package.json\n    \"autoprefixer\": {}\n  }\n}\n"
  },
  {
    "path": "front-vue/README.md",
    "content": "# vue-os\n\n> A Vue.js project\n\n## Build Setup\n\n``` bash\n# install dependencies\nnpm install\n\n# serve with hot reload at localhost:8080\nnpm run dev\n\n# build for production with minification\nnpm run build\n\n# build for production and view the bundle analyzer report\nnpm run build --report\n```\n\nFor detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).\n"
  },
  {
    "path": "front-vue/build/build.js",
    "content": "require('./check-versions')()\n\nprocess.env.NODE_ENV = 'production'\n\nvar ora = require('ora')\nvar rm = require('rimraf')\nvar path = require('path')\nvar chalk = require('chalk')\nvar webpack = require('webpack')\nvar config = require('../config/index')\nvar webpackConfig = require('./webpack.prod.conf')\n\nvar spinner = ora('building for production...')\nspinner.start()\n\nrm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {\n  if (err) throw err\n  webpack(webpackConfig, function (err, stats) {\n    spinner.stop()\n    if (err) throw err\n    process.stdout.write(stats.toString({\n      colors: true,\n      modules: false,\n      children: false,\n      chunks: false,\n      chunkModules: false\n    }) + '\\n\\n')\n\n    console.log(chalk.cyan('  Build complete.\\n'))\n    console.log(chalk.yellow(\n      '  Tip: built files are meant to be served over an HTTP server.\\n' +\n      '  Opening index.html over file:// won\\'t work.\\n'\n    ))\n  })\n})\n"
  },
  {
    "path": "front-vue/build/check-versions.js",
    "content": "var chalk = require('chalk')\nvar semver = require('semver')\nvar packageConfig = require('../package.json')\nvar shell = require('shelljs')\nfunction exec (cmd) {\n  return require('child_process').execSync(cmd).toString().trim()\n}\n\nvar versionRequirements = [\n  {\n    name: 'node',\n    currentVersion: semver.clean(process.version),\n    versionRequirement: packageConfig.engines.node\n  },\n]\n\nif (shell.which('npm')) {\n  versionRequirements.push({\n    name: 'npm',\n    currentVersion: exec('npm --version'),\n    versionRequirement: packageConfig.engines.npm\n  })\n}\n\nmodule.exports = function () {\n  var warnings = []\n  for (var i = 0; i < versionRequirements.length; i++) {\n    var mod = versionRequirements[i]\n    if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {\n      warnings.push(mod.name + ': ' +\n        chalk.red(mod.currentVersion) + ' should be ' +\n        chalk.green(mod.versionRequirement)\n      )\n    }\n  }\n\n  if (warnings.length) {\n    console.log('')\n    console.log(chalk.yellow('To use this template, you must update following to modules:'))\n    console.log()\n    for (var i = 0; i < warnings.length; i++) {\n      var warning = warnings[i]\n      console.log('  ' + warning)\n    }\n    console.log()\n    process.exit(1)\n  }\n}\n"
  },
  {
    "path": "front-vue/build/dev-client.js",
    "content": "/* eslint-disable */\nrequire('eventsource-polyfill')\nvar hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')\n\nhotClient.subscribe(function (event) {\n  if (event.action === 'reload') {\n    window.location.reload()\n  }\n})\n"
  },
  {
    "path": "front-vue/build/dev-server.js",
    "content": "require('./check-versions')()\n\nvar config = require('../config/index')\nif (!process.env.NODE_ENV) {\n  process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)\n}\n\nvar opn = require('opn')\nvar path = require('path')\nvar express = require('express')\nvar webpack = require('webpack')\nvar proxyMiddleware = require('http-proxy-middleware')\nvar webpackConfig = require('./webpack.dev.conf')\n\n// default port where dev server listens for incoming traffic\nvar port = process.env.PORT || config.dev.port\n// automatically open browser, if not set will be false\nvar autoOpenBrowser = !!config.dev.autoOpenBrowser\n// Define HTTP proxies to your custom API backend\n// https://github.com/chimurai/http-proxy-middleware\nvar proxyTable = config.dev.proxyTable\n\nvar app = express()\nvar compiler = webpack(webpackConfig)\n\nvar devMiddleware = require('webpack-dev-middleware')(compiler, {\n  publicPath: webpackConfig.output.publicPath,\n  quiet: true\n})\n\nvar hotMiddleware = require('webpack-hot-middleware')(compiler, {\n  log: () => {}\n})\n// force page reload when html-webpack-plugin template changes\ncompiler.plugin('compilation', function (compilation) {\n  compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {\n    hotMiddleware.publish({ action: 'reload' })\n    cb()\n  })\n})\n\n// proxy api requests\nObject.keys(proxyTable).forEach(function (context) {\n  var options = proxyTable[context]\n  if (typeof options === 'string') {\n    options = { target: options }\n  }\n  app.use(proxyMiddleware(options.filter || context, options))\n})\n\n// handle fallback for HTML5 history API\napp.use(require('connect-history-api-fallback')())\n\n// serve webpack bundle output\napp.use(devMiddleware)\n\n// enable hot-reload and state-preserving\n// compilation error display\napp.use(hotMiddleware)\n\n// serve pure static assets\nvar staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)\napp.use(staticPath, express.static('./static'))\n\nvar uri = 'http://localhost:' + port\n\nvar _resolve\nvar readyPromise = new Promise(resolve => {\n  _resolve = resolve\n})\n\nconsole.log('> Starting dev server...')\ndevMiddleware.waitUntilValid(() => {\n  console.log('> Listening at ' + uri + '\\n')\n  // when env is testing, don't need open it\n  if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {\n    opn(uri)\n  }\n  _resolve()\n})\n\nvar server = app.listen(port)\n\nmodule.exports = {\n  ready: readyPromise,\n  close: () => {\n    server.close()\n  }\n}\n"
  },
  {
    "path": "front-vue/build/utils.js",
    "content": "var path = require('path')\nvar config = require('../config/index')\nvar ExtractTextPlugin = require('extract-text-webpack-plugin')\n\nexports.assetsPath = function (_path) {\n  var assetsSubDirectory = process.env.NODE_ENV === 'production'\n    ? config.build.assetsSubDirectory\n    : config.dev.assetsSubDirectory\n  return path.posix.join(assetsSubDirectory, _path)\n}\n\nexports.cssLoaders = function (options) {\n  options = options || {}\n\n  var cssLoader = {\n    loader: 'css-loader',\n    options: {\n      minimize: process.env.NODE_ENV === 'production',\n      sourceMap: options.sourceMap\n    }\n  }\n\n  // generate loader string to be used with extract text plugin\n  function generateLoaders (loader, loaderOptions) {\n    var loaders = [cssLoader]\n    if (loader) {\n      loaders.push({\n        loader: loader + '-loader',\n        options: Object.assign({}, loaderOptions, {\n          sourceMap: options.sourceMap\n        })\n      })\n    }\n\n    // Extract CSS when that option is specified\n    // (which is the case during production build)\n    if (options.extract) {\n      return ExtractTextPlugin.extract({\n        use: loaders,\n        fallback: 'vue-style-loader'\n      })\n    } else {\n      return ['vue-style-loader'].concat(loaders)\n    }\n  }\n\n  // https://vue-loader.vuejs.org/en/configurations/extract-css.html\n  return {\n    css: generateLoaders(),\n    postcss: generateLoaders(),\n    less: generateLoaders('less'),\n    sass: generateLoaders('sass', { indentedSyntax: true }),\n    scss: generateLoaders('sass'),\n    stylus: generateLoaders('stylus'),\n    styl: generateLoaders('stylus')\n  }\n}\n\n// Generate loaders for standalone style files (outside of .vue)\nexports.styleLoaders = function (options) {\n  var output = []\n  var loaders = exports.cssLoaders(options)\n  for (var extension in loaders) {\n    var loader = loaders[extension]\n    output.push({\n      test: new RegExp('\\\\.' + extension + '$'),\n      use: loader\n    })\n  }\n  return output\n}\n"
  },
  {
    "path": "front-vue/build/vue-loader.conf.js",
    "content": "var utils = require('./utils')\nvar config = require('../config/index')\nvar isProduction = process.env.NODE_ENV === 'production'\n\nmodule.exports = {\n  loaders: utils.cssLoaders({\n    sourceMap: isProduction\n      ? config.build.productionSourceMap\n      : config.dev.cssSourceMap,\n    extract: isProduction\n  })\n}\n"
  },
  {
    "path": "front-vue/build/webpack.base.conf.js",
    "content": "var path = require('path')\nvar utils = require('./utils')\nvar config = require('../config/index')\nvar vueLoaderConfig = require('./vue-loader.conf')\n\nfunction resolve (dir) {\n  return path.join(__dirname, '..', dir)\n}\n\nmodule.exports = {\n  entry: {\n    app: './src/main.js'\n  },\n  output: {\n    path: config.build.assetsRoot,\n    filename: '[name].js',\n    publicPath: process.env.NODE_ENV === 'production'\n      ? config.build.assetsPublicPath\n      : config.dev.assetsPublicPath\n  },\n  resolve: {\n    extensions: ['.js', '.vue', '.json'],\n    alias: {\n      'vue$': 'vue/dist/vue.esm.js',\n      '@': resolve('src')\n    }\n  },\n  module: {\n    rules: [\n      {\n        test: /\\.(js|vue)$/,\n        loader: 'eslint-loader',\n        enforce: 'pre',\n        include: [resolve('src'), resolve('test')],\n        options: {\n          formatter: require('eslint-friendly-formatter')\n        }\n      },\n      {\n        test: /\\.vue$/,\n        loader: 'vue-loader',\n        options: vueLoaderConfig\n      },\n      {\n        test: /\\.js$/,\n        loader: 'babel-loader',\n        include: [resolve('src'), resolve('test')]\n      },\n      {\n        test: /\\.(png|jpe?g|gif|svg)(\\?.*)?$/,\n        loader: 'url-loader',\n        options: {\n          limit: 10000,\n          name: utils.assetsPath('img/[name].[hash:7].[ext]')\n        }\n      },\n      {\n        test: /\\.(woff2?|eot|ttf|otf)(\\?.*)?$/,\n        loader: 'url-loader',\n        options: {\n          limit: 10000,\n          name: utils.assetsPath('fonts/[name].[hash:7].[ext]')\n        }\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "front-vue/build/webpack.dev.conf.js",
    "content": "var utils = require('./utils')\nvar webpack = require('webpack')\nvar config = require('../config/index')\nvar merge = require('webpack-merge')\nvar baseWebpackConfig = require('./webpack.base.conf')\nvar HtmlWebpackPlugin = require('html-webpack-plugin')\nvar FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')\n\n// add hot-reload related code to entry chunks\nObject.keys(baseWebpackConfig.entry).forEach(function (name) {\n  baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])\n})\n\nmodule.exports = merge(baseWebpackConfig, {\n  module: {\n    rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })\n  },\n  // cheap-module-eval-source-map is faster for development\n  devtool: '#cheap-module-eval-source-map',\n  plugins: [\n    new webpack.DefinePlugin({\n      'process.env': config.dev.env\n    }),\n    // https://github.com/glenjamin/webpack-hot-middleware#installation--usage\n    new webpack.HotModuleReplacementPlugin(),\n    new webpack.NoEmitOnErrorsPlugin(),\n    // https://github.com/ampedandwired/html-webpack-plugin\n    new HtmlWebpackPlugin({\n      filename: 'index.html',\n      template: 'index.html',\n      inject: true\n    }),\n    new FriendlyErrorsPlugin()\n  ]\n})\n"
  },
  {
    "path": "front-vue/build/webpack.prod.conf.js",
    "content": "var path = require('path')\nvar utils = require('./utils')\nvar webpack = require('webpack')\nvar config = require('../config/index')\nvar merge = require('webpack-merge')\nvar baseWebpackConfig = require('./webpack.base.conf')\nvar CopyWebpackPlugin = require('copy-webpack-plugin')\nvar HtmlWebpackPlugin = require('html-webpack-plugin')\nvar ExtractTextPlugin = require('extract-text-webpack-plugin')\nvar OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')\n\nvar env = config.build.env\n\nvar webpackConfig = merge(baseWebpackConfig, {\n  module: {\n    rules: utils.styleLoaders({\n      sourceMap: config.build.productionSourceMap,\n      extract: true\n    })\n  },\n  devtool: config.build.productionSourceMap ? '#source-map' : false,\n  output: {\n    path: config.build.assetsRoot,\n    filename: utils.assetsPath('js/[name].[chunkhash].js'),\n    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')\n  },\n  plugins: [\n    // http://vuejs.github.io/vue-loader/en/workflow/production.html\n    new webpack.DefinePlugin({\n      'process.env': env\n    }),\n    new webpack.optimize.UglifyJsPlugin({\n      compress: {\n        warnings: false\n      },\n      sourceMap: true\n    }),\n    // extract css into its own file\n    new ExtractTextPlugin({\n      filename: utils.assetsPath('css/[name].[contenthash].css')\n    }),\n    // Compress extracted CSS. We are using this plugin so that possible\n    // duplicated CSS from different components can be deduped.\n    new OptimizeCSSPlugin({\n      cssProcessorOptions: {\n        safe: true\n      }\n    }),\n    // generate dist index.html with correct asset hash for caching.\n    // you can customize output by editing /index.html\n    // see https://github.com/ampedandwired/html-webpack-plugin\n    new HtmlWebpackPlugin({\n      filename: config.build.index,\n      template: 'index.html',\n      inject: true,\n      minify: {\n        removeComments: true,\n        collapseWhitespace: true,\n        removeAttributeQuotes: true\n        // more options:\n        // https://github.com/kangax/html-minifier#options-quick-reference\n      },\n      // necessary to consistently work with multiple chunks via CommonsChunkPlugin\n      chunksSortMode: 'dependency'\n    }),\n    // split vendor js into its own file\n    new webpack.optimize.CommonsChunkPlugin({\n      name: 'vendor',\n      minChunks: function (module, count) {\n        // any required modules inside node_modules are extracted to vendor\n        return (\n          module.resource &&\n          /\\.js$/.test(module.resource) &&\n          module.resource.indexOf(\n            path.join(__dirname, '../node_modules')\n          ) === 0\n        )\n      }\n    }),\n    // extract webpack runtime and module manifest to its own file in order to\n    // prevent vendor hash from being updated whenever app bundle is updated\n    new webpack.optimize.CommonsChunkPlugin({\n      name: 'manifest',\n      chunks: ['vendor']\n    }),\n    // copy custom static assets\n    new CopyWebpackPlugin([\n      {\n        from: path.resolve(__dirname, '../static'),\n        to: config.build.assetsSubDirectory,\n        ignore: ['.*']\n      }\n    ])\n  ]\n})\n\nif (config.build.productionGzip) {\n  var CompressionWebpackPlugin = require('compression-webpack-plugin')\n\n  webpackConfig.plugins.push(\n    new CompressionWebpackPlugin({\n      asset: '[path].gz[query]',\n      algorithm: 'gzip',\n      test: new RegExp(\n        '\\\\.(' +\n        config.build.productionGzipExtensions.join('|') +\n        ')$'\n      ),\n      threshold: 10240,\n      minRatio: 0.8\n    })\n  )\n}\n\nif (config.build.bundleAnalyzerReport) {\n  var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin\n  webpackConfig.plugins.push(new BundleAnalyzerPlugin())\n}\n\nmodule.exports = webpackConfig\n"
  },
  {
    "path": "front-vue/config/dev.env.js",
    "content": "var merge = require('webpack-merge')\nvar prodEnv = require('./prod.env')\n\nmodule.exports = merge(prodEnv, {\n  NODE_ENV: '\"development\"'\n})\n"
  },
  {
    "path": "front-vue/config/index.js",
    "content": "// see http://vuejs-templates.github.io/webpack for documentation.\nvar path = require('path')\n\nmodule.exports = {\n  build: {\n    env: require('./prod.env'),\n    index: path.resolve(__dirname, '../dist/index.html'),\n    assetsRoot: path.resolve(__dirname, '../dist'),\n    assetsSubDirectory: 'static',\n    assetsPublicPath: '/',\n    productionSourceMap: false,\n    // Gzip off by default as many popular static hosts such as\n    // Surge or Netlify already gzip all static assets for you.\n    // Before setting to `true`, make sure to:\n    // npm install --save-dev compression-webpack-plugin\n    productionGzip: false,\n    productionGzipExtensions: ['js', 'css'],\n    // Run the build command with an extra argument to\n    // View the bundle analyzer report after build finishes:\n    // `npm run build --report`\n    // Set to `true` or `false` to always turn it on or off\n    bundleAnalyzerReport: process.env.npm_config_report\n  },\n  dev: {\n    env: require('./dev.env'),\n    port: 3000,\n    autoOpenBrowser: true,\n    assetsSubDirectory: 'static',\n    assetsPublicPath: '/',\n    proxyTable: {},\n    // CSS Sourcemaps off by default because relative paths are \"buggy\"\n    // with this option, according to the CSS-Loader README\n    // (https://github.com/webpack/css-loader#sourcemaps)\n    // In our experience, they generally work as expected,\n    // just be aware of this issue when enabling this option.\n    cssSourceMap: false\n  }\n}\n"
  },
  {
    "path": "front-vue/config/prod.env.js",
    "content": "module.exports = {\n  NODE_ENV: '\"production\"'\n}\n"
  },
  {
    "path": "front-vue/index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <title>JsBox</title>\n  </head>\n  <body>\n    <div id=\"app\"></div>\n    <!-- built files will be auto injected -->\n  </body>\n</html>\n"
  },
  {
    "path": "front-vue/package.json",
    "content": "{\n  \"name\": \"vue-os\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A Vue.js project\",\n  \"author\": \"qwer <676080017@qq.com>\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"node build/dev-server.js\",\n    \"start\": \"node build/dev-server.js\",\n    \"build\": \"node build/build.js\",\n    \"lint\": \"eslint --ext .js,.vue src\"\n  },\n  \"dependencies\": {\n    \"axios\": \"^0.16.1\",\n    \"vue\": \"^2.2.6\",\n    \"vue-router\": \"^2.3.1\",\n    \"vuex\": \"^2.3.1\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^6.7.2\",\n    \"babel-core\": \"^6.22.1\",\n    \"babel-eslint\": \"^7.1.1\",\n    \"babel-loader\": \"^6.2.10\",\n    \"babel-plugin-transform-runtime\": \"^6.22.0\",\n    \"babel-preset-env\": \"^1.3.2\",\n    \"babel-preset-stage-2\": \"^6.22.0\",\n    \"babel-register\": \"^6.22.0\",\n    \"chalk\": \"^1.1.3\",\n    \"connect-history-api-fallback\": \"^1.3.0\",\n    \"copy-webpack-plugin\": \"^4.0.1\",\n    \"css-loader\": \"^0.28.0\",\n    \"eslint\": \"^3.19.0\",\n    \"eslint-config-standard\": \"^6.2.1\",\n    \"eslint-friendly-formatter\": \"^2.0.7\",\n    \"eslint-loader\": \"^1.7.1\",\n    \"eslint-plugin-html\": \"^2.0.0\",\n    \"eslint-plugin-promise\": \"^3.4.0\",\n    \"eslint-plugin-standard\": \"^2.0.1\",\n    \"eventsource-polyfill\": \"^0.9.6\",\n    \"express\": \"^4.14.1\",\n    \"extract-text-webpack-plugin\": \"^2.0.0\",\n    \"file-loader\": \"^0.11.1\",\n    \"friendly-errors-webpack-plugin\": \"^1.1.3\",\n    \"html-webpack-plugin\": \"^2.28.0\",\n    \"http-proxy-middleware\": \"^0.17.3\",\n    \"opn\": \"^4.0.2\",\n    \"optimize-css-assets-webpack-plugin\": \"^1.3.0\",\n    \"ora\": \"^1.2.0\",\n    \"rimraf\": \"^2.6.0\",\n    \"semver\": \"^5.3.0\",\n    \"shelljs\": \"^0.7.6\",\n    \"url-loader\": \"^0.5.8\",\n    \"vue-loader\": \"^11.3.4\",\n    \"vue-style-loader\": \"^2.0.5\",\n    \"vue-template-compiler\": \"^2.2.6\",\n    \"webpack\": \"^2.3.3\",\n    \"webpack-bundle-analyzer\": \"^2.2.1\",\n    \"webpack-dev-middleware\": \"^1.10.0\",\n    \"webpack-hot-middleware\": \"^2.18.0\",\n    \"webpack-merge\": \"^4.1.0\"\n  },\n  \"engines\": {\n    \"node\": \">= 4.0.0\",\n    \"npm\": \">= 3.0.0\"\n  },\n  \"browserslist\": [\n    \"> 1%\",\n    \"last 2 versions\",\n    \"not ie <= 8\"\n  ]\n}\n"
  },
  {
    "path": "front-vue/src/App.vue",
    "content": "<template>\n  <div id=\"app\">\n    <router-view></router-view>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'app'\n}\n</script>\n\n<style>\n  @import \"./assets/style/normalize.css\";\n  body, html {\n    margin: 0;\n    height: 100%;\n  }\n  #app {\n    font-family: Helvetica, Arial, sans-serif;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    color: #2c3e50;\n    height: 100%;\n  }\n</style>\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/comment/comment.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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    if (close == -1 && start != end) {\n      endLine = self.getLine(--end);\n      close = endLine.indexOf(endString);\n    }\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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/comment/continuecomment.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 modes = [\"clike\", \"css\", \"javascript\"];\n\n  for (var i = 0; i < modes.length; ++i)\n    CodeMirror.extendMode(modes[i], {blockCommentContinue: \" * \"});\n\n  function continueComment(cm) {\n    if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n    var ranges = cm.listSelections(), mode, inserts = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var pos = ranges[i].head, token = cm.getTokenAt(pos);\n      if (token.type != \"comment\") return CodeMirror.Pass;\n      var modeHere = CodeMirror.innerMode(cm.getMode(), token.state).mode;\n      if (!mode) mode = modeHere;\n      else if (mode != modeHere) return CodeMirror.Pass;\n\n      var insert = null;\n      if (mode.blockCommentStart && mode.blockCommentContinue) {\n        var end = token.string.indexOf(mode.blockCommentEnd);\n        var full = cm.getRange(CodeMirror.Pos(pos.line, 0), CodeMirror.Pos(pos.line, token.end)), found;\n        if (end != -1 && end == token.string.length - mode.blockCommentEnd.length && pos.ch >= end) {\n          // Comment ended, don't continue it\n        } else if (token.string.indexOf(mode.blockCommentStart) == 0) {\n          insert = full.slice(0, token.start);\n          if (!/^\\s*$/.test(insert)) {\n            insert = \"\";\n            for (var j = 0; j < token.start; ++j) insert += \" \";\n          }\n        } else if ((found = full.indexOf(mode.blockCommentContinue)) != -1 &&\n                   found + mode.blockCommentContinue.length > token.start &&\n                   /^\\s*$/.test(full.slice(0, found))) {\n          insert = full.slice(0, found);\n        }\n        if (insert != null) insert += mode.blockCommentContinue;\n      }\n      if (insert == null && mode.lineComment && continueLineCommentEnabled(cm)) {\n        var line = cm.getLine(pos.line), found = line.indexOf(mode.lineComment);\n        if (found > -1) {\n          insert = line.slice(0, found);\n          if (/\\S/.test(insert)) insert = null;\n          else insert += mode.lineComment + line.slice(found + mode.lineComment.length).match(/^\\s*/)[0];\n        }\n      }\n      if (insert == null) return CodeMirror.Pass;\n      inserts[i] = \"\\n\" + insert;\n    }\n\n    cm.operation(function() {\n      for (var i = ranges.length - 1; i >= 0; i--)\n        cm.replaceRange(inserts[i], ranges[i].from(), ranges[i].to(), \"+insert\");\n    });\n  }\n\n  function continueLineCommentEnabled(cm) {\n    var opt = cm.getOption(\"continueComments\");\n    if (opt && typeof opt == \"object\")\n      return opt.continueLineComment !== false;\n    return true;\n  }\n\n  CodeMirror.defineOption(\"continueComments\", null, function(cm, val, prev) {\n    if (prev && prev != CodeMirror.Init)\n      cm.removeKeyMap(\"continueComment\");\n    if (val) {\n      var key = \"Enter\";\n      if (typeof val == \"string\")\n        key = val;\n      else if (typeof val == \"object\" && val.key)\n        key = val.key;\n      var map = {name: \"continueComment\"};\n      map[key] = continueComment;\n      cm.addKeyMap(map);\n    }\n  });\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/dialog/dialog.css",
    "content": ".CodeMirror-dialog {\n  position: absolute;\n  left: 0; right: 0;\n  background: inherit;\n  z-index: 15;\n  padding: .1em .8em;\n  overflow: hidden;\n  color: inherit;\n}\n\n.CodeMirror-dialog-top {\n  border-bottom: 1px solid #eee;\n  top: 0;\n}\n\n.CodeMirror-dialog-bottom {\n  border-top: 1px solid #eee;\n  bottom: 0;\n}\n\n.CodeMirror-dialog input {\n  border: none;\n  outline: none;\n  background: transparent;\n  width: 20em;\n  color: inherit;\n  font-family: monospace;\n}\n\n.CodeMirror-dialog button {\n  font-size: 70%;\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/dialog/dialog.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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    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        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      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      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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/display/autorefresh.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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.defineOption(\"autoRefresh\", false, function(cm, val) {\n    if (cm.state.autoRefresh) {\n      stopListening(cm, cm.state.autoRefresh)\n      cm.state.autoRefresh = null\n    }\n    if (val && cm.display.wrapper.offsetHeight == 0)\n      startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250})\n  })\n\n  function startListening(cm, state) {\n    function check() {\n      if (cm.display.wrapper.offsetHeight) {\n        stopListening(cm, state)\n        if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight)\n          cm.refresh()\n      } else {\n        state.timeout = setTimeout(check, state.delay)\n      }\n    }\n    state.timeout = setTimeout(check, state.delay)\n    state.hurry = function() {\n      clearTimeout(state.timeout)\n      state.timeout = setTimeout(check, 50)\n    }\n    CodeMirror.on(window, \"mouseup\", state.hurry)\n    CodeMirror.on(window, \"keyup\", state.hurry)\n  }\n\n  function stopListening(_cm, state) {\n    clearTimeout(state.timeout)\n    CodeMirror.off(window, \"mouseup\", state.hurry)\n    CodeMirror.off(window, \"keyup\", state.hurry)\n  }\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/display/fullscreen.css",
    "content": ".CodeMirror-fullscreen {\n  position: fixed;\n  top: 0; left: 0; right: 0; bottom: 0;\n  height: auto;\n  z-index: 9;\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/display/fullscreen.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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.defineOption(\"fullScreen\", false, function(cm, val, old) {\n    if (old == CodeMirror.Init) old = false;\n    if (!old == !val) return;\n    if (val) setFullscreen(cm);\n    else setNormal(cm);\n  });\n\n  function setFullscreen(cm) {\n    var wrap = cm.getWrapperElement();\n    cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset,\n                                  width: wrap.style.width, height: wrap.style.height};\n    wrap.style.width = \"\";\n    wrap.style.height = \"auto\";\n    wrap.className += \" CodeMirror-fullscreen\";\n    document.documentElement.style.overflow = \"hidden\";\n    cm.refresh();\n  }\n\n  function setNormal(cm) {\n    var wrap = cm.getWrapperElement();\n    wrap.className = wrap.className.replace(/\\s*CodeMirror-fullscreen\\b/, \"\");\n    document.documentElement.style.overflow = \"\";\n    var info = cm.state.fullScreenRestore;\n    wrap.style.width = info.width; wrap.style.height = info.height;\n    window.scrollTo(info.scrollLeft, info.scrollTop);\n    cm.refresh();\n  }\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/display/panel.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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  CodeMirror.defineExtension(\"addPanel\", function(node, options) {\n    options = options || {};\n\n    if (!this.state.panels) initPanels(this);\n\n    var info = this.state.panels;\n    var wrapper = info.wrapper;\n    var cmWrapper = this.getWrapperElement();\n\n    if (options.after instanceof Panel && !options.after.cleared) {\n      wrapper.insertBefore(node, options.before.node.nextSibling);\n    } else if (options.before instanceof Panel && !options.before.cleared) {\n      wrapper.insertBefore(node, options.before.node);\n    } else if (options.replace instanceof Panel && !options.replace.cleared) {\n      wrapper.insertBefore(node, options.replace.node);\n      options.replace.clear();\n    } else if (options.position == \"bottom\") {\n      wrapper.appendChild(node);\n    } else if (options.position == \"before-bottom\") {\n      wrapper.insertBefore(node, cmWrapper.nextSibling);\n    } else if (options.position == \"after-top\") {\n      wrapper.insertBefore(node, cmWrapper);\n    } else {\n      wrapper.insertBefore(node, wrapper.firstChild);\n    }\n\n    var height = (options && options.height) || node.offsetHeight;\n    this._setSize(null, info.heightLeft -= height);\n    info.panels++;\n    if (options.stable && isAtTop(this, node))\n      this.scrollTo(null, this.getScrollInfo().top + height)\n\n    return new Panel(this, node, options, height);\n  });\n\n  function Panel(cm, node, options, height) {\n    this.cm = cm;\n    this.node = node;\n    this.options = options;\n    this.height = height;\n    this.cleared = false;\n  }\n\n  Panel.prototype.clear = function() {\n    if (this.cleared) return;\n    this.cleared = true;\n    var info = this.cm.state.panels;\n    this.cm._setSize(null, info.heightLeft += this.height);\n    if (this.options.stable && isAtTop(this.cm, this.node))\n      this.cm.scrollTo(null, this.cm.getScrollInfo().top - this.height)\n    info.wrapper.removeChild(this.node);\n    if (--info.panels == 0) removePanels(this.cm);\n  };\n\n  Panel.prototype.changed = function(height) {\n    var newHeight = height == null ? this.node.offsetHeight : height;\n    var info = this.cm.state.panels;\n    this.cm._setSize(null, info.heightLeft -= (newHeight - this.height));\n    this.height = newHeight;\n  };\n\n  function initPanels(cm) {\n    var wrap = cm.getWrapperElement();\n    var style = window.getComputedStyle ? window.getComputedStyle(wrap) : wrap.currentStyle;\n    var height = parseInt(style.height);\n    var info = cm.state.panels = {\n      setHeight: wrap.style.height,\n      heightLeft: height,\n      panels: 0,\n      wrapper: document.createElement(\"div\")\n    };\n    wrap.parentNode.insertBefore(info.wrapper, wrap);\n    var hasFocus = cm.hasFocus();\n    info.wrapper.appendChild(wrap);\n    if (hasFocus) cm.focus();\n\n    cm._setSize = cm.setSize;\n    if (height != null) cm.setSize = function(width, newHeight) {\n      if (newHeight == null) return this._setSize(width, newHeight);\n      info.setHeight = newHeight;\n      if (typeof newHeight != \"number\") {\n        var px = /^(\\d+\\.?\\d*)px$/.exec(newHeight);\n        if (px) {\n          newHeight = Number(px[1]);\n        } else {\n          info.wrapper.style.height = newHeight;\n          newHeight = info.wrapper.offsetHeight;\n          info.wrapper.style.height = \"\";\n        }\n      }\n      cm._setSize(width, info.heightLeft += (newHeight - height));\n      height = newHeight;\n    };\n  }\n\n  function removePanels(cm) {\n    var info = cm.state.panels;\n    cm.state.panels = null;\n\n    var wrap = cm.getWrapperElement();\n    info.wrapper.parentNode.replaceChild(wrap, info.wrapper);\n    wrap.style.height = info.setHeight;\n    cm.setSize = cm._setSize;\n    cm.setSize();\n  }\n\n  function isAtTop(cm, dom) {\n    for (var sibling = dom.nextSibling; sibling; sibling = sibling.nextSibling)\n      if (sibling == cm.getWrapperElement()) return true\n    return false\n  }\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/display/placeholder.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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  CodeMirror.defineOption(\"placeholder\", \"\", function(cm, val, old) {\n    var prev = old && old != CodeMirror.Init;\n    if (val && !prev) {\n      cm.on(\"blur\", onBlur);\n      cm.on(\"change\", onChange);\n      cm.on(\"swapDoc\", onChange);\n      onChange(cm);\n    } else if (!val && prev) {\n      cm.off(\"blur\", onBlur);\n      cm.off(\"change\", onChange);\n      cm.off(\"swapDoc\", onChange);\n      clearPlaceholder(cm);\n      var wrapper = cm.getWrapperElement();\n      wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\");\n    }\n\n    if (val && !cm.hasFocus()) onBlur(cm);\n  });\n\n  function clearPlaceholder(cm) {\n    if (cm.state.placeholder) {\n      cm.state.placeholder.parentNode.removeChild(cm.state.placeholder);\n      cm.state.placeholder = null;\n    }\n  }\n  function setPlaceholder(cm) {\n    clearPlaceholder(cm);\n    var elt = cm.state.placeholder = document.createElement(\"pre\");\n    elt.style.cssText = \"height: 0; overflow: visible\";\n    elt.className = \"CodeMirror-placeholder\";\n    var placeHolder = cm.getOption(\"placeholder\")\n    if (typeof placeHolder == \"string\") placeHolder = document.createTextNode(placeHolder)\n    elt.appendChild(placeHolder)\n    cm.display.lineSpace.insertBefore(elt, cm.display.lineSpace.firstChild);\n  }\n\n  function onBlur(cm) {\n    if (isEmpty(cm)) setPlaceholder(cm);\n  }\n  function onChange(cm) {\n    var wrapper = cm.getWrapperElement(), empty = isEmpty(cm);\n    wrapper.className = wrapper.className.replace(\" CodeMirror-empty\", \"\") + (empty ? \" CodeMirror-empty\" : \"\");\n\n    if (empty) setPlaceholder(cm);\n    else clearPlaceholder(cm);\n  }\n\n  function isEmpty(cm) {\n    return (cm.lineCount() === 1) && (cm.getLine(0) === \"\");\n  }\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/display/rulers.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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.defineOption(\"rulers\", false, function(cm, val) {\n    if (cm.state.rulerDiv) {\n      cm.state.rulerDiv.parentElement.removeChild(cm.state.rulerDiv)\n      cm.state.rulerDiv = null\n      cm.off(\"refresh\", drawRulers)\n    }\n    if (val && val.length) {\n      cm.state.rulerDiv = cm.display.lineSpace.parentElement.insertBefore(document.createElement(\"div\"), cm.display.lineSpace)\n      cm.state.rulerDiv.className = \"CodeMirror-rulers\"\n      drawRulers(cm)\n      cm.on(\"refresh\", drawRulers)\n    }\n  });\n\n  function drawRulers(cm) {\n    cm.state.rulerDiv.textContent = \"\"\n    var val = cm.getOption(\"rulers\");\n    var cw = cm.defaultCharWidth();\n    var left = cm.charCoords(CodeMirror.Pos(cm.firstLine(), 0), \"div\").left;\n    cm.state.rulerDiv.style.minHeight = (cm.display.scroller.offsetHeight + 30) + \"px\";\n    for (var i = 0; i < val.length; i++) {\n      var elt = document.createElement(\"div\");\n      elt.className = \"CodeMirror-ruler\";\n      var col, conf = val[i];\n      if (typeof conf == \"number\") {\n        col = conf;\n      } else {\n        col = conf.column;\n        if (conf.className) elt.className += \" \" + conf.className;\n        if (conf.color) elt.style.borderColor = conf.color;\n        if (conf.lineStyle) elt.style.borderLeftStyle = conf.lineStyle;\n        if (conf.width) elt.style.borderLeftWidth = conf.width;\n      }\n      elt.style.left = (left + col * cw) + \"px\";\n      cm.state.rulerDiv.appendChild(elt)\n    }\n  }\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/edit/closebrackets.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 defaults = {\n    pairs: \"()[]{}''\\\"\\\"\",\n    triples: \"\",\n    explode: \"[]{}\"\n  };\n\n  var Pos = CodeMirror.Pos;\n\n  CodeMirror.defineOption(\"autoCloseBrackets\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      cm.removeKeyMap(keyMap);\n      cm.state.closeBrackets = null;\n    }\n    if (val) {\n      cm.state.closeBrackets = val;\n      cm.addKeyMap(keyMap);\n    }\n  });\n\n  function getOption(conf, name) {\n    if (name == \"pairs\" && typeof conf == \"string\") return conf;\n    if (typeof conf == \"object\" && conf[name] != null) return conf[name];\n    return defaults[name];\n  }\n\n  var bind = defaults.pairs + \"`\";\n  var keyMap = {Backspace: handleBackspace, Enter: handleEnter};\n  for (var i = 0; i < bind.length; i++)\n    keyMap[\"'\" + bind.charAt(i) + \"'\"] = handler(bind.charAt(i));\n\n  function handler(ch) {\n    return function(cm) { return handleChar(cm, ch); };\n  }\n\n  function getConfig(cm) {\n    var deflt = cm.state.closeBrackets;\n    if (!deflt || deflt.override) return deflt;\n    var mode = cm.getModeAt(cm.getCursor());\n    return mode.closeBrackets || deflt;\n  }\n\n  function handleBackspace(cm) {\n    var conf = getConfig(cm);\n    if (!conf || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n    var pairs = getOption(conf, \"pairs\");\n    var ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++) {\n      if (!ranges[i].empty()) return CodeMirror.Pass;\n      var around = charsAround(cm, ranges[i].head);\n      if (!around || pairs.indexOf(around) % 2 != 0) return CodeMirror.Pass;\n    }\n    for (var i = ranges.length - 1; i >= 0; i--) {\n      var cur = ranges[i].head;\n      cm.replaceRange(\"\", Pos(cur.line, cur.ch - 1), Pos(cur.line, cur.ch + 1), \"+delete\");\n    }\n  }\n\n  function handleEnter(cm) {\n    var conf = getConfig(cm);\n    var explode = conf && getOption(conf, \"explode\");\n    if (!explode || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n    var ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++) {\n      if (!ranges[i].empty()) return CodeMirror.Pass;\n      var around = charsAround(cm, ranges[i].head);\n      if (!around || explode.indexOf(around) % 2 != 0) return CodeMirror.Pass;\n    }\n    cm.operation(function() {\n      cm.replaceSelection(\"\\n\\n\", null);\n      cm.execCommand(\"goCharLeft\");\n      ranges = cm.listSelections();\n      for (var i = 0; i < ranges.length; i++) {\n        var line = ranges[i].head.line;\n        cm.indentLine(line, null, true);\n        cm.indentLine(line + 1, null, true);\n      }\n    });\n  }\n\n  function contractSelection(sel) {\n    var inverted = CodeMirror.cmpPos(sel.anchor, sel.head) > 0;\n    return {anchor: new Pos(sel.anchor.line, sel.anchor.ch + (inverted ? -1 : 1)),\n            head: new Pos(sel.head.line, sel.head.ch + (inverted ? 1 : -1))};\n  }\n\n  function handleChar(cm, ch) {\n    var conf = getConfig(cm);\n    if (!conf || cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n\n    var pairs = getOption(conf, \"pairs\");\n    var pos = pairs.indexOf(ch);\n    if (pos == -1) return CodeMirror.Pass;\n    var triples = getOption(conf, \"triples\");\n\n    var identical = pairs.charAt(pos + 1) == ch;\n    var ranges = cm.listSelections();\n    var opening = pos % 2 == 0;\n\n    var type;\n    for (var i = 0; i < ranges.length; i++) {\n      var range = ranges[i], cur = range.head, curType;\n      var next = cm.getRange(cur, Pos(cur.line, cur.ch + 1));\n      if (opening && !range.empty()) {\n        curType = \"surround\";\n      } else if ((identical || !opening) && next == ch) {\n        if (identical && stringStartsAfter(cm, cur))\n          curType = \"both\";\n        else if (triples.indexOf(ch) >= 0 && cm.getRange(cur, Pos(cur.line, cur.ch + 3)) == ch + ch + ch)\n          curType = \"skipThree\";\n        else\n          curType = \"skip\";\n      } else if (identical && cur.ch > 1 && triples.indexOf(ch) >= 0 &&\n                 cm.getRange(Pos(cur.line, cur.ch - 2), cur) == ch + ch &&\n                 (cur.ch <= 2 || cm.getRange(Pos(cur.line, cur.ch - 3), Pos(cur.line, cur.ch - 2)) != ch)) {\n        curType = \"addFour\";\n      } else if (identical) {\n        if (!CodeMirror.isWordChar(next) && enteringString(cm, cur, ch)) curType = \"both\";\n        else return CodeMirror.Pass;\n      } else if (opening && (cm.getLine(cur.line).length == cur.ch ||\n                             isClosingBracket(next, pairs) ||\n                             /\\s/.test(next))) {\n        curType = \"both\";\n      } else {\n        return CodeMirror.Pass;\n      }\n      if (!type) type = curType;\n      else if (type != curType) return CodeMirror.Pass;\n    }\n\n    var left = pos % 2 ? pairs.charAt(pos - 1) : ch;\n    var right = pos % 2 ? ch : pairs.charAt(pos + 1);\n    cm.operation(function() {\n      if (type == \"skip\") {\n        cm.execCommand(\"goCharRight\");\n      } else if (type == \"skipThree\") {\n        for (var i = 0; i < 3; i++)\n          cm.execCommand(\"goCharRight\");\n      } else if (type == \"surround\") {\n        var sels = cm.getSelections();\n        for (var i = 0; i < sels.length; i++)\n          sels[i] = left + sels[i] + right;\n        cm.replaceSelections(sels, \"around\");\n        sels = cm.listSelections().slice();\n        for (var i = 0; i < sels.length; i++)\n          sels[i] = contractSelection(sels[i]);\n        cm.setSelections(sels);\n      } else if (type == \"both\") {\n        cm.replaceSelection(left + right, null);\n        cm.triggerElectric(left + right);\n        cm.execCommand(\"goCharLeft\");\n      } else if (type == \"addFour\") {\n        cm.replaceSelection(left + left + left + left, \"before\");\n        cm.execCommand(\"goCharRight\");\n      }\n    });\n  }\n\n  function isClosingBracket(ch, pairs) {\n    var pos = pairs.lastIndexOf(ch);\n    return pos > -1 && pos % 2 == 1;\n  }\n\n  function charsAround(cm, pos) {\n    var str = cm.getRange(Pos(pos.line, pos.ch - 1),\n                          Pos(pos.line, pos.ch + 1));\n    return str.length == 2 ? str : null;\n  }\n\n  // Project the token type that will exists after the given char is\n  // typed, and use it to determine whether it would cause the start\n  // of a string token.\n  function enteringString(cm, pos, ch) {\n    var line = cm.getLine(pos.line);\n    var token = cm.getTokenAt(pos);\n    if (/\\bstring2?\\b/.test(token.type) || stringStartsAfter(cm, pos)) return false;\n    var stream = new CodeMirror.StringStream(line.slice(0, pos.ch) + ch + line.slice(pos.ch), 4);\n    stream.pos = stream.start = token.start;\n    for (;;) {\n      var type1 = cm.getMode().token(stream, token.state);\n      if (stream.pos >= pos.ch + 1) return /\\bstring2?\\b/.test(type1);\n      stream.start = stream.pos;\n    }\n  }\n\n  function stringStartsAfter(cm, pos) {\n    var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1))\n    return /\\bstring/.test(token.type) && token.start == pos.ch\n  }\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/edit/closetag.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n/**\n * Tag-closer extension for CodeMirror.\n *\n * This extension adds an \"autoCloseTags\" option that can be set to\n * either true to get the default behavior, or an object to further\n * configure its behavior.\n *\n * These are supported options:\n *\n * `whenClosing` (default true)\n *   Whether to autoclose when the '/' of a closing tag is typed.\n * `whenOpening` (default true)\n *   Whether to autoclose the tag when the final '>' of an opening\n *   tag is typed.\n * `dontCloseTags` (default is empty tags for HTML, none for XML)\n *   An array of tag names that should not be autoclosed.\n * `indentTags` (default is block tags for HTML, none for XML)\n *   An array of tag names that should, when opened, cause a\n *   blank line to be added inside the tag, and the blank line and\n *   closing line to be indented.\n *\n * See demos/closetag.html for a usage example.\n */\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../fold/xml-fold\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../fold/xml-fold\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  CodeMirror.defineOption(\"autoCloseTags\", false, function(cm, val, old) {\n    if (old != CodeMirror.Init && old)\n      cm.removeKeyMap(\"autoCloseTags\");\n    if (!val) return;\n    var map = {name: \"autoCloseTags\"};\n    if (typeof val != \"object\" || val.whenClosing)\n      map[\"'/'\"] = function(cm) { return autoCloseSlash(cm); };\n    if (typeof val != \"object\" || val.whenOpening)\n      map[\"'>'\"] = function(cm) { return autoCloseGT(cm); };\n    cm.addKeyMap(map);\n  });\n\n  var htmlDontClose = [\"area\", \"base\", \"br\", \"col\", \"command\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"param\",\n                       \"source\", \"track\", \"wbr\"];\n  var htmlIndent = [\"applet\", \"blockquote\", \"body\", \"button\", \"div\", \"dl\", \"fieldset\", \"form\", \"frameset\", \"h1\", \"h2\", \"h3\", \"h4\",\n                    \"h5\", \"h6\", \"head\", \"html\", \"iframe\", \"layer\", \"legend\", \"object\", \"ol\", \"p\", \"select\", \"table\", \"ul\"];\n\n  function autoCloseGT(cm) {\n    if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n    var ranges = cm.listSelections(), replacements = [];\n    for (var i = 0; i < ranges.length; i++) {\n      if (!ranges[i].empty()) return CodeMirror.Pass;\n      var pos = ranges[i].head, tok = cm.getTokenAt(pos);\n      var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;\n      if (inner.mode.name != \"xml\" || !state.tagName) return CodeMirror.Pass;\n\n      var opt = cm.getOption(\"autoCloseTags\"), html = inner.mode.configuration == \"html\";\n      var dontCloseTags = (typeof opt == \"object\" && opt.dontCloseTags) || (html && htmlDontClose);\n      var indentTags = (typeof opt == \"object\" && opt.indentTags) || (html && htmlIndent);\n\n      var tagName = state.tagName;\n      if (tok.end > pos.ch) tagName = tagName.slice(0, tagName.length - tok.end + pos.ch);\n      var lowerTagName = tagName.toLowerCase();\n      // Don't process the '>' at the end of an end-tag or self-closing tag\n      if (!tagName ||\n          tok.type == \"string\" && (tok.end != pos.ch || !/[\\\"\\']/.test(tok.string.charAt(tok.string.length - 1)) || tok.string.length == 1) ||\n          tok.type == \"tag\" && state.type == \"closeTag\" ||\n          tok.string.indexOf(\"/\") == (tok.string.length - 1) || // match something like <someTagName />\n          dontCloseTags && indexOf(dontCloseTags, lowerTagName) > -1 ||\n          closingTagExists(cm, tagName, pos, state, true))\n        return CodeMirror.Pass;\n\n      var indent = indentTags && indexOf(indentTags, lowerTagName) > -1;\n      replacements[i] = {indent: indent,\n                         text: \">\" + (indent ? \"\\n\\n\" : \"\") + \"</\" + tagName + \">\",\n                         newPos: indent ? CodeMirror.Pos(pos.line + 1, 0) : CodeMirror.Pos(pos.line, pos.ch + 1)};\n    }\n\n    for (var i = ranges.length - 1; i >= 0; i--) {\n      var info = replacements[i];\n      cm.replaceRange(info.text, ranges[i].head, ranges[i].anchor, \"+insert\");\n      var sel = cm.listSelections().slice(0);\n      sel[i] = {head: info.newPos, anchor: info.newPos};\n      cm.setSelections(sel);\n      if (info.indent) {\n        cm.indentLine(info.newPos.line, null, true);\n        cm.indentLine(info.newPos.line + 1, null, true);\n      }\n    }\n  }\n\n  function autoCloseCurrent(cm, typingSlash) {\n    var ranges = cm.listSelections(), replacements = [];\n    var head = typingSlash ? \"/\" : \"</\";\n    for (var i = 0; i < ranges.length; i++) {\n      if (!ranges[i].empty()) return CodeMirror.Pass;\n      var pos = ranges[i].head, tok = cm.getTokenAt(pos);\n      var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;\n      if (typingSlash && (tok.type == \"string\" || tok.string.charAt(0) != \"<\" ||\n                          tok.start != pos.ch - 1))\n        return CodeMirror.Pass;\n      // Kludge to get around the fact that we are not in XML mode\n      // when completing in JS/CSS snippet in htmlmixed mode. Does not\n      // work for other XML embedded languages (there is no general\n      // way to go from a mixed mode to its current XML state).\n      var replacement;\n      if (inner.mode.name != \"xml\") {\n        if (cm.getMode().name == \"htmlmixed\" && inner.mode.name == \"javascript\")\n          replacement = head + \"script\";\n        else if (cm.getMode().name == \"htmlmixed\" && inner.mode.name == \"css\")\n          replacement = head + \"style\";\n        else\n          return CodeMirror.Pass;\n      } else {\n        if (!state.context || !state.context.tagName ||\n            closingTagExists(cm, state.context.tagName, pos, state))\n          return CodeMirror.Pass;\n        replacement = head + state.context.tagName;\n      }\n      if (cm.getLine(pos.line).charAt(tok.end) != \">\") replacement += \">\";\n      replacements[i] = replacement;\n    }\n    cm.replaceSelections(replacements);\n    ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++)\n      if (i == ranges.length - 1 || ranges[i].head.line < ranges[i + 1].head.line)\n        cm.indentLine(ranges[i].head.line);\n  }\n\n  function autoCloseSlash(cm) {\n    if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n    return autoCloseCurrent(cm, true);\n  }\n\n  CodeMirror.commands.closeTag = function(cm) { return autoCloseCurrent(cm); };\n\n  function indexOf(collection, elt) {\n    if (collection.indexOf) return collection.indexOf(elt);\n    for (var i = 0, e = collection.length; i < e; ++i)\n      if (collection[i] == elt) return i;\n    return -1;\n  }\n\n  // If xml-fold is loaded, we use its functionality to try and verify\n  // whether a given tag is actually unclosed.\n  function closingTagExists(cm, tagName, pos, state, newTag) {\n    if (!CodeMirror.scanForClosingTag) return false;\n    var end = Math.min(cm.lastLine() + 1, pos.line + 500);\n    var nextClose = CodeMirror.scanForClosingTag(cm, pos, null, end);\n    if (!nextClose || nextClose.tag != tagName) return false;\n    var cx = state.context;\n    // If the immediate wrapping context contains onCx instances of\n    // the same tag, a closing tag only exists if there are at least\n    // that many closing tags of that type following.\n    for (var onCx = newTag ? 1 : 0; cx && cx.tagName == tagName; cx = cx.prev) ++onCx;\n    pos = nextClose.to;\n    for (var i = 1; i < onCx; i++) {\n      var next = CodeMirror.scanForClosingTag(cm, pos, null, end);\n      if (!next || next.tag != tagName) return false;\n      pos = next.to;\n    }\n    return true;\n  }\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/edit/continuelist.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 listRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,\n      emptyListRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,\n      unorderedListRE = /[*+-]\\s/;\n\n  CodeMirror.commands.newlineAndIndentContinueMarkdownList = function(cm) {\n    if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n    var ranges = cm.listSelections(), replacements = [];\n    for (var i = 0; i < ranges.length; i++) {\n      var pos = ranges[i].head;\n      var eolState = cm.getStateAfter(pos.line);\n      var inList = eolState.list !== false;\n      var inQuote = eolState.quote !== 0;\n\n      var line = cm.getLine(pos.line), match = listRE.exec(line);\n      if (!ranges[i].empty() || (!inList && !inQuote) || !match) {\n        cm.execCommand(\"newlineAndIndent\");\n        return;\n      }\n      if (emptyListRE.test(line)) {\n        if (!/>\\s*$/.test(line)) cm.replaceRange(\"\", {\n          line: pos.line, ch: 0\n        }, {\n          line: pos.line, ch: pos.ch + 1\n        });\n        replacements[i] = \"\\n\";\n      } else {\n        var indent = match[1], after = match[5];\n        var bullet = unorderedListRE.test(match[2]) || match[2].indexOf(\">\") >= 0\n          ? match[2].replace(\"x\", \" \")\n          : (parseInt(match[3], 10) + 1) + match[4];\n\n        replacements[i] = \"\\n\" + indent + bullet + after;\n      }\n    }\n\n    cm.replaceSelections(replacements);\n  };\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/edit/matchbrackets.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 ie_lt8 = /MSIE \\d/.test(navigator.userAgent) &&\n    (document.documentMode == null || document.documentMode < 8);\n\n  var Pos = CodeMirror.Pos;\n\n  var matching = {\"(\": \")>\", \")\": \"(<\", \"[\": \"]>\", \"]\": \"[<\", \"{\": \"}>\", \"}\": \"{<\"};\n\n  function findMatchingBracket(cm, where, strict, config) {\n    var line = cm.getLineHandle(where.line), pos = where.ch - 1;\n    var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];\n    if (!match) return null;\n    var dir = match.charAt(1) == \">\" ? 1 : -1;\n    if (strict && (dir > 0) != (pos == where.ch)) return null;\n    var style = cm.getTokenTypeAt(Pos(where.line, pos + 1));\n\n    var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config);\n    if (found == null) return null;\n    return {from: Pos(where.line, pos), to: found && found.pos,\n            match: found && found.ch == match.charAt(0), forward: dir > 0};\n  }\n\n  // bracketRegex is used to specify which type of bracket to scan\n  // should be a regexp, e.g. /[[\\]]/\n  //\n  // Note: If \"where\" is on an open bracket, then this bracket is ignored.\n  //\n  // Returns false when no bracket was found, null when it reached\n  // maxScanLines and gave up\n  function scanForBracket(cm, where, dir, style, config) {\n    var maxScanLen = (config && config.maxScanLineLength) || 10000;\n    var maxScanLines = (config && config.maxScanLines) || 1000;\n\n    var stack = [];\n    var re = config && config.bracketRegex ? config.bracketRegex : /[(){}[\\]]/;\n    var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1)\n                          : Math.max(cm.firstLine() - 1, where.line - maxScanLines);\n    for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) {\n      var line = cm.getLine(lineNo);\n      if (!line) continue;\n      var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1;\n      if (line.length > maxScanLen) continue;\n      if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0);\n      for (; pos != end; pos += dir) {\n        var ch = line.charAt(pos);\n        if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) {\n          var match = matching[ch];\n          if ((match.charAt(1) == \">\") == (dir > 0)) stack.push(ch);\n          else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch};\n          else stack.pop();\n        }\n      }\n    }\n    return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null;\n  }\n\n  function matchBrackets(cm, autoclear, config) {\n    // Disable brace matching in long lines, since it'll cause hugely slow updates\n    var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000;\n    var marks = [], ranges = cm.listSelections();\n    for (var i = 0; i < ranges.length; i++) {\n      var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config);\n      if (match && cm.getLine(match.from.line).length <= maxHighlightLen) {\n        var style = match.match ? \"CodeMirror-matchingbracket\" : \"CodeMirror-nonmatchingbracket\";\n        marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style}));\n        if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen)\n          marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style}));\n      }\n    }\n\n    if (marks.length) {\n      // Kludge to work around the IE bug from issue #1193, where text\n      // input stops going to the textare whever this fires.\n      if (ie_lt8 && cm.state.focused) cm.focus();\n\n      var clear = function() {\n        cm.operation(function() {\n          for (var i = 0; i < marks.length; i++) marks[i].clear();\n        });\n      };\n      if (autoclear) setTimeout(clear, 800);\n      else return clear;\n    }\n  }\n\n  var currentlyHighlighted = null;\n  function doMatchBrackets(cm) {\n    cm.operation(function() {\n      if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;}\n      currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets);\n    });\n  }\n\n  CodeMirror.defineOption(\"matchBrackets\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      cm.off(\"cursorActivity\", doMatchBrackets);\n      if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;}\n    }\n    if (val) {\n      cm.state.matchBrackets = typeof val == \"object\" ? val : {};\n      cm.on(\"cursorActivity\", doMatchBrackets);\n    }\n  });\n\n  CodeMirror.defineExtension(\"matchBrackets\", function() {matchBrackets(this, true);});\n  CodeMirror.defineExtension(\"findMatchingBracket\", function(pos, strict, config){\n    return findMatchingBracket(this, pos, strict, config);\n  });\n  CodeMirror.defineExtension(\"scanForBracket\", function(pos, dir, style, config){\n    return scanForBracket(this, pos, dir, style, config);\n  });\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/edit/matchtags.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../fold/xml-fold\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../fold/xml-fold\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineOption(\"matchTags\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      cm.off(\"cursorActivity\", doMatchTags);\n      cm.off(\"viewportChange\", maybeUpdateMatch);\n      clear(cm);\n    }\n    if (val) {\n      cm.state.matchBothTags = typeof val == \"object\" && val.bothTags;\n      cm.on(\"cursorActivity\", doMatchTags);\n      cm.on(\"viewportChange\", maybeUpdateMatch);\n      doMatchTags(cm);\n    }\n  });\n\n  function clear(cm) {\n    if (cm.state.tagHit) cm.state.tagHit.clear();\n    if (cm.state.tagOther) cm.state.tagOther.clear();\n    cm.state.tagHit = cm.state.tagOther = null;\n  }\n\n  function doMatchTags(cm) {\n    cm.state.failedTagMatch = false;\n    cm.operation(function() {\n      clear(cm);\n      if (cm.somethingSelected()) return;\n      var cur = cm.getCursor(), range = cm.getViewport();\n      range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to);\n      var match = CodeMirror.findMatchingTag(cm, cur, range);\n      if (!match) return;\n      if (cm.state.matchBothTags) {\n        var hit = match.at == \"open\" ? match.open : match.close;\n        if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: \"CodeMirror-matchingtag\"});\n      }\n      var other = match.at == \"close\" ? match.open : match.close;\n      if (other)\n        cm.state.tagOther = cm.markText(other.from, other.to, {className: \"CodeMirror-matchingtag\"});\n      else\n        cm.state.failedTagMatch = true;\n    });\n  }\n\n  function maybeUpdateMatch(cm) {\n    if (cm.state.failedTagMatch) doMatchTags(cm);\n  }\n\n  CodeMirror.commands.toMatchingTag = function(cm) {\n    var found = CodeMirror.findMatchingTag(cm, cm.getCursor());\n    if (found) {\n      var other = found.at == \"close\" ? found.open : found.close;\n      if (other) cm.extendSelection(other.to, other.from);\n    }\n  };\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/edit/trailingspace.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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  CodeMirror.defineOption(\"showTrailingSpace\", false, function(cm, val, prev) {\n    if (prev == CodeMirror.Init) prev = false;\n    if (prev && !val)\n      cm.removeOverlay(\"trailingspace\");\n    else if (!prev && val)\n      cm.addOverlay({\n        token: function(stream) {\n          for (var l = stream.string.length, i = l; i && /\\s/.test(stream.string.charAt(i - 1)); --i) {}\n          if (i > stream.pos) { stream.pos = i; return null; }\n          stream.pos = l;\n          return \"trailingspace\";\n        },\n        name: \"trailingspace\"\n      });\n  });\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/fold/brace-fold.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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.registerHelper(\"fold\", \"brace\", function(cm, start) {\n  var line = start.line, lineText = cm.getLine(line);\n  var tokenType;\n\n  function findOpening(openCh) {\n    for (var at = start.ch, pass = 0;;) {\n      var found = at <= 0 ? -1 : lineText.lastIndexOf(openCh, at - 1);\n      if (found == -1) {\n        if (pass == 1) break;\n        pass = 1;\n        at = lineText.length;\n        continue;\n      }\n      if (pass == 1 && found < start.ch) break;\n      tokenType = cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1));\n      if (!/^(comment|string)/.test(tokenType)) return found + 1;\n      at = found - 1;\n    }\n  }\n\n  var startToken = \"{\", endToken = \"}\", startCh = findOpening(\"{\");\n  if (startCh == null) {\n    startToken = \"[\", endToken = \"]\";\n    startCh = findOpening(\"[\");\n  }\n\n  if (startCh == null) return;\n  var count = 1, lastLine = cm.lastLine(), end, endCh;\n  outer: for (var i = line; i <= lastLine; ++i) {\n    var text = cm.getLine(i), pos = i == line ? startCh : 0;\n    for (;;) {\n      var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos);\n      if (nextOpen < 0) nextOpen = text.length;\n      if (nextClose < 0) nextClose = text.length;\n      pos = Math.min(nextOpen, nextClose);\n      if (pos == text.length) break;\n      if (cm.getTokenTypeAt(CodeMirror.Pos(i, pos + 1)) == tokenType) {\n        if (pos == nextOpen) ++count;\n        else if (!--count) { end = i; endCh = pos; break outer; }\n      }\n      ++pos;\n    }\n  }\n  if (end == null || line == end && endCh == startCh) return;\n  return {from: CodeMirror.Pos(line, startCh),\n          to: CodeMirror.Pos(end, endCh)};\n});\n\nCodeMirror.registerHelper(\"fold\", \"import\", function(cm, start) {\n  function hasImport(line) {\n    if (line < cm.firstLine() || line > cm.lastLine()) return null;\n    var start = cm.getTokenAt(CodeMirror.Pos(line, 1));\n    if (!/\\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1));\n    if (start.type != \"keyword\" || start.string != \"import\") return null;\n    // Now find closing semicolon, return its position\n    for (var i = line, e = Math.min(cm.lastLine(), line + 10); i <= e; ++i) {\n      var text = cm.getLine(i), semi = text.indexOf(\";\");\n      if (semi != -1) return {startCh: start.end, end: CodeMirror.Pos(i, semi)};\n    }\n  }\n\n  var startLine = start.line, has = hasImport(startLine), prev;\n  if (!has || hasImport(startLine - 1) || ((prev = hasImport(startLine - 2)) && prev.end.line == startLine - 1))\n    return null;\n  for (var end = has.end;;) {\n    var next = hasImport(end.line + 1);\n    if (next == null) break;\n    end = next.end;\n  }\n  return {from: cm.clipPos(CodeMirror.Pos(startLine, has.startCh + 1)), to: end};\n});\n\nCodeMirror.registerHelper(\"fold\", \"include\", function(cm, start) {\n  function hasInclude(line) {\n    if (line < cm.firstLine() || line > cm.lastLine()) return null;\n    var start = cm.getTokenAt(CodeMirror.Pos(line, 1));\n    if (!/\\S/.test(start.string)) start = cm.getTokenAt(CodeMirror.Pos(line, start.end + 1));\n    if (start.type == \"meta\" && start.string.slice(0, 8) == \"#include\") return start.start + 8;\n  }\n\n  var startLine = start.line, has = hasInclude(startLine);\n  if (has == null || hasInclude(startLine - 1) != null) return null;\n  for (var end = startLine;;) {\n    var next = hasInclude(end + 1);\n    if (next == null) break;\n    ++end;\n  }\n  return {from: CodeMirror.Pos(startLine, has + 1),\n          to: cm.clipPos(CodeMirror.Pos(end))};\n});\n\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/fold/comment-fold.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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.registerGlobalHelper(\"fold\", \"comment\", function(mode) {\n  return mode.blockCommentStart && mode.blockCommentEnd;\n}, function(cm, start) {\n  var mode = cm.getModeAt(start), startToken = mode.blockCommentStart, endToken = mode.blockCommentEnd;\n  if (!startToken || !endToken) return;\n  var line = start.line, lineText = cm.getLine(line);\n\n  var startCh;\n  for (var at = start.ch, pass = 0;;) {\n    var found = at <= 0 ? -1 : lineText.lastIndexOf(startToken, at - 1);\n    if (found == -1) {\n      if (pass == 1) return;\n      pass = 1;\n      at = lineText.length;\n      continue;\n    }\n    if (pass == 1 && found < start.ch) return;\n    if (/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found + 1))) &&\n        (found == 0 || lineText.slice(found - endToken.length, found) == endToken ||\n         !/comment/.test(cm.getTokenTypeAt(CodeMirror.Pos(line, found))))) {\n      startCh = found + startToken.length;\n      break;\n    }\n    at = found - 1;\n  }\n\n  var depth = 1, lastLine = cm.lastLine(), end, endCh;\n  outer: for (var i = line; i <= lastLine; ++i) {\n    var text = cm.getLine(i), pos = i == line ? startCh : 0;\n    for (;;) {\n      var nextOpen = text.indexOf(startToken, pos), nextClose = text.indexOf(endToken, pos);\n      if (nextOpen < 0) nextOpen = text.length;\n      if (nextClose < 0) nextClose = text.length;\n      pos = Math.min(nextOpen, nextClose);\n      if (pos == text.length) break;\n      if (pos == nextOpen) ++depth;\n      else if (!--depth) { end = i; endCh = pos; break outer; }\n      ++pos;\n    }\n  }\n  if (end == null || line == end && endCh == startCh) return;\n  return {from: CodeMirror.Pos(line, startCh),\n          to: CodeMirror.Pos(end, endCh)};\n});\n\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/fold/foldcode.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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  function doFold(cm, pos, options, force) {\n    if (options && options.call) {\n      var finder = options;\n      options = null;\n    } else {\n      var finder = getOption(cm, options, \"rangeFinder\");\n    }\n    if (typeof pos == \"number\") pos = CodeMirror.Pos(pos, 0);\n    var minSize = getOption(cm, options, \"minFoldSize\");\n\n    function getRange(allowFolded) {\n      var range = finder(cm, pos);\n      if (!range || range.to.line - range.from.line < minSize) return null;\n      var marks = cm.findMarksAt(range.from);\n      for (var i = 0; i < marks.length; ++i) {\n        if (marks[i].__isFold && force !== \"fold\") {\n          if (!allowFolded) return null;\n          range.cleared = true;\n          marks[i].clear();\n        }\n      }\n      return range;\n    }\n\n    var range = getRange(true);\n    if (getOption(cm, options, \"scanUp\")) while (!range && pos.line > cm.firstLine()) {\n      pos = CodeMirror.Pos(pos.line - 1, 0);\n      range = getRange(false);\n    }\n    if (!range || range.cleared || force === \"unfold\") return;\n\n    var myWidget = makeWidget(cm, options);\n    CodeMirror.on(myWidget, \"mousedown\", function(e) {\n      myRange.clear();\n      CodeMirror.e_preventDefault(e);\n    });\n    var myRange = cm.markText(range.from, range.to, {\n      replacedWith: myWidget,\n      clearOnEnter: getOption(cm, options, \"clearOnEnter\"),\n      __isFold: true\n    });\n    myRange.on(\"clear\", function(from, to) {\n      CodeMirror.signal(cm, \"unfold\", cm, from, to);\n    });\n    CodeMirror.signal(cm, \"fold\", cm, range.from, range.to);\n  }\n\n  function makeWidget(cm, options) {\n    var widget = getOption(cm, options, \"widget\");\n    if (typeof widget == \"string\") {\n      var text = document.createTextNode(widget);\n      widget = document.createElement(\"span\");\n      widget.appendChild(text);\n      widget.className = \"CodeMirror-foldmarker\";\n    }\n    return widget;\n  }\n\n  // Clumsy backwards-compatible interface\n  CodeMirror.newFoldFunction = function(rangeFinder, widget) {\n    return function(cm, pos) { doFold(cm, pos, {rangeFinder: rangeFinder, widget: widget}); };\n  };\n\n  // New-style interface\n  CodeMirror.defineExtension(\"foldCode\", function(pos, options, force) {\n    doFold(this, pos, options, force);\n  });\n\n  CodeMirror.defineExtension(\"isFolded\", function(pos) {\n    var marks = this.findMarksAt(pos);\n    for (var i = 0; i < marks.length; ++i)\n      if (marks[i].__isFold) return true;\n  });\n\n  CodeMirror.commands.toggleFold = function(cm) {\n    cm.foldCode(cm.getCursor());\n  };\n  CodeMirror.commands.fold = function(cm) {\n    cm.foldCode(cm.getCursor(), null, \"fold\");\n  };\n  CodeMirror.commands.unfold = function(cm) {\n    cm.foldCode(cm.getCursor(), null, \"unfold\");\n  };\n  CodeMirror.commands.foldAll = function(cm) {\n    cm.operation(function() {\n      for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++)\n        cm.foldCode(CodeMirror.Pos(i, 0), null, \"fold\");\n    });\n  };\n  CodeMirror.commands.unfoldAll = function(cm) {\n    cm.operation(function() {\n      for (var i = cm.firstLine(), e = cm.lastLine(); i <= e; i++)\n        cm.foldCode(CodeMirror.Pos(i, 0), null, \"unfold\");\n    });\n  };\n\n  CodeMirror.registerHelper(\"fold\", \"combine\", function() {\n    var funcs = Array.prototype.slice.call(arguments, 0);\n    return function(cm, start) {\n      for (var i = 0; i < funcs.length; ++i) {\n        var found = funcs[i](cm, start);\n        if (found) return found;\n      }\n    };\n  });\n\n  CodeMirror.registerHelper(\"fold\", \"auto\", function(cm, start) {\n    var helpers = cm.getHelpers(start, \"fold\");\n    for (var i = 0; i < helpers.length; i++) {\n      var cur = helpers[i](cm, start);\n      if (cur) return cur;\n    }\n  });\n\n  var defaultOptions = {\n    rangeFinder: CodeMirror.fold.auto,\n    widget: \"\\u2194\",\n    minFoldSize: 0,\n    scanUp: false,\n    clearOnEnter: true\n  };\n\n  CodeMirror.defineOption(\"foldOptions\", null);\n\n  function getOption(cm, options, name) {\n    if (options && options[name] !== undefined)\n      return options[name];\n    var editorOptions = cm.options.foldOptions;\n    if (editorOptions && editorOptions[name] !== undefined)\n      return editorOptions[name];\n    return defaultOptions[name];\n  }\n\n  CodeMirror.defineExtension(\"foldOption\", function(options, name) {\n    return getOption(this, options, name);\n  });\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/fold/foldgutter.css",
    "content": ".CodeMirror-foldmarker {\n  color: blue;\n  text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px;\n  font-family: arial;\n  line-height: .3;\n  cursor: pointer;\n}\n.CodeMirror-foldgutter {\n  width: .7em;\n}\n.CodeMirror-foldgutter-open,\n.CodeMirror-foldgutter-folded {\n  cursor: pointer;\n}\n.CodeMirror-foldgutter-open:after {\n  content: \"\\25BE\";\n}\n.CodeMirror-foldgutter-folded:after {\n  content: \"\\25B8\";\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/fold/foldgutter.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./foldcode\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"./foldcode\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  CodeMirror.defineOption(\"foldGutter\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      cm.clearGutter(cm.state.foldGutter.options.gutter);\n      cm.state.foldGutter = null;\n      cm.off(\"gutterClick\", onGutterClick);\n      cm.off(\"change\", onChange);\n      cm.off(\"viewportChange\", onViewportChange);\n      cm.off(\"fold\", onFold);\n      cm.off(\"unfold\", onFold);\n      cm.off(\"swapDoc\", onChange);\n    }\n    if (val) {\n      cm.state.foldGutter = new State(parseOptions(val));\n      updateInViewport(cm);\n      cm.on(\"gutterClick\", onGutterClick);\n      cm.on(\"change\", onChange);\n      cm.on(\"viewportChange\", onViewportChange);\n      cm.on(\"fold\", onFold);\n      cm.on(\"unfold\", onFold);\n      cm.on(\"swapDoc\", onChange);\n    }\n  });\n\n  var Pos = CodeMirror.Pos;\n\n  function State(options) {\n    this.options = options;\n    this.from = this.to = 0;\n  }\n\n  function parseOptions(opts) {\n    if (opts === true) opts = {};\n    if (opts.gutter == null) opts.gutter = \"CodeMirror-foldgutter\";\n    if (opts.indicatorOpen == null) opts.indicatorOpen = \"CodeMirror-foldgutter-open\";\n    if (opts.indicatorFolded == null) opts.indicatorFolded = \"CodeMirror-foldgutter-folded\";\n    return opts;\n  }\n\n  function isFolded(cm, line) {\n    var marks = cm.findMarks(Pos(line, 0), Pos(line + 1, 0));\n    for (var i = 0; i < marks.length; ++i)\n      if (marks[i].__isFold && marks[i].find().from.line == line) return marks[i];\n  }\n\n  function marker(spec) {\n    if (typeof spec == \"string\") {\n      var elt = document.createElement(\"div\");\n      elt.className = spec + \" CodeMirror-guttermarker-subtle\";\n      return elt;\n    } else {\n      return spec.cloneNode(true);\n    }\n  }\n\n  function updateFoldInfo(cm, from, to) {\n    var opts = cm.state.foldGutter.options, cur = from;\n    var minSize = cm.foldOption(opts, \"minFoldSize\");\n    var func = cm.foldOption(opts, \"rangeFinder\");\n    cm.eachLine(from, to, function(line) {\n      var mark = null;\n      if (isFolded(cm, cur)) {\n        mark = marker(opts.indicatorFolded);\n      } else {\n        var pos = Pos(cur, 0);\n        var range = func && func(cm, pos);\n        if (range && range.to.line - range.from.line >= minSize)\n          mark = marker(opts.indicatorOpen);\n      }\n      cm.setGutterMarker(line, opts.gutter, mark);\n      ++cur;\n    });\n  }\n\n  function updateInViewport(cm) {\n    var vp = cm.getViewport(), state = cm.state.foldGutter;\n    if (!state) return;\n    cm.operation(function() {\n      updateFoldInfo(cm, vp.from, vp.to);\n    });\n    state.from = vp.from; state.to = vp.to;\n  }\n\n  function onGutterClick(cm, line, gutter) {\n    var state = cm.state.foldGutter;\n    if (!state) return;\n    var opts = state.options;\n    if (gutter != opts.gutter) return;\n    var folded = isFolded(cm, line);\n    if (folded) folded.clear();\n    else cm.foldCode(Pos(line, 0), opts.rangeFinder);\n  }\n\n  function onChange(cm) {\n    var state = cm.state.foldGutter;\n    if (!state) return;\n    var opts = state.options;\n    state.from = state.to = 0;\n    clearTimeout(state.changeUpdate);\n    state.changeUpdate = setTimeout(function() { updateInViewport(cm); }, opts.foldOnChangeTimeSpan || 600);\n  }\n\n  function onViewportChange(cm) {\n    var state = cm.state.foldGutter;\n    if (!state) return;\n    var opts = state.options;\n    clearTimeout(state.changeUpdate);\n    state.changeUpdate = setTimeout(function() {\n      var vp = cm.getViewport();\n      if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) {\n        updateInViewport(cm);\n      } else {\n        cm.operation(function() {\n          if (vp.from < state.from) {\n            updateFoldInfo(cm, vp.from, state.from);\n            state.from = vp.from;\n          }\n          if (vp.to > state.to) {\n            updateFoldInfo(cm, state.to, vp.to);\n            state.to = vp.to;\n          }\n        });\n      }\n    }, opts.updateViewportTimeSpan || 400);\n  }\n\n  function onFold(cm, from) {\n    var state = cm.state.foldGutter;\n    if (!state) return;\n    var line = from.line;\n    if (line >= state.from && line < state.to)\n      updateFoldInfo(cm, line, line + 1);\n  }\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/fold/indent-fold.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 lineIndent(cm, lineNo) {\n  var text = cm.getLine(lineNo)\n  var spaceTo = text.search(/\\S/)\n  if (spaceTo == -1 || /\\bcomment\\b/.test(cm.getTokenTypeAt(CodeMirror.Pos(lineNo, spaceTo + 1))))\n    return -1\n  return CodeMirror.countColumn(text, null, cm.getOption(\"tabSize\"))\n}\n               !\nCodeMirror.registerHelper(\"fold\", \"indent\", function(cm, start) {\n  var myIndent = lineIndent(cm, start.line)\n  if (myIndent < 0) return\n  var lastLineInFold = null\n\n  // Go through lines until we find a line that definitely doesn't belong in\n  // the block we're folding, or to the end.\n  for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) {\n    var indent = lineIndent(cm, i)\n    if (indent == -1) {\n    } else if (indent > myIndent) {\n      // Lines with a greater indent are considered part of the block.\n      lastLineInFold = i;\n    } else {\n      // If this line has non-space, non-comment content, and is\n      // indented less or equal to the start line, it is the start of\n      // another block.\n      break;\n    }\n  }\n  if (lastLineInFold) return {\n    from: CodeMirror.Pos(start.line, cm.getLine(start.line).length),\n    to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length)\n  };\n});\n\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/fold/markdown-fold.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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.registerHelper(\"fold\", \"markdown\", function(cm, start) {\n  var maxDepth = 100;\n\n  function isHeader(lineNo) {\n    var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0));\n    return tokentype && /\\bheader\\b/.test(tokentype);\n  }\n\n  function headerLevel(lineNo, line, nextLine) {\n    var match = line && line.match(/^#+/);\n    if (match && isHeader(lineNo)) return match[0].length;\n    match = nextLine && nextLine.match(/^[=\\-]+\\s*$/);\n    if (match && isHeader(lineNo + 1)) return nextLine[0] == \"=\" ? 1 : 2;\n    return maxDepth;\n  }\n\n  var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1);\n  var level = headerLevel(start.line, firstLine, nextLine);\n  if (level === maxDepth) return undefined;\n\n  var lastLineNo = cm.lastLine();\n  var end = start.line, nextNextLine = cm.getLine(end + 2);\n  while (end < lastLineNo) {\n    if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break;\n    ++end;\n    nextLine = nextNextLine;\n    nextNextLine = cm.getLine(end + 2);\n  }\n\n  return {\n    from: CodeMirror.Pos(start.line, firstLine.length),\n    to: CodeMirror.Pos(end, cm.getLine(end).length)\n  };\n});\n\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/fold/xml-fold.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 Pos = CodeMirror.Pos;\n  function cmp(a, b) { return a.line - b.line || a.ch - b.ch; }\n\n  var nameStartChar = \"A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n  var nameChar = nameStartChar + \"\\-\\:\\.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n  var xmlTagStart = new RegExp(\"<(/?)([\" + nameStartChar + \"][\" + nameChar + \"]*)\", \"g\");\n\n  function Iter(cm, line, ch, range) {\n    this.line = line; this.ch = ch;\n    this.cm = cm; this.text = cm.getLine(line);\n    this.min = range ? Math.max(range.from, cm.firstLine()) : cm.firstLine();\n    this.max = range ? Math.min(range.to - 1, cm.lastLine()) : cm.lastLine();\n  }\n\n  function tagAt(iter, ch) {\n    var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch));\n    return type && /\\btag\\b/.test(type);\n  }\n\n  function nextLine(iter) {\n    if (iter.line >= iter.max) return;\n    iter.ch = 0;\n    iter.text = iter.cm.getLine(++iter.line);\n    return true;\n  }\n  function prevLine(iter) {\n    if (iter.line <= iter.min) return;\n    iter.text = iter.cm.getLine(--iter.line);\n    iter.ch = iter.text.length;\n    return true;\n  }\n\n  function toTagEnd(iter) {\n    for (;;) {\n      var gt = iter.text.indexOf(\">\", iter.ch);\n      if (gt == -1) { if (nextLine(iter)) continue; else return; }\n      if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; }\n      var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n      var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n      iter.ch = gt + 1;\n      return selfClose ? \"selfClose\" : \"regular\";\n    }\n  }\n  function toTagStart(iter) {\n    for (;;) {\n      var lt = iter.ch ? iter.text.lastIndexOf(\"<\", iter.ch - 1) : -1;\n      if (lt == -1) { if (prevLine(iter)) continue; else return; }\n      if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; }\n      xmlTagStart.lastIndex = lt;\n      iter.ch = lt;\n      var match = xmlTagStart.exec(iter.text);\n      if (match && match.index == lt) return match;\n    }\n  }\n\n  function toNextTag(iter) {\n    for (;;) {\n      xmlTagStart.lastIndex = iter.ch;\n      var found = xmlTagStart.exec(iter.text);\n      if (!found) { if (nextLine(iter)) continue; else return; }\n      if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; }\n      iter.ch = found.index + found[0].length;\n      return found;\n    }\n  }\n  function toPrevTag(iter) {\n    for (;;) {\n      var gt = iter.ch ? iter.text.lastIndexOf(\">\", iter.ch - 1) : -1;\n      if (gt == -1) { if (prevLine(iter)) continue; else return; }\n      if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; }\n      var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n      var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n      iter.ch = gt + 1;\n      return selfClose ? \"selfClose\" : \"regular\";\n    }\n  }\n\n  function findMatchingClose(iter, tag) {\n    var stack = [];\n    for (;;) {\n      var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0);\n      if (!next || !(end = toTagEnd(iter))) return;\n      if (end == \"selfClose\") continue;\n      if (next[1]) { // closing tag\n        for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) {\n          stack.length = i;\n          break;\n        }\n        if (i < 0 && (!tag || tag == next[2])) return {\n          tag: next[2],\n          from: Pos(startLine, startCh),\n          to: Pos(iter.line, iter.ch)\n        };\n      } else { // opening tag\n        stack.push(next[2]);\n      }\n    }\n  }\n  function findMatchingOpen(iter, tag) {\n    var stack = [];\n    for (;;) {\n      var prev = toPrevTag(iter);\n      if (!prev) return;\n      if (prev == \"selfClose\") { toTagStart(iter); continue; }\n      var endLine = iter.line, endCh = iter.ch;\n      var start = toTagStart(iter);\n      if (!start) return;\n      if (start[1]) { // closing tag\n        stack.push(start[2]);\n      } else { // opening tag\n        for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) {\n          stack.length = i;\n          break;\n        }\n        if (i < 0 && (!tag || tag == start[2])) return {\n          tag: start[2],\n          from: Pos(iter.line, iter.ch),\n          to: Pos(endLine, endCh)\n        };\n      }\n    }\n  }\n\n  CodeMirror.registerHelper(\"fold\", \"xml\", function(cm, start) {\n    var iter = new Iter(cm, start.line, 0);\n    for (;;) {\n      var openTag = toNextTag(iter), end;\n      if (!openTag || iter.line != start.line || !(end = toTagEnd(iter))) return;\n      if (!openTag[1] && end != \"selfClose\") {\n        var startPos = Pos(iter.line, iter.ch);\n        var endPos = findMatchingClose(iter, openTag[2]);\n        return endPos && {from: startPos, to: endPos.from};\n      }\n    }\n  });\n  CodeMirror.findMatchingTag = function(cm, pos, range) {\n    var iter = new Iter(cm, pos.line, pos.ch, range);\n    if (iter.text.indexOf(\">\") == -1 && iter.text.indexOf(\"<\") == -1) return;\n    var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch);\n    var start = end && toTagStart(iter);\n    if (!end || !start || cmp(iter, pos) > 0) return;\n    var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]};\n    if (end == \"selfClose\") return {open: here, close: null, at: \"open\"};\n\n    if (start[1]) { // closing tag\n      return {open: findMatchingOpen(iter, start[2]), close: here, at: \"close\"};\n    } else { // opening tag\n      iter = new Iter(cm, to.line, to.ch, range);\n      return {open: here, close: findMatchingClose(iter, start[2]), at: \"open\"};\n    }\n  };\n\n  CodeMirror.findEnclosingTag = function(cm, pos, range, tag) {\n    var iter = new Iter(cm, pos.line, pos.ch, range);\n    for (;;) {\n      var open = findMatchingOpen(iter, tag);\n      if (!open) break;\n      var forward = new Iter(cm, pos.line, pos.ch, range);\n      var close = findMatchingClose(forward, open.tag);\n      if (close) return {open: open, close: close};\n    }\n  };\n\n  // Used by addon/edit/closetag.js\n  CodeMirror.scanForClosingTag = function(cm, pos, name, end) {\n    var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null);\n    return findMatchingClose(iter, name);\n  };\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/hint/anyword-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 WORD = /[\\w$]+/, RANGE = 500;\n\n  CodeMirror.registerHelper(\"hint\", \"anyword\", function(editor, options) {\n    var word = options && options.word || WORD;\n    var range = options && options.range || RANGE;\n    var cur = editor.getCursor(), curLine = editor.getLine(cur.line);\n    var end = cur.ch, start = end;\n    while (start && word.test(curLine.charAt(start - 1))) --start;\n    var curWord = start != end && curLine.slice(start, end);\n\n    var list = options && options.list || [], seen = {};\n    var re = new RegExp(word.source, \"g\");\n    for (var dir = -1; dir <= 1; dir += 2) {\n      var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir;\n      for (; line != endLine; line += dir) {\n        var text = editor.getLine(line), m;\n        while (m = re.exec(text)) {\n          if (line == cur.line && m[0] === curWord) continue;\n          if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) {\n            seen[m[0]] = true;\n            list.push(m[0]);\n          }\n        }\n      }\n    }\n    return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)};\n  });\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/hint/css-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../../mode/css/css\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../../mode/css/css\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var pseudoClasses = {link: 1, visited: 1, active: 1, hover: 1, focus: 1,\n                       \"first-letter\": 1, \"first-line\": 1, \"first-child\": 1,\n                       before: 1, after: 1, lang: 1};\n\n  CodeMirror.registerHelper(\"hint\", \"css\", function(cm) {\n    var cur = cm.getCursor(), token = cm.getTokenAt(cur);\n    var inner = CodeMirror.innerMode(cm.getMode(), token.state);\n    if (inner.mode.name != \"css\") return;\n\n    if (token.type == \"keyword\" && \"!important\".indexOf(token.string) == 0)\n      return {list: [\"!important\"], from: CodeMirror.Pos(cur.line, token.start),\n              to: CodeMirror.Pos(cur.line, token.end)};\n\n    var start = token.start, end = cur.ch, word = token.string.slice(0, end - start);\n    if (/[^\\w$_-]/.test(word)) {\n      word = \"\"; start = end = cur.ch;\n    }\n\n    var spec = CodeMirror.resolveMode(\"text/css\");\n\n    var result = [];\n    function add(keywords) {\n      for (var name in keywords)\n        if (!word || name.lastIndexOf(word, 0) == 0)\n          result.push(name);\n    }\n\n    var st = inner.state.state;\n    if (st == \"pseudo\" || token.type == \"variable-3\") {\n      add(pseudoClasses);\n    } else if (st == \"block\" || st == \"maybeprop\") {\n      add(spec.propertyKeywords);\n    } else if (st == \"prop\" || st == \"parens\" || st == \"at\" || st == \"params\") {\n      add(spec.valueKeywords);\n      add(spec.colorKeywords);\n    } else if (st == \"media\" || st == \"media_parens\") {\n      add(spec.mediaTypes);\n      add(spec.mediaFeatures);\n    }\n\n    if (result.length) return {\n      list: result,\n      from: CodeMirror.Pos(cur.line, start),\n      to: CodeMirror.Pos(cur.line, end)\n    };\n  });\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/hint/html-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./xml-hint\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"./xml-hint\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var langs = \"ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu\".split(\" \");\n  var targets = [\"_blank\", \"_self\", \"_top\", \"_parent\"];\n  var charsets = [\"ascii\", \"utf-8\", \"utf-16\", \"latin1\", \"latin1\"];\n  var methods = [\"get\", \"post\", \"put\", \"delete\"];\n  var encs = [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"];\n  var media = [\"all\", \"screen\", \"print\", \"embossed\", \"braille\", \"handheld\", \"print\", \"projection\", \"screen\", \"tty\", \"tv\", \"speech\",\n               \"3d-glasses\", \"resolution [>][<][=] [X]\", \"device-aspect-ratio: X/Y\", \"orientation:portrait\",\n               \"orientation:landscape\", \"device-height: [X]\", \"device-width: [X]\"];\n  var s = { attrs: {} }; // Simple tag, reused for a whole lot of tags\n\n  var data = {\n    a: {\n      attrs: {\n        href: null, ping: null, type: null,\n        media: media,\n        target: targets,\n        hreflang: langs\n      }\n    },\n    abbr: s,\n    acronym: s,\n    address: s,\n    applet: s,\n    area: {\n      attrs: {\n        alt: null, coords: null, href: null, target: null, ping: null,\n        media: media, hreflang: langs, type: null,\n        shape: [\"default\", \"rect\", \"circle\", \"poly\"]\n      }\n    },\n    article: s,\n    aside: s,\n    audio: {\n      attrs: {\n        src: null, mediagroup: null,\n        crossorigin: [\"anonymous\", \"use-credentials\"],\n        preload: [\"none\", \"metadata\", \"auto\"],\n        autoplay: [\"\", \"autoplay\"],\n        loop: [\"\", \"loop\"],\n        controls: [\"\", \"controls\"]\n      }\n    },\n    b: s,\n    base: { attrs: { href: null, target: targets } },\n    basefont: s,\n    bdi: s,\n    bdo: s,\n    big: s,\n    blockquote: { attrs: { cite: null } },\n    body: s,\n    br: s,\n    button: {\n      attrs: {\n        form: null, formaction: null, name: null, value: null,\n        autofocus: [\"\", \"autofocus\"],\n        disabled: [\"\", \"autofocus\"],\n        formenctype: encs,\n        formmethod: methods,\n        formnovalidate: [\"\", \"novalidate\"],\n        formtarget: targets,\n        type: [\"submit\", \"reset\", \"button\"]\n      }\n    },\n    canvas: { attrs: { width: null, height: null } },\n    caption: s,\n    center: s,\n    cite: s,\n    code: s,\n    col: { attrs: { span: null } },\n    colgroup: { attrs: { span: null } },\n    command: {\n      attrs: {\n        type: [\"command\", \"checkbox\", \"radio\"],\n        label: null, icon: null, radiogroup: null, command: null, title: null,\n        disabled: [\"\", \"disabled\"],\n        checked: [\"\", \"checked\"]\n      }\n    },\n    data: { attrs: { value: null } },\n    datagrid: { attrs: { disabled: [\"\", \"disabled\"], multiple: [\"\", \"multiple\"] } },\n    datalist: { attrs: { data: null } },\n    dd: s,\n    del: { attrs: { cite: null, datetime: null } },\n    details: { attrs: { open: [\"\", \"open\"] } },\n    dfn: s,\n    dir: s,\n    div: s,\n    dl: s,\n    dt: s,\n    em: s,\n    embed: { attrs: { src: null, type: null, width: null, height: null } },\n    eventsource: { attrs: { src: null } },\n    fieldset: { attrs: { disabled: [\"\", \"disabled\"], form: null, name: null } },\n    figcaption: s,\n    figure: s,\n    font: s,\n    footer: s,\n    form: {\n      attrs: {\n        action: null, name: null,\n        \"accept-charset\": charsets,\n        autocomplete: [\"on\", \"off\"],\n        enctype: encs,\n        method: methods,\n        novalidate: [\"\", \"novalidate\"],\n        target: targets\n      }\n    },\n    frame: s,\n    frameset: s,\n    h1: s, h2: s, h3: s, h4: s, h5: s, h6: s,\n    head: {\n      attrs: {},\n      children: [\"title\", \"base\", \"link\", \"style\", \"meta\", \"script\", \"noscript\", \"command\"]\n    },\n    header: s,\n    hgroup: s,\n    hr: s,\n    html: {\n      attrs: { manifest: null },\n      children: [\"head\", \"body\"]\n    },\n    i: s,\n    iframe: {\n      attrs: {\n        src: null, srcdoc: null, name: null, width: null, height: null,\n        sandbox: [\"allow-top-navigation\", \"allow-same-origin\", \"allow-forms\", \"allow-scripts\"],\n        seamless: [\"\", \"seamless\"]\n      }\n    },\n    img: {\n      attrs: {\n        alt: null, src: null, ismap: null, usemap: null, width: null, height: null,\n        crossorigin: [\"anonymous\", \"use-credentials\"]\n      }\n    },\n    input: {\n      attrs: {\n        alt: null, dirname: null, form: null, formaction: null,\n        height: null, list: null, max: null, maxlength: null, min: null,\n        name: null, pattern: null, placeholder: null, size: null, src: null,\n        step: null, value: null, width: null,\n        accept: [\"audio/*\", \"video/*\", \"image/*\"],\n        autocomplete: [\"on\", \"off\"],\n        autofocus: [\"\", \"autofocus\"],\n        checked: [\"\", \"checked\"],\n        disabled: [\"\", \"disabled\"],\n        formenctype: encs,\n        formmethod: methods,\n        formnovalidate: [\"\", \"novalidate\"],\n        formtarget: targets,\n        multiple: [\"\", \"multiple\"],\n        readonly: [\"\", \"readonly\"],\n        required: [\"\", \"required\"],\n        type: [\"hidden\", \"text\", \"search\", \"tel\", \"url\", \"email\", \"password\", \"datetime\", \"date\", \"month\",\n               \"week\", \"time\", \"datetime-local\", \"number\", \"range\", \"color\", \"checkbox\", \"radio\",\n               \"file\", \"submit\", \"image\", \"reset\", \"button\"]\n      }\n    },\n    ins: { attrs: { cite: null, datetime: null } },\n    kbd: s,\n    keygen: {\n      attrs: {\n        challenge: null, form: null, name: null,\n        autofocus: [\"\", \"autofocus\"],\n        disabled: [\"\", \"disabled\"],\n        keytype: [\"RSA\"]\n      }\n    },\n    label: { attrs: { \"for\": null, form: null } },\n    legend: s,\n    li: { attrs: { value: null } },\n    link: {\n      attrs: {\n        href: null, type: null,\n        hreflang: langs,\n        media: media,\n        sizes: [\"all\", \"16x16\", \"16x16 32x32\", \"16x16 32x32 64x64\"]\n      }\n    },\n    map: { attrs: { name: null } },\n    mark: s,\n    menu: { attrs: { label: null, type: [\"list\", \"context\", \"toolbar\"] } },\n    meta: {\n      attrs: {\n        content: null,\n        charset: charsets,\n        name: [\"viewport\", \"application-name\", \"author\", \"description\", \"generator\", \"keywords\"],\n        \"http-equiv\": [\"content-language\", \"content-type\", \"default-style\", \"refresh\"]\n      }\n    },\n    meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },\n    nav: s,\n    noframes: s,\n    noscript: s,\n    object: {\n      attrs: {\n        data: null, type: null, name: null, usemap: null, form: null, width: null, height: null,\n        typemustmatch: [\"\", \"typemustmatch\"]\n      }\n    },\n    ol: { attrs: { reversed: [\"\", \"reversed\"], start: null, type: [\"1\", \"a\", \"A\", \"i\", \"I\"] } },\n    optgroup: { attrs: { disabled: [\"\", \"disabled\"], label: null } },\n    option: { attrs: { disabled: [\"\", \"disabled\"], label: null, selected: [\"\", \"selected\"], value: null } },\n    output: { attrs: { \"for\": null, form: null, name: null } },\n    p: s,\n    param: { attrs: { name: null, value: null } },\n    pre: s,\n    progress: { attrs: { value: null, max: null } },\n    q: { attrs: { cite: null } },\n    rp: s,\n    rt: s,\n    ruby: s,\n    s: s,\n    samp: s,\n    script: {\n      attrs: {\n        type: [\"text/javascript\"],\n        src: null,\n        async: [\"\", \"async\"],\n        defer: [\"\", \"defer\"],\n        charset: charsets\n      }\n    },\n    section: s,\n    select: {\n      attrs: {\n        form: null, name: null, size: null,\n        autofocus: [\"\", \"autofocus\"],\n        disabled: [\"\", \"disabled\"],\n        multiple: [\"\", \"multiple\"]\n      }\n    },\n    small: s,\n    source: { attrs: { src: null, type: null, media: null } },\n    span: s,\n    strike: s,\n    strong: s,\n    style: {\n      attrs: {\n        type: [\"text/css\"],\n        media: media,\n        scoped: null\n      }\n    },\n    sub: s,\n    summary: s,\n    sup: s,\n    table: s,\n    tbody: s,\n    td: { attrs: { colspan: null, rowspan: null, headers: null } },\n    textarea: {\n      attrs: {\n        dirname: null, form: null, maxlength: null, name: null, placeholder: null,\n        rows: null, cols: null,\n        autofocus: [\"\", \"autofocus\"],\n        disabled: [\"\", \"disabled\"],\n        readonly: [\"\", \"readonly\"],\n        required: [\"\", \"required\"],\n        wrap: [\"soft\", \"hard\"]\n      }\n    },\n    tfoot: s,\n    th: { attrs: { colspan: null, rowspan: null, headers: null, scope: [\"row\", \"col\", \"rowgroup\", \"colgroup\"] } },\n    thead: s,\n    time: { attrs: { datetime: null } },\n    title: s,\n    tr: s,\n    track: {\n      attrs: {\n        src: null, label: null, \"default\": null,\n        kind: [\"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\"],\n        srclang: langs\n      }\n    },\n    tt: s,\n    u: s,\n    ul: s,\n    \"var\": s,\n    video: {\n      attrs: {\n        src: null, poster: null, width: null, height: null,\n        crossorigin: [\"anonymous\", \"use-credentials\"],\n        preload: [\"auto\", \"metadata\", \"none\"],\n        autoplay: [\"\", \"autoplay\"],\n        mediagroup: [\"movie\"],\n        muted: [\"\", \"muted\"],\n        controls: [\"\", \"controls\"]\n      }\n    },\n    wbr: s\n  };\n\n  var globalAttrs = {\n    accesskey: [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"],\n    \"class\": null,\n    contenteditable: [\"true\", \"false\"],\n    contextmenu: null,\n    dir: [\"ltr\", \"rtl\", \"auto\"],\n    draggable: [\"true\", \"false\", \"auto\"],\n    dropzone: [\"copy\", \"move\", \"link\", \"string:\", \"file:\"],\n    hidden: [\"hidden\"],\n    id: null,\n    inert: [\"inert\"],\n    itemid: null,\n    itemprop: null,\n    itemref: null,\n    itemscope: [\"itemscope\"],\n    itemtype: null,\n    lang: [\"en\", \"es\"],\n    spellcheck: [\"true\", \"false\"],\n    style: null,\n    tabindex: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"],\n    title: null,\n    translate: [\"yes\", \"no\"],\n    onclick: null,\n    rel: [\"stylesheet\", \"alternate\", \"author\", \"bookmark\", \"help\", \"license\", \"next\", \"nofollow\", \"noreferrer\", \"prefetch\", \"prev\", \"search\", \"tag\"]\n  };\n  function populate(obj) {\n    for (var attr in globalAttrs) if (globalAttrs.hasOwnProperty(attr))\n      obj.attrs[attr] = globalAttrs[attr];\n  }\n\n  populate(s);\n  for (var tag in data) if (data.hasOwnProperty(tag) && data[tag] != s)\n    populate(data[tag]);\n\n  CodeMirror.htmlSchema = data;\n  function htmlHint(cm, options) {\n    var local = {schemaInfo: data};\n    if (options) for (var opt in options) local[opt] = options[opt];\n    return CodeMirror.hint.xml(cm, local);\n  }\n  CodeMirror.registerHelper(\"hint\", \"html\", htmlHint);\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/hint/javascript-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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    token.state = CodeMirror.innerMode(editor.getMode(), token.state).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 continue debugger default delete do else false finally for function \" +\n                  \"if in instanceof new null return switch throw true try typeof var void while with\").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 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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/hint/show-hint.css",
    "content": ".CodeMirror-hints {\n  position: absolute;\n  z-index: 10;\n  overflow: hidden;\n  list-style: none;\n\n  margin: 0;\n  padding: 2px;\n\n  -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  border-radius: 3px;\n  border: 1px solid silver;\n\n  background: white;\n  font-size: 90%;\n  font-family: monospace;\n\n  max-height: 20em;\n  overflow-y: auto;\n}\n\n.CodeMirror-hint {\n  margin: 0;\n  padding: 0 4px;\n  border-radius: 2px;\n  white-space: pre;\n  color: black;\n  cursor: pointer;\n}\n\nli.CodeMirror-hint-active {\n  background: #08f;\n  color: white;\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/hint/show-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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  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      if (data && this.data && isNewCompletion(this.data, data)) return;\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 isNewCompletion(old, nw) {\n    var moved = CodeMirror.cmpPos(nw.from, old.from)\n    return moved > 0 && old.to.ch - old.from.ch != nw.to.ch - nw.from.ch\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    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\n    var hints = this.hints = document.createElement(\"ul\");\n    hints.className = \"CodeMirror-hints\";\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(document.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(document.createTextNode(cur.displayText || getText(cur)));\n      elt.hintId = i;\n    }\n\n    var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);\n    var left = pos.left, top = pos.bottom, below = true;\n    hints.style.left = left + \"px\";\n    hints.style.top = top + \"px\";\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 = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth);\n    var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);\n    (completion.options.container || document.body).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) + \"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) + \"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) + \"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) + \"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 - (window.pageYOffset || (document.documentElement || document.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\n    CodeMirror.signal(data, \"select\", completions[0], hints.firstChild);\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      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      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      CodeMirror.signal(this.data, \"select\", this.data.list[this.selectedHint], node);\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 to = CodeMirror.Pos(cur.line, token.end);\n    if (token.string && /\\w/.test(token.string[token.string.length - 1])) {\n      var term = token.string, from = CodeMirror.Pos(cur.line, token.start);\n    } else {\n      var term = \"\", from = to;\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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/hint/sql-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../../mode/sql/sql\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../../mode/sql/sql\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var tables;\n  var defaultTable;\n  var keywords;\n  var identifierQuote;\n  var CONS = {\n    QUERY_DIV: \";\",\n    ALIAS_KEYWORD: \"AS\"\n  };\n  var Pos = CodeMirror.Pos, cmpPos = CodeMirror.cmpPos;\n\n  function isArray(val) { return Object.prototype.toString.call(val) == \"[object Array]\" }\n\n  function getKeywords(editor) {\n    var mode = editor.doc.modeOption;\n    if (mode === \"sql\") mode = \"text/x-sql\";\n    return CodeMirror.resolveMode(mode).keywords;\n  }\n\n  function getIdentifierQuote(editor) {\n    var mode = editor.doc.modeOption;\n    if (mode === \"sql\") mode = \"text/x-sql\";\n    return CodeMirror.resolveMode(mode).identifierQuote || \"`\";\n  }\n\n  function getText(item) {\n    return typeof item == \"string\" ? item : item.text;\n  }\n\n  function wrapTable(name, value) {\n    if (isArray(value)) value = {columns: value}\n    if (!value.text) value.text = name\n    return value\n  }\n\n  function parseTables(input) {\n    var result = {}\n    if (isArray(input)) {\n      for (var i = input.length - 1; i >= 0; i--) {\n        var item = input[i]\n        result[getText(item).toUpperCase()] = wrapTable(getText(item), item)\n      }\n    } else if (input) {\n      for (var name in input)\n        result[name.toUpperCase()] = wrapTable(name, input[name])\n    }\n    return result\n  }\n\n  function getTable(name) {\n    return tables[name.toUpperCase()]\n  }\n\n  function shallowClone(object) {\n    var result = {};\n    for (var key in object) if (object.hasOwnProperty(key))\n      result[key] = object[key];\n    return result;\n  }\n\n  function match(string, word) {\n    var len = string.length;\n    var sub = getText(word).substr(0, len);\n    return string.toUpperCase() === sub.toUpperCase();\n  }\n\n  function addMatches(result, search, wordlist, formatter) {\n    if (isArray(wordlist)) {\n      for (var i = 0; i < wordlist.length; i++)\n        if (match(search, wordlist[i])) result.push(formatter(wordlist[i]))\n    } else {\n      for (var word in wordlist) if (wordlist.hasOwnProperty(word)) {\n        var val = wordlist[word]\n        if (!val || val === true)\n          val = word\n        else\n          val = val.displayText ? {text: val.text, displayText: val.displayText} : val.text\n        if (match(search, val)) result.push(formatter(val))\n      }\n    }\n  }\n\n  function cleanName(name) {\n    // Get rid name from identifierQuote and preceding dot(.)\n    if (name.charAt(0) == \".\") {\n      name = name.substr(1);\n    }\n    // replace doublicated identifierQuotes with single identifierQuotes\n    // and remove single identifierQuotes\n    var nameParts = name.split(identifierQuote+identifierQuote);\n    for (var i = 0; i < nameParts.length; i++)\n      nameParts[i] = nameParts[i].replace(new RegExp(identifierQuote,\"g\"), \"\");\n    return nameParts.join(identifierQuote);\n  }\n\n  function insertIdentifierQuotes(name) {\n    var nameParts = getText(name).split(\".\");\n    for (var i = 0; i < nameParts.length; i++)\n      nameParts[i] = identifierQuote +\n        // doublicate identifierQuotes\n        nameParts[i].replace(new RegExp(identifierQuote,\"g\"), identifierQuote+identifierQuote) +\n        identifierQuote;\n    var escaped = nameParts.join(\".\");\n    if (typeof name == \"string\") return escaped;\n    name = shallowClone(name);\n    name.text = escaped;\n    return name;\n  }\n\n  function nameCompletion(cur, token, result, editor) {\n    // Try to complete table, column names and return start position of completion\n    var useIdentifierQuotes = false;\n    var nameParts = [];\n    var start = token.start;\n    var cont = true;\n    while (cont) {\n      cont = (token.string.charAt(0) == \".\");\n      useIdentifierQuotes = useIdentifierQuotes || (token.string.charAt(0) == identifierQuote);\n\n      start = token.start;\n      nameParts.unshift(cleanName(token.string));\n\n      token = editor.getTokenAt(Pos(cur.line, token.start));\n      if (token.string == \".\") {\n        cont = true;\n        token = editor.getTokenAt(Pos(cur.line, token.start));\n      }\n    }\n\n    // Try to complete table names\n    var string = nameParts.join(\".\");\n    addMatches(result, string, tables, function(w) {\n      return useIdentifierQuotes ? insertIdentifierQuotes(w) : w;\n    });\n\n    // Try to complete columns from defaultTable\n    addMatches(result, string, defaultTable, function(w) {\n      return useIdentifierQuotes ? insertIdentifierQuotes(w) : w;\n    });\n\n    // Try to complete columns\n    string = nameParts.pop();\n    var table = nameParts.join(\".\");\n\n    var alias = false;\n    var aliasTable = table;\n    // Check if table is available. If not, find table by Alias\n    if (!getTable(table)) {\n      var oldTable = table;\n      table = findTableByAlias(table, editor);\n      if (table !== oldTable) alias = true;\n    }\n\n    var columns = getTable(table);\n    if (columns && columns.columns)\n      columns = columns.columns;\n\n    if (columns) {\n      addMatches(result, string, columns, function(w) {\n        var tableInsert = table;\n        if (alias == true) tableInsert = aliasTable;\n        if (typeof w == \"string\") {\n          w = tableInsert + \".\" + w;\n        } else {\n          w = shallowClone(w);\n          w.text = tableInsert + \".\" + w.text;\n        }\n        return useIdentifierQuotes ? insertIdentifierQuotes(w) : w;\n      });\n    }\n\n    return start;\n  }\n\n  function eachWord(lineText, f) {\n    if (!lineText) return;\n    var excepted = /[,;]/g;\n    var words = lineText.split(\" \");\n    for (var i = 0; i < words.length; i++) {\n      f(words[i]?words[i].replace(excepted, '') : '');\n    }\n  }\n\n  function findTableByAlias(alias, editor) {\n    var doc = editor.doc;\n    var fullQuery = doc.getValue();\n    var aliasUpperCase = alias.toUpperCase();\n    var previousWord = \"\";\n    var table = \"\";\n    var separator = [];\n    var validRange = {\n      start: Pos(0, 0),\n      end: Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).length)\n    };\n\n    //add separator\n    var indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV);\n    while(indexOfSeparator != -1) {\n      separator.push(doc.posFromIndex(indexOfSeparator));\n      indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV, indexOfSeparator+1);\n    }\n    separator.unshift(Pos(0, 0));\n    separator.push(Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).text.length));\n\n    //find valid range\n    var prevItem = null;\n    var current = editor.getCursor()\n    for (var i = 0; i < separator.length; i++) {\n      if ((prevItem == null || cmpPos(current, prevItem) > 0) && cmpPos(current, separator[i]) <= 0) {\n        validRange = {start: prevItem, end: separator[i]};\n        break;\n      }\n      prevItem = separator[i];\n    }\n\n    var query = doc.getRange(validRange.start, validRange.end, false);\n\n    for (var i = 0; i < query.length; i++) {\n      var lineText = query[i];\n      eachWord(lineText, function(word) {\n        var wordUpperCase = word.toUpperCase();\n        if (wordUpperCase === aliasUpperCase && getTable(previousWord))\n          table = previousWord;\n        if (wordUpperCase !== CONS.ALIAS_KEYWORD)\n          previousWord = word;\n      });\n      if (table) break;\n    }\n    return table;\n  }\n\n  CodeMirror.registerHelper(\"hint\", \"sql\", function(editor, options) {\n    tables = parseTables(options && options.tables)\n    var defaultTableName = options && options.defaultTable;\n    var disableKeywords = options && options.disableKeywords;\n    defaultTable = defaultTableName && getTable(defaultTableName);\n    keywords = getKeywords(editor);\n    identifierQuote = getIdentifierQuote(editor);\n\n    if (defaultTableName && !defaultTable)\n      defaultTable = findTableByAlias(defaultTableName, editor);\n\n    defaultTable = defaultTable || [];\n\n    if (defaultTable.columns)\n      defaultTable = defaultTable.columns;\n\n    var cur = editor.getCursor();\n    var result = [];\n    var token = editor.getTokenAt(cur), start, end, search;\n    if (token.end > cur.ch) {\n      token.end = cur.ch;\n      token.string = token.string.slice(0, cur.ch - token.start);\n    }\n\n    if (token.string.match(/^[.`\"\\w@]\\w*$/)) {\n      search = token.string;\n      start = token.start;\n      end = token.end;\n    } else {\n      start = end = cur.ch;\n      search = \"\";\n    }\n    if (search.charAt(0) == \".\" || search.charAt(0) == identifierQuote) {\n      start = nameCompletion(cur, token, result, editor);\n    } else {\n      addMatches(result, search, tables, function(w) {return w;});\n      addMatches(result, search, defaultTable, function(w) {return w;});\n      if (!disableKeywords)\n        addMatches(result, search, keywords, function(w) {return w.toUpperCase();});\n    }\n\n    return {list: result, from: Pos(cur.line, start), to: Pos(cur.line, end)};\n  });\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/hint/xml-hint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 Pos = CodeMirror.Pos;\n\n  function getHints(cm, options) {\n    var tags = options && options.schemaInfo;\n    var quote = (options && options.quoteChar) || '\"';\n    if (!tags) return;\n    var cur = cm.getCursor(), token = cm.getTokenAt(cur);\n    if (token.end > cur.ch) {\n      token.end = cur.ch;\n      token.string = token.string.slice(0, cur.ch - token.start);\n    }\n    var inner = CodeMirror.innerMode(cm.getMode(), token.state);\n    if (inner.mode.name != \"xml\") return;\n    var result = [], replaceToken = false, prefix;\n    var tag = /\\btag\\b/.test(token.type) && !/>$/.test(token.string);\n    var tagName = tag && /^\\w/.test(token.string), tagStart;\n\n    if (tagName) {\n      var before = cm.getLine(cur.line).slice(Math.max(0, token.start - 2), token.start);\n      var tagType = /<\\/$/.test(before) ? \"close\" : /<$/.test(before) ? \"open\" : null;\n      if (tagType) tagStart = token.start - (tagType == \"close\" ? 2 : 1);\n    } else if (tag && token.string == \"<\") {\n      tagType = \"open\";\n    } else if (tag && token.string == \"</\") {\n      tagType = \"close\";\n    }\n\n    if (!tag && !inner.state.tagName || tagType) {\n      if (tagName)\n        prefix = token.string;\n      replaceToken = tagType;\n      var cx = inner.state.context, curTag = cx && tags[cx.tagName];\n      var childList = cx ? curTag && curTag.children : tags[\"!top\"];\n      if (childList && tagType != \"close\") {\n        for (var i = 0; i < childList.length; ++i) if (!prefix || childList[i].lastIndexOf(prefix, 0) == 0)\n          result.push(\"<\" + childList[i]);\n      } else if (tagType != \"close\") {\n        for (var name in tags)\n          if (tags.hasOwnProperty(name) && name != \"!top\" && name != \"!attrs\" && (!prefix || name.lastIndexOf(prefix, 0) == 0))\n            result.push(\"<\" + name);\n      }\n      if (cx && (!prefix || tagType == \"close\" && cx.tagName.lastIndexOf(prefix, 0) == 0))\n        result.push(\"</\" + cx.tagName + \">\");\n    } else {\n      // Attribute completion\n      var curTag = tags[inner.state.tagName], attrs = curTag && curTag.attrs;\n      var globalAttrs = tags[\"!attrs\"];\n      if (!attrs && !globalAttrs) return;\n      if (!attrs) {\n        attrs = globalAttrs;\n      } else if (globalAttrs) { // Combine tag-local and global attributes\n        var set = {};\n        for (var nm in globalAttrs) if (globalAttrs.hasOwnProperty(nm)) set[nm] = globalAttrs[nm];\n        for (var nm in attrs) if (attrs.hasOwnProperty(nm)) set[nm] = attrs[nm];\n        attrs = set;\n      }\n      if (token.type == \"string\" || token.string == \"=\") { // A value\n        var before = cm.getRange(Pos(cur.line, Math.max(0, cur.ch - 60)),\n                                 Pos(cur.line, token.type == \"string\" ? token.start : token.end));\n        var atName = before.match(/([^\\s\\u00a0=<>\\\"\\']+)=$/), atValues;\n        if (!atName || !attrs.hasOwnProperty(atName[1]) || !(atValues = attrs[atName[1]])) return;\n        if (typeof atValues == 'function') atValues = atValues.call(this, cm); // Functions can be used to supply values for autocomplete widget\n        if (token.type == \"string\") {\n          prefix = token.string;\n          var n = 0;\n          if (/['\"]/.test(token.string.charAt(0))) {\n            quote = token.string.charAt(0);\n            prefix = token.string.slice(1);\n            n++;\n          }\n          var len = token.string.length;\n          if (/['\"]/.test(token.string.charAt(len - 1))) {\n            quote = token.string.charAt(len - 1);\n            prefix = token.string.substr(n, len - 2);\n          }\n          replaceToken = true;\n        }\n        for (var i = 0; i < atValues.length; ++i) if (!prefix || atValues[i].lastIndexOf(prefix, 0) == 0)\n          result.push(quote + atValues[i] + quote);\n      } else { // An attribute name\n        if (token.type == \"attribute\") {\n          prefix = token.string;\n          replaceToken = true;\n        }\n        for (var attr in attrs) if (attrs.hasOwnProperty(attr) && (!prefix || attr.lastIndexOf(prefix, 0) == 0))\n          result.push(attr);\n      }\n    }\n    return {\n      list: result,\n      from: replaceToken ? Pos(cur.line, tagStart == null ? token.start : tagStart) : cur,\n      to: replaceToken ? Pos(cur.line, token.end) : cur\n    };\n  }\n\n  CodeMirror.registerHelper(\"hint\", \"xml\", getHints);\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/lint/coffeescript-lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js\n\n// declare global: coffeelint\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.registerHelper(\"lint\", \"coffeescript\", function(text) {\n  var found = [];\n  var parseError = function(err) {\n    var loc = err.lineNumber;\n    found.push({from: CodeMirror.Pos(loc-1, 0),\n                to: CodeMirror.Pos(loc, 0),\n                severity: err.level,\n                message: err.message});\n  };\n  try {\n    var res = coffeelint.lint(text);\n    for(var i = 0; i < res.length; i++) {\n      parseError(res[i]);\n    }\n  } catch(e) {\n    found.push({from: CodeMirror.Pos(e.location.first_line, 0),\n                to: CodeMirror.Pos(e.location.last_line, e.location.last_column),\n                severity: 'error',\n                message: e.message});\n  }\n  return found;\n});\n\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/lint/css-lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// Depends on csslint.js from https://github.com/stubbornella/csslint\n\n// declare global: CSSLint\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.registerHelper(\"lint\", \"css\", function(text) {\n  var found = [];\n  if (!window.CSSLint) return found;\n  var results = CSSLint.verify(text), messages = results.messages, message = null;\n  for ( var i = 0; i < messages.length; i++) {\n    message = messages[i];\n    var startLine = message.line -1, endLine = message.line -1, startCol = message.col -1, endCol = message.col;\n    found.push({\n      from: CodeMirror.Pos(startLine, startCol),\n      to: CodeMirror.Pos(endLine, endCol),\n      message: message.message,\n      severity : message.type\n    });\n  }\n  return found;\n});\n\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/lint/html-lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// Depends on htmlhint.js from http://htmlhint.com/js/htmlhint.js\n\n// declare global: HTMLHint\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"htmlhint\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"htmlhint\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var defaultRules = {\n    \"tagname-lowercase\": true,\n    \"attr-lowercase\": true,\n    \"attr-value-double-quotes\": true,\n    \"doctype-first\": false,\n    \"tag-pair\": true,\n    \"spec-char-escape\": true,\n    \"id-unique\": true,\n    \"src-not-empty\": true,\n    \"attr-no-duplication\": true\n  };\n\n  CodeMirror.registerHelper(\"lint\", \"html\", function(text, options) {\n    var found = [];\n    if (!window.HTMLHint) return found;\n    var messages = HTMLHint.verify(text, options && options.rules || defaultRules);\n    for (var i = 0; i < messages.length; i++) {\n      var message = messages[i];\n      var startLine = message.line - 1, endLine = message.line - 1, startCol = message.col - 1, endCol = message.col;\n      found.push({\n        from: CodeMirror.Pos(startLine, startCol),\n        to: CodeMirror.Pos(endLine, endCol),\n        message: message.message,\n        severity : message.type\n      });\n    }\n    return found;\n  });\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/lint/javascript-lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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  // declare global: JSHINT\n\n  var bogus = [ \"Dangerous comment\" ];\n\n  var warnings = [ [ \"Expected '{'\",\n                     \"Statement body should be inside '{ }' braces.\" ] ];\n\n  var errors = [ \"Missing semicolon\", \"Extra comma\", \"Missing property name\",\n                 \"Unmatched \", \" and instead saw\", \" is not defined\",\n                 \"Unclosed string\", \"Stopping, unable to continue\" ];\n\n  function validator(text, options) {\n    if (!window.JSHINT) return [];\n    JSHINT(text, options, options.globals);\n    var errors = JSHINT.data().errors, result = [];\n    if (errors) parseErrors(errors, result);\n    return result;\n  }\n\n  CodeMirror.registerHelper(\"lint\", \"javascript\", validator);\n\n  function cleanup(error) {\n    // All problems are warnings by default\n    fixWith(error, warnings, \"warning\", true);\n    fixWith(error, errors, \"error\");\n\n    return isBogus(error) ? null : error;\n  }\n\n  function fixWith(error, fixes, severity, force) {\n    var description, fix, find, replace, found;\n\n    description = error.description;\n\n    for ( var i = 0; i < fixes.length; i++) {\n      fix = fixes[i];\n      find = (typeof fix === \"string\" ? fix : fix[0]);\n      replace = (typeof fix === \"string\" ? null : fix[1]);\n      found = description.indexOf(find) !== -1;\n\n      if (force || found) {\n        error.severity = severity;\n      }\n      if (found && replace) {\n        error.description = replace;\n      }\n    }\n  }\n\n  function isBogus(error) {\n    var description = error.description;\n    for ( var i = 0; i < bogus.length; i++) {\n      if (description.indexOf(bogus[i]) !== -1) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  function parseErrors(errors, output) {\n    for ( var i = 0; i < errors.length; i++) {\n      var error = errors[i];\n      if (error) {\n        var linetabpositions, index;\n\n        linetabpositions = [];\n\n        // This next block is to fix a problem in jshint. Jshint\n        // replaces\n        // all tabs with spaces then performs some checks. The error\n        // positions (character/space) are then reported incorrectly,\n        // not taking the replacement step into account. Here we look\n        // at the evidence line and try to adjust the character position\n        // to the correct value.\n        if (error.evidence) {\n          // Tab positions are computed once per line and cached\n          var tabpositions = linetabpositions[error.line];\n          if (!tabpositions) {\n            var evidence = error.evidence;\n            tabpositions = [];\n            // ugggh phantomjs does not like this\n            // forEachChar(evidence, function(item, index) {\n            Array.prototype.forEach.call(evidence, function(item,\n                                                            index) {\n              if (item === '\\t') {\n                // First col is 1 (not 0) to match error\n                // positions\n                tabpositions.push(index + 1);\n              }\n            });\n            linetabpositions[error.line] = tabpositions;\n          }\n          if (tabpositions.length > 0) {\n            var pos = error.character;\n            tabpositions.forEach(function(tabposition) {\n              if (pos > tabposition) pos -= 1;\n            });\n            error.character = pos;\n          }\n        }\n\n        var start = error.character - 1, end = start + 1;\n        if (error.evidence) {\n          index = error.evidence.substring(start).search(/.\\b/);\n          if (index > -1) {\n            end += index;\n          }\n        }\n\n        // Convert to format expected by validation service\n        error.description = error.reason;// + \"(jshint)\";\n        error.start = error.character;\n        error.end = end;\n        error = cleanup(error);\n\n        if (error)\n          output.push({message: error.description,\n                       severity: error.severity,\n                       from: CodeMirror.Pos(error.line - 1, start),\n                       to: CodeMirror.Pos(error.line - 1, end)});\n      }\n    }\n  }\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/lint/json-lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// Depends on jsonlint.js from https://github.com/zaach/jsonlint\n\n// declare global: jsonlint\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.registerHelper(\"lint\", \"json\", function(text) {\n  var found = [];\n  jsonlint.parseError = function(str, hash) {\n    var loc = hash.loc;\n    found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column),\n                to: CodeMirror.Pos(loc.last_line - 1, loc.last_column),\n                message: str});\n  };\n  try { jsonlint.parse(text); }\n  catch(e) {}\n  return found;\n});\n\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/lint/lint.css",
    "content": "/* The lint marker gutter */\n.CodeMirror-lint-markers {\n  width: 16px;\n}\n\n.CodeMirror-lint-tooltip {\n  background-color: #ffd;\n  border: 1px solid black;\n  border-radius: 4px 4px 4px 4px;\n  color: black;\n  font-family: monospace;\n  font-size: 10pt;\n  overflow: hidden;\n  padding: 2px 5px;\n  position: fixed;\n  white-space: pre;\n  white-space: pre-wrap;\n  z-index: 100;\n  max-width: 600px;\n  opacity: 0;\n  transition: opacity .4s;\n  -moz-transition: opacity .4s;\n  -webkit-transition: opacity .4s;\n  -o-transition: opacity .4s;\n  -ms-transition: opacity .4s;\n}\n\n.CodeMirror-lint-mark-error, .CodeMirror-lint-mark-warning {\n  background-position: left bottom;\n  background-repeat: repeat-x;\n}\n\n.CodeMirror-lint-mark-error {\n  background-image:\n  url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg==\")\n  ;\n}\n\n.CodeMirror-lint-mark-warning {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII=\");\n}\n\n.CodeMirror-lint-marker-error, .CodeMirror-lint-marker-warning {\n  background-position: center center;\n  background-repeat: no-repeat;\n  cursor: pointer;\n  display: inline-block;\n  height: 16px;\n  width: 16px;\n  vertical-align: middle;\n  position: relative;\n}\n\n.CodeMirror-lint-message-error, .CodeMirror-lint-message-warning {\n  padding-left: 18px;\n  background-position: top left;\n  background-repeat: no-repeat;\n}\n\n.CodeMirror-lint-marker-error, .CodeMirror-lint-message-error {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII=\");\n}\n\n.CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=\");\n}\n\n.CodeMirror-lint-marker-multiple {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC\");\n  background-repeat: no-repeat;\n  background-position: right bottom;\n  width: 100%; height: 100%;\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/lint/lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 GUTTER_ID = \"CodeMirror-lint-markers\";\n\n  function showTooltip(e, content) {\n    var tt = document.createElement(\"div\");\n    tt.className = \"CodeMirror-lint-tooltip\";\n    tt.appendChild(content.cloneNode(true));\n    document.body.appendChild(tt);\n\n    function position(e) {\n      if (!tt.parentNode) return CodeMirror.off(document, \"mousemove\", position);\n      tt.style.top = Math.max(0, e.clientY - tt.offsetHeight - 5) + \"px\";\n      tt.style.left = (e.clientX + 5) + \"px\";\n    }\n    CodeMirror.on(document, \"mousemove\", position);\n    position(e);\n    if (tt.style.opacity != null) tt.style.opacity = 1;\n    return tt;\n  }\n  function rm(elt) {\n    if (elt.parentNode) elt.parentNode.removeChild(elt);\n  }\n  function hideTooltip(tt) {\n    if (!tt.parentNode) return;\n    if (tt.style.opacity == null) rm(tt);\n    tt.style.opacity = 0;\n    setTimeout(function() { rm(tt); }, 600);\n  }\n\n  function showTooltipFor(e, content, node) {\n    var tooltip = showTooltip(e, content);\n    function hide() {\n      CodeMirror.off(node, \"mouseout\", hide);\n      if (tooltip) { hideTooltip(tooltip); tooltip = null; }\n    }\n    var poll = setInterval(function() {\n      if (tooltip) for (var n = node;; n = n.parentNode) {\n        if (n && n.nodeType == 11) n = n.host;\n        if (n == document.body) return;\n        if (!n) { hide(); break; }\n      }\n      if (!tooltip) return clearInterval(poll);\n    }, 400);\n    CodeMirror.on(node, \"mouseout\", hide);\n  }\n\n  function LintState(cm, options, hasGutter) {\n    this.marked = [];\n    this.options = options;\n    this.timeout = null;\n    this.hasGutter = hasGutter;\n    this.onMouseOver = function(e) { onMouseOver(cm, e); };\n    this.waitingFor = 0\n  }\n\n  function parseOptions(_cm, options) {\n    if (options instanceof Function) return {getAnnotations: options};\n    if (!options || options === true) options = {};\n    return options;\n  }\n\n  function clearMarks(cm) {\n    var state = cm.state.lint;\n    if (state.hasGutter) cm.clearGutter(GUTTER_ID);\n    for (var i = 0; i < state.marked.length; ++i)\n      state.marked[i].clear();\n    state.marked.length = 0;\n  }\n\n  function makeMarker(labels, severity, multiple, tooltips) {\n    var marker = document.createElement(\"div\"), inner = marker;\n    marker.className = \"CodeMirror-lint-marker-\" + severity;\n    if (multiple) {\n      inner = marker.appendChild(document.createElement(\"div\"));\n      inner.className = \"CodeMirror-lint-marker-multiple\";\n    }\n\n    if (tooltips != false) CodeMirror.on(inner, \"mouseover\", function(e) {\n      showTooltipFor(e, labels, inner);\n    });\n\n    return marker;\n  }\n\n  function getMaxSeverity(a, b) {\n    if (a == \"error\") return a;\n    else return b;\n  }\n\n  function groupByLine(annotations) {\n    var lines = [];\n    for (var i = 0; i < annotations.length; ++i) {\n      var ann = annotations[i], line = ann.from.line;\n      (lines[line] || (lines[line] = [])).push(ann);\n    }\n    return lines;\n  }\n\n  function annotationTooltip(ann) {\n    var severity = ann.severity;\n    if (!severity) severity = \"error\";\n    var tip = document.createElement(\"div\");\n    tip.className = \"CodeMirror-lint-message-\" + severity;\n    tip.appendChild(document.createTextNode(ann.message));\n    return tip;\n  }\n\n  function lintAsync(cm, getAnnotations, passOptions) {\n    var state = cm.state.lint\n    var id = ++state.waitingFor\n    function abort() {\n      id = -1\n      cm.off(\"change\", abort)\n    }\n    cm.on(\"change\", abort)\n    getAnnotations(cm.getValue(), function(annotations, arg2) {\n      cm.off(\"change\", abort)\n      if (state.waitingFor != id) return\n      if (arg2 && annotations instanceof CodeMirror) annotations = arg2\n      updateLinting(cm, annotations)\n    }, passOptions, cm);\n  }\n\n  function startLinting(cm) {\n    var state = cm.state.lint, options = state.options;\n    var passOptions = options.options || options; // Support deprecated passing of `options` property in options\n    var getAnnotations = options.getAnnotations || cm.getHelper(CodeMirror.Pos(0, 0), \"lint\");\n    if (!getAnnotations) return;\n    if (options.async || getAnnotations.async) {\n      lintAsync(cm, getAnnotations, passOptions)\n    } else {\n      var annotations = getAnnotations(cm.getValue(), passOptions, cm);\n      if (!annotations) return;\n      if (annotations.then) annotations.then(function(issues) {\n        updateLinting(cm, issues);\n      });\n      else updateLinting(cm, annotations);\n    }\n  }\n\n  function updateLinting(cm, annotationsNotSorted) {\n    clearMarks(cm);\n    var state = cm.state.lint, options = state.options;\n\n    var annotations = groupByLine(annotationsNotSorted);\n\n    for (var line = 0; line < annotations.length; ++line) {\n      var anns = annotations[line];\n      if (!anns) continue;\n\n      var maxSeverity = null;\n      var tipLabel = state.hasGutter && document.createDocumentFragment();\n\n      for (var i = 0; i < anns.length; ++i) {\n        var ann = anns[i];\n        var severity = ann.severity;\n        if (!severity) severity = \"error\";\n        maxSeverity = getMaxSeverity(maxSeverity, severity);\n\n        if (options.formatAnnotation) ann = options.formatAnnotation(ann);\n        if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann));\n\n        if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, {\n          className: \"CodeMirror-lint-mark-\" + severity,\n          __annotation: ann\n        }));\n      }\n\n      if (state.hasGutter)\n        cm.setGutterMarker(line, GUTTER_ID, makeMarker(tipLabel, maxSeverity, anns.length > 1,\n                                                       state.options.tooltips));\n    }\n    if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm);\n  }\n\n  function onChange(cm) {\n    var state = cm.state.lint;\n    if (!state) return;\n    clearTimeout(state.timeout);\n    state.timeout = setTimeout(function(){startLinting(cm);}, state.options.delay || 500);\n  }\n\n  function popupTooltips(annotations, e) {\n    var target = e.target || e.srcElement;\n    var tooltip = document.createDocumentFragment();\n    for (var i = 0; i < annotations.length; i++) {\n      var ann = annotations[i];\n      tooltip.appendChild(annotationTooltip(ann));\n    }\n    showTooltipFor(e, tooltip, target);\n  }\n\n  function onMouseOver(cm, e) {\n    var target = e.target || e.srcElement;\n    if (!/\\bCodeMirror-lint-mark-/.test(target.className)) return;\n    var box = target.getBoundingClientRect(), x = (box.left + box.right) / 2, y = (box.top + box.bottom) / 2;\n    var spans = cm.findMarksAt(cm.coordsChar({left: x, top: y}, \"client\"));\n\n    var annotations = [];\n    for (var i = 0; i < spans.length; ++i) {\n      var ann = spans[i].__annotation;\n      if (ann) annotations.push(ann);\n    }\n    if (annotations.length) popupTooltips(annotations, e);\n  }\n\n  CodeMirror.defineOption(\"lint\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      clearMarks(cm);\n      if (cm.state.lint.options.lintOnChange !== false)\n        cm.off(\"change\", onChange);\n      CodeMirror.off(cm.getWrapperElement(), \"mouseover\", cm.state.lint.onMouseOver);\n      clearTimeout(cm.state.lint.timeout);\n      delete cm.state.lint;\n    }\n\n    if (val) {\n      var gutters = cm.getOption(\"gutters\"), hasLintGutter = false;\n      for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true;\n      var state = cm.state.lint = new LintState(cm, parseOptions(cm, val), hasLintGutter);\n      if (state.options.lintOnChange !== false)\n        cm.on(\"change\", onChange);\n      if (state.options.tooltips != false && state.options.tooltips != \"gutter\")\n        CodeMirror.on(cm.getWrapperElement(), \"mouseover\", state.onMouseOver);\n\n      startLinting(cm);\n    }\n  });\n\n  CodeMirror.defineExtension(\"performLint\", function() {\n    if (this.state.lint) startLinting(this);\n  });\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/lint/yaml-lint.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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// Depends on js-yaml.js from https://github.com/nodeca/js-yaml\n\n// declare global: jsyaml\n\nCodeMirror.registerHelper(\"lint\", \"yaml\", function(text) {\n  var found = [];\n  try { jsyaml.load(text); }\n  catch(e) {\n      var loc = e.mark,\n          // js-yaml YAMLException doesn't always provide an accurate lineno\n          // e.g., when there are multiple yaml docs\n          // ---\n          // ---\n          // foo:bar\n          from = loc ? CodeMirror.Pos(loc.line, loc.column) : CodeMirror.Pos(0, 0),\n          to = from;\n      found.push({ from: from, to: to, message: e.message });\n  }\n  return found;\n});\n\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/merge/merge.css",
    "content": ".CodeMirror-merge {\n  position: relative;\n  border: 1px solid #ddd;\n  white-space: pre;\n}\n\n.CodeMirror-merge, .CodeMirror-merge .CodeMirror {\n  height: 350px;\n}\n\n.CodeMirror-merge-2pane .CodeMirror-merge-pane { width: 47%; }\n.CodeMirror-merge-2pane .CodeMirror-merge-gap { width: 6%; }\n.CodeMirror-merge-3pane .CodeMirror-merge-pane { width: 31%; }\n.CodeMirror-merge-3pane .CodeMirror-merge-gap { width: 3.5%; }\n\n.CodeMirror-merge-pane {\n  display: inline-block;\n  white-space: normal;\n  vertical-align: top;\n}\n.CodeMirror-merge-pane-rightmost {\n  position: absolute;\n  right: 0px;\n  z-index: 1;\n}\n\n.CodeMirror-merge-gap {\n  z-index: 2;\n  display: inline-block;\n  height: 100%;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  overflow: hidden;\n  border-left: 1px solid #ddd;\n  border-right: 1px solid #ddd;\n  position: relative;\n  background: #f8f8f8;\n}\n\n.CodeMirror-merge-scrolllock-wrap {\n  position: absolute;\n  bottom: 0; left: 50%;\n}\n.CodeMirror-merge-scrolllock {\n  position: relative;\n  left: -50%;\n  cursor: pointer;\n  color: #555;\n  line-height: 1;\n}\n\n.CodeMirror-merge-copybuttons-left, .CodeMirror-merge-copybuttons-right {\n  position: absolute;\n  left: 0; top: 0;\n  right: 0; bottom: 0;\n  line-height: 1;\n}\n\n.CodeMirror-merge-copy {\n  position: absolute;\n  cursor: pointer;\n  color: #44c;\n  z-index: 3;\n}\n\n.CodeMirror-merge-copy-reverse {\n  position: absolute;\n  cursor: pointer;\n  color: #44c;\n}\n\n.CodeMirror-merge-copybuttons-left .CodeMirror-merge-copy { left: 2px; }\n.CodeMirror-merge-copybuttons-right .CodeMirror-merge-copy { right: 2px; }\n\n.CodeMirror-merge-r-inserted, .CodeMirror-merge-l-inserted {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);\n  background-position: bottom left;\n  background-repeat: repeat-x;\n}\n\n.CodeMirror-merge-r-deleted, .CodeMirror-merge-l-deleted {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);\n  background-position: bottom left;\n  background-repeat: repeat-x;\n}\n\n.CodeMirror-merge-r-chunk { background: #ffffe0; }\n.CodeMirror-merge-r-chunk-start { border-top: 1px solid #ee8; }\n.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #ee8; }\n.CodeMirror-merge-r-connect { fill: #ffffe0; stroke: #ee8; stroke-width: 1px; }\n\n.CodeMirror-merge-l-chunk { background: #eef; }\n.CodeMirror-merge-l-chunk-start { border-top: 1px solid #88e; }\n.CodeMirror-merge-l-chunk-end { border-bottom: 1px solid #88e; }\n.CodeMirror-merge-l-connect { fill: #eef; stroke: #88e; stroke-width: 1px; }\n\n.CodeMirror-merge-l-chunk.CodeMirror-merge-r-chunk { background: #dfd; }\n.CodeMirror-merge-l-chunk-start.CodeMirror-merge-r-chunk-start { border-top: 1px solid #4e4; }\n.CodeMirror-merge-l-chunk-end.CodeMirror-merge-r-chunk-end { border-bottom: 1px solid #4e4; }\n\n.CodeMirror-merge-collapsed-widget:before {\n  content: \"(...)\";\n}\n.CodeMirror-merge-collapsed-widget {\n  cursor: pointer;\n  color: #88b;\n  background: #eef;\n  border: 1px solid #ddf;\n  font-size: 90%;\n  padding: 0 3px;\n  border-radius: 4px;\n}\n.CodeMirror-merge-collapsed-line .CodeMirror-gutter-elt { display: none; }\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/merge/merge.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// declare global: diff_match_patch, DIFF_INSERT, DIFF_DELETE, DIFF_EQUAL\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\")); // Note non-packaged dependency diff_match_patch\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"diff_match_patch\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n  var Pos = CodeMirror.Pos;\n  var svgNS = \"http://www.w3.org/2000/svg\";\n\n  function DiffView(mv, type) {\n    this.mv = mv;\n    this.type = type;\n    this.classes = type == \"left\"\n      ? {chunk: \"CodeMirror-merge-l-chunk\",\n         start: \"CodeMirror-merge-l-chunk-start\",\n         end: \"CodeMirror-merge-l-chunk-end\",\n         insert: \"CodeMirror-merge-l-inserted\",\n         del: \"CodeMirror-merge-l-deleted\",\n         connect: \"CodeMirror-merge-l-connect\"}\n      : {chunk: \"CodeMirror-merge-r-chunk\",\n         start: \"CodeMirror-merge-r-chunk-start\",\n         end: \"CodeMirror-merge-r-chunk-end\",\n         insert: \"CodeMirror-merge-r-inserted\",\n         del: \"CodeMirror-merge-r-deleted\",\n         connect: \"CodeMirror-merge-r-connect\"};\n  }\n\n  DiffView.prototype = {\n    constructor: DiffView,\n    init: function(pane, orig, options) {\n      this.edit = this.mv.edit;\n      ;(this.edit.state.diffViews || (this.edit.state.diffViews = [])).push(this);\n      this.orig = CodeMirror(pane, copyObj({value: orig, readOnly: !this.mv.options.allowEditingOriginals}, copyObj(options)));\n      if (this.mv.options.connect == \"align\") {\n        if (!this.edit.state.trackAlignable) this.edit.state.trackAlignable = new TrackAlignable(this.edit)\n        this.orig.state.trackAlignable = new TrackAlignable(this.orig)\n      }\n\n      this.orig.state.diffViews = [this];\n      var classLocation = options.chunkClassLocation || \"background\";\n      if (Object.prototype.toString.call(classLocation) != \"[object Array]\") classLocation = [classLocation]\n      this.classes.classLocation = classLocation\n\n      this.diff = getDiff(asString(orig), asString(options.value), this.mv.options.ignoreWhitespace);\n      this.chunks = getChunks(this.diff);\n      this.diffOutOfDate = this.dealigned = false;\n      this.needsScrollSync = null\n\n      this.showDifferences = options.showDifferences !== false;\n    },\n    registerEvents: function(otherDv) {\n      this.forceUpdate = registerUpdate(this);\n      setScrollLock(this, true, false);\n      registerScroll(this, otherDv);\n    },\n    setShowDifferences: function(val) {\n      val = val !== false;\n      if (val != this.showDifferences) {\n        this.showDifferences = val;\n        this.forceUpdate(\"full\");\n      }\n    }\n  };\n\n  function ensureDiff(dv) {\n    if (dv.diffOutOfDate) {\n      dv.diff = getDiff(dv.orig.getValue(), dv.edit.getValue(), dv.mv.options.ignoreWhitespace);\n      dv.chunks = getChunks(dv.diff);\n      dv.diffOutOfDate = false;\n      CodeMirror.signal(dv.edit, \"updateDiff\", dv.diff);\n    }\n  }\n\n  var updating = false;\n  function registerUpdate(dv) {\n    var edit = {from: 0, to: 0, marked: []};\n    var orig = {from: 0, to: 0, marked: []};\n    var debounceChange, updatingFast = false;\n    function update(mode) {\n      updating = true;\n      updatingFast = false;\n      if (mode == \"full\") {\n        if (dv.svg) clear(dv.svg);\n        if (dv.copyButtons) clear(dv.copyButtons);\n        clearMarks(dv.edit, edit.marked, dv.classes);\n        clearMarks(dv.orig, orig.marked, dv.classes);\n        edit.from = edit.to = orig.from = orig.to = 0;\n      }\n      ensureDiff(dv);\n      if (dv.showDifferences) {\n        updateMarks(dv.edit, dv.diff, edit, DIFF_INSERT, dv.classes);\n        updateMarks(dv.orig, dv.diff, orig, DIFF_DELETE, dv.classes);\n      }\n\n      if (dv.mv.options.connect == \"align\")\n        alignChunks(dv);\n      makeConnections(dv);\n      if (dv.needsScrollSync != null) syncScroll(dv, dv.needsScrollSync)\n\n      updating = false;\n    }\n    function setDealign(fast) {\n      if (updating) return;\n      dv.dealigned = true;\n      set(fast);\n    }\n    function set(fast) {\n      if (updating || updatingFast) return;\n      clearTimeout(debounceChange);\n      if (fast === true) updatingFast = true;\n      debounceChange = setTimeout(update, fast === true ? 20 : 250);\n    }\n    function change(_cm, change) {\n      if (!dv.diffOutOfDate) {\n        dv.diffOutOfDate = true;\n        edit.from = edit.to = orig.from = orig.to = 0;\n      }\n      // Update faster when a line was added/removed\n      setDealign(change.text.length - 1 != change.to.line - change.from.line);\n    }\n    function swapDoc() {\n      dv.diffOutOfDate = true;\n      dv.dealigned = true;\n      update(\"full\");\n    }\n    dv.edit.on(\"change\", change);\n    dv.orig.on(\"change\", change);\n    dv.edit.on(\"swapDoc\", swapDoc);\n    dv.orig.on(\"swapDoc\", swapDoc);\n    if (dv.mv.options.connect == \"align\") {\n      CodeMirror.on(dv.edit.state.trackAlignable, \"realign\", setDealign)\n      CodeMirror.on(dv.orig.state.trackAlignable, \"realign\", setDealign)\n    }\n    dv.edit.on(\"viewportChange\", function() { set(false); });\n    dv.orig.on(\"viewportChange\", function() { set(false); });\n    update();\n    return update;\n  }\n\n  function registerScroll(dv, otherDv) {\n    dv.edit.on(\"scroll\", function() {\n      syncScroll(dv, true) && makeConnections(dv);\n    });\n    dv.orig.on(\"scroll\", function() {\n      syncScroll(dv, false) && makeConnections(dv);\n      if (otherDv) syncScroll(otherDv, true) && makeConnections(otherDv);\n    });\n  }\n\n  function syncScroll(dv, toOrig) {\n    // Change handler will do a refresh after a timeout when diff is out of date\n    if (dv.diffOutOfDate) {\n      if (dv.lockScroll && dv.needsScrollSync == null) dv.needsScrollSync = toOrig\n      return false\n    }\n    dv.needsScrollSync = null\n    if (!dv.lockScroll) return true;\n    var editor, other, now = +new Date;\n    if (toOrig) { editor = dv.edit; other = dv.orig; }\n    else { editor = dv.orig; other = dv.edit; }\n    // Don't take action if the position of this editor was recently set\n    // (to prevent feedback loops)\n    if (editor.state.scrollSetBy == dv && (editor.state.scrollSetAt || 0) + 250 > now) return false;\n\n    var sInfo = editor.getScrollInfo();\n    if (dv.mv.options.connect == \"align\") {\n      targetPos = sInfo.top;\n    } else {\n      var halfScreen = .5 * sInfo.clientHeight, midY = sInfo.top + halfScreen;\n      var mid = editor.lineAtHeight(midY, \"local\");\n      var around = chunkBoundariesAround(dv.chunks, mid, toOrig);\n      var off = getOffsets(editor, toOrig ? around.edit : around.orig);\n      var offOther = getOffsets(other, toOrig ? around.orig : around.edit);\n      var ratio = (midY - off.top) / (off.bot - off.top);\n      var targetPos = (offOther.top - halfScreen) + ratio * (offOther.bot - offOther.top);\n\n      var botDist, mix;\n      // Some careful tweaking to make sure no space is left out of view\n      // when scrolling to top or bottom.\n      if (targetPos > sInfo.top && (mix = sInfo.top / halfScreen) < 1) {\n        targetPos = targetPos * mix + sInfo.top * (1 - mix);\n      } else if ((botDist = sInfo.height - sInfo.clientHeight - sInfo.top) < halfScreen) {\n        var otherInfo = other.getScrollInfo();\n        var botDistOther = otherInfo.height - otherInfo.clientHeight - targetPos;\n        if (botDistOther > botDist && (mix = botDist / halfScreen) < 1)\n          targetPos = targetPos * mix + (otherInfo.height - otherInfo.clientHeight - botDist) * (1 - mix);\n      }\n    }\n\n    other.scrollTo(sInfo.left, targetPos);\n    other.state.scrollSetAt = now;\n    other.state.scrollSetBy = dv;\n    return true;\n  }\n\n  function getOffsets(editor, around) {\n    var bot = around.after;\n    if (bot == null) bot = editor.lastLine() + 1;\n    return {top: editor.heightAtLine(around.before || 0, \"local\"),\n            bot: editor.heightAtLine(bot, \"local\")};\n  }\n\n  function setScrollLock(dv, val, action) {\n    dv.lockScroll = val;\n    if (val && action != false) syncScroll(dv, DIFF_INSERT) && makeConnections(dv);\n    dv.lockButton.innerHTML = val ? \"\\u21db\\u21da\" : \"\\u21db&nbsp;&nbsp;\\u21da\";\n  }\n\n  // Updating the marks for editor content\n\n  function removeClass(editor, line, classes) {\n    var locs = classes.classLocation\n    for (var i = 0; i < locs.length; i++) {\n      editor.removeLineClass(line, locs[i], classes.chunk);\n      editor.removeLineClass(line, locs[i], classes.start);\n      editor.removeLineClass(line, locs[i], classes.end);\n    }\n  }\n\n  function clearMarks(editor, arr, classes) {\n    for (var i = 0; i < arr.length; ++i) {\n      var mark = arr[i];\n      if (mark instanceof CodeMirror.TextMarker)\n        mark.clear();\n      else if (mark.parent)\n        removeClass(editor, mark, classes);\n    }\n    arr.length = 0;\n  }\n\n  // FIXME maybe add a margin around viewport to prevent too many updates\n  function updateMarks(editor, diff, state, type, classes) {\n    var vp = editor.getViewport();\n    editor.operation(function() {\n      if (state.from == state.to || vp.from - state.to > 20 || state.from - vp.to > 20) {\n        clearMarks(editor, state.marked, classes);\n        markChanges(editor, diff, type, state.marked, vp.from, vp.to, classes);\n        state.from = vp.from; state.to = vp.to;\n      } else {\n        if (vp.from < state.from) {\n          markChanges(editor, diff, type, state.marked, vp.from, state.from, classes);\n          state.from = vp.from;\n        }\n        if (vp.to > state.to) {\n          markChanges(editor, diff, type, state.marked, state.to, vp.to, classes);\n          state.to = vp.to;\n        }\n      }\n    });\n  }\n\n  function addClass(editor, lineNr, classes, main, start, end) {\n    var locs = classes.classLocation, line = editor.getLineHandle(lineNr);\n    for (var i = 0; i < locs.length; i++) {\n      if (main) editor.addLineClass(line, locs[i], classes.chunk);\n      if (start) editor.addLineClass(line, locs[i], classes.start);\n      if (end) editor.addLineClass(line, locs[i], classes.end);\n    }\n    return line;\n  }\n\n  function markChanges(editor, diff, type, marks, from, to, classes) {\n    var pos = Pos(0, 0);\n    var top = Pos(from, 0), bot = editor.clipPos(Pos(to - 1));\n    var cls = type == DIFF_DELETE ? classes.del : classes.insert;\n    function markChunk(start, end) {\n      var bfrom = Math.max(from, start), bto = Math.min(to, end);\n      for (var i = bfrom; i < bto; ++i)\n        marks.push(addClass(editor, i, classes, true, i == start, i == end - 1));\n      // When the chunk is empty, make sure a horizontal line shows up\n      if (start == end && bfrom == end && bto == end) {\n        if (bfrom)\n          marks.push(addClass(editor, bfrom - 1, classes, false, false, true));\n        else\n          marks.push(addClass(editor, bfrom, classes, false, true, false));\n      }\n    }\n\n    var chunkStart = 0, pending = false;\n    for (var i = 0; i < diff.length; ++i) {\n      var part = diff[i], tp = part[0], str = part[1];\n      if (tp == DIFF_EQUAL) {\n        var cleanFrom = pos.line + (startOfLineClean(diff, i) ? 0 : 1);\n        moveOver(pos, str);\n        var cleanTo = pos.line + (endOfLineClean(diff, i) ? 1 : 0);\n        if (cleanTo > cleanFrom) {\n          if (pending) { markChunk(chunkStart, cleanFrom); pending = false }\n          chunkStart = cleanTo;\n        }\n      } else {\n        pending = true\n        if (tp == type) {\n          var end = moveOver(pos, str, true);\n          var a = posMax(top, pos), b = posMin(bot, end);\n          if (!posEq(a, b))\n            marks.push(editor.markText(a, b, {className: cls}));\n          pos = end;\n        }\n      }\n    }\n    if (pending) markChunk(chunkStart, pos.line + 1);\n  }\n\n  // Updating the gap between editor and original\n\n  function makeConnections(dv) {\n    if (!dv.showDifferences) return;\n\n    if (dv.svg) {\n      clear(dv.svg);\n      var w = dv.gap.offsetWidth;\n      attrs(dv.svg, \"width\", w, \"height\", dv.gap.offsetHeight);\n    }\n    if (dv.copyButtons) clear(dv.copyButtons);\n\n    var vpEdit = dv.edit.getViewport(), vpOrig = dv.orig.getViewport();\n    var outerTop = dv.mv.wrap.getBoundingClientRect().top\n    var sTopEdit = outerTop - dv.edit.getScrollerElement().getBoundingClientRect().top + dv.edit.getScrollInfo().top\n    var sTopOrig = outerTop - dv.orig.getScrollerElement().getBoundingClientRect().top + dv.orig.getScrollInfo().top;\n    for (var i = 0; i < dv.chunks.length; i++) {\n      var ch = dv.chunks[i];\n      if (ch.editFrom <= vpEdit.to && ch.editTo >= vpEdit.from &&\n          ch.origFrom <= vpOrig.to && ch.origTo >= vpOrig.from)\n        drawConnectorsForChunk(dv, ch, sTopOrig, sTopEdit, w);\n    }\n  }\n\n  function getMatchingOrigLine(editLine, chunks) {\n    var editStart = 0, origStart = 0;\n    for (var i = 0; i < chunks.length; i++) {\n      var chunk = chunks[i];\n      if (chunk.editTo > editLine && chunk.editFrom <= editLine) return null;\n      if (chunk.editFrom > editLine) break;\n      editStart = chunk.editTo;\n      origStart = chunk.origTo;\n    }\n    return origStart + (editLine - editStart);\n  }\n\n  // Combines information about chunks and widgets/markers to return\n  // an array of lines, in a single editor, that probably need to be\n  // aligned with their counterparts in the editor next to it.\n  function alignableFor(cm, chunks, isOrig) {\n    var tracker = cm.state.trackAlignable\n    var start = cm.firstLine(), trackI = 0\n    var result = []\n    for (var i = 0;; i++) {\n      var chunk = chunks[i]\n      var chunkStart = !chunk ? 1e9 : isOrig ? chunk.origFrom : chunk.editFrom\n      for (; trackI < tracker.alignable.length; trackI += 2) {\n        var n = tracker.alignable[trackI] + 1\n        if (n <= start) continue\n        if (n <= chunkStart) result.push(n)\n        else break\n      }\n      if (!chunk) break\n      result.push(start = isOrig ? chunk.origTo : chunk.editTo)\n    }\n    return result\n  }\n\n  // Given information about alignable lines in two editors, fill in\n  // the result (an array of three-element arrays) to reflect the\n  // lines that need to be aligned with each other.\n  function mergeAlignable(result, origAlignable, chunks, setIndex) {\n    var rI = 0, origI = 0, chunkI = 0, diff = 0\n    outer: for (;; rI++) {\n      var nextR = result[rI], nextO = origAlignable[origI]\n      if (!nextR && nextO == null) break\n\n      var rLine = nextR ? nextR[0] : 1e9, oLine = nextO == null ? 1e9 : nextO\n      while (chunkI < chunks.length) {\n        var chunk = chunks[chunkI]\n        if (chunk.origFrom <= oLine && chunk.origTo > oLine) {\n          origI++\n          rI--\n          continue outer;\n        }\n        if (chunk.editTo > rLine) {\n          if (chunk.editFrom <= rLine) continue outer;\n          break\n        }\n        diff += (chunk.origTo - chunk.origFrom) - (chunk.editTo - chunk.editFrom)\n        chunkI++\n      }\n      if (rLine == oLine - diff) {\n        nextR[setIndex] = oLine\n        origI++\n      } else if (rLine < oLine - diff) {\n        nextR[setIndex] = rLine + diff\n      } else {\n        var record = [oLine - diff, null, null]\n        record[setIndex] = oLine\n        result.splice(rI, 0, record)\n        origI++\n      }\n    }\n  }\n\n  function findAlignedLines(dv, other) {\n    var alignable = alignableFor(dv.edit, dv.chunks, false), result = []\n    if (other) for (var i = 0, j = 0; i < other.chunks.length; i++) {\n      var n = other.chunks[i].editTo\n      while (j < alignable.length && alignable[j] < n) j++\n      if (j == alignable.length || alignable[j] != n) alignable.splice(j++, 0, n)\n    }\n    for (var i = 0; i < alignable.length; i++)\n      result.push([alignable[i], null, null])\n\n    mergeAlignable(result, alignableFor(dv.orig, dv.chunks, true), dv.chunks, 1)\n    if (other)\n      mergeAlignable(result, alignableFor(other.orig, other.chunks, true), other.chunks, 2)\n\n    return result\n  }\n\n  function alignChunks(dv, force) {\n    if (!dv.dealigned && !force) return;\n    if (!dv.orig.curOp) return dv.orig.operation(function() {\n      alignChunks(dv, force);\n    });\n\n    dv.dealigned = false;\n    var other = dv.mv.left == dv ? dv.mv.right : dv.mv.left;\n    if (other) {\n      ensureDiff(other);\n      other.dealigned = false;\n    }\n    var linesToAlign = findAlignedLines(dv, other);\n\n    // Clear old aligners\n    var aligners = dv.mv.aligners;\n    for (var i = 0; i < aligners.length; i++)\n      aligners[i].clear();\n    aligners.length = 0;\n\n    var cm = [dv.edit, dv.orig], scroll = [];\n    if (other) cm.push(other.orig);\n    for (var i = 0; i < cm.length; i++)\n      scroll.push(cm[i].getScrollInfo().top);\n\n    for (var ln = 0; ln < linesToAlign.length; ln++)\n      alignLines(cm, linesToAlign[ln], aligners);\n\n    for (var i = 0; i < cm.length; i++)\n      cm[i].scrollTo(null, scroll[i]);\n  }\n\n  function alignLines(cm, lines, aligners) {\n    var maxOffset = 0, offset = [];\n    for (var i = 0; i < cm.length; i++) if (lines[i] != null) {\n      var off = cm[i].heightAtLine(lines[i], \"local\");\n      offset[i] = off;\n      maxOffset = Math.max(maxOffset, off);\n    }\n    for (var i = 0; i < cm.length; i++) if (lines[i] != null) {\n      var diff = maxOffset - offset[i];\n      if (diff > 1)\n        aligners.push(padAbove(cm[i], lines[i], diff));\n    }\n  }\n\n  function padAbove(cm, line, size) {\n    var above = true;\n    if (line > cm.lastLine()) {\n      line--;\n      above = false;\n    }\n    var elt = document.createElement(\"div\");\n    elt.className = \"CodeMirror-merge-spacer\";\n    elt.style.height = size + \"px\"; elt.style.minWidth = \"1px\";\n    return cm.addLineWidget(line, elt, {height: size, above: above, mergeSpacer: true, handleMouseEvents: true});\n  }\n\n  function drawConnectorsForChunk(dv, chunk, sTopOrig, sTopEdit, w) {\n    var flip = dv.type == \"left\";\n    var top = dv.orig.heightAtLine(chunk.origFrom, \"local\", true) - sTopOrig;\n    if (dv.svg) {\n      var topLpx = top;\n      var topRpx = dv.edit.heightAtLine(chunk.editFrom, \"local\", true) - sTopEdit;\n      if (flip) { var tmp = topLpx; topLpx = topRpx; topRpx = tmp; }\n      var botLpx = dv.orig.heightAtLine(chunk.origTo, \"local\", true) - sTopOrig;\n      var botRpx = dv.edit.heightAtLine(chunk.editTo, \"local\", true) - sTopEdit;\n      if (flip) { var tmp = botLpx; botLpx = botRpx; botRpx = tmp; }\n      var curveTop = \" C \" + w/2 + \" \" + topRpx + \" \" + w/2 + \" \" + topLpx + \" \" + (w + 2) + \" \" + topLpx;\n      var curveBot = \" C \" + w/2 + \" \" + botLpx + \" \" + w/2 + \" \" + botRpx + \" -1 \" + botRpx;\n      attrs(dv.svg.appendChild(document.createElementNS(svgNS, \"path\")),\n            \"d\", \"M -1 \" + topRpx + curveTop + \" L \" + (w + 2) + \" \" + botLpx + curveBot + \" z\",\n            \"class\", dv.classes.connect);\n    }\n    if (dv.copyButtons) {\n      var copy = dv.copyButtons.appendChild(elt(\"div\", dv.type == \"left\" ? \"\\u21dd\" : \"\\u21dc\",\n                                                \"CodeMirror-merge-copy\"));\n      var editOriginals = dv.mv.options.allowEditingOriginals;\n      copy.title = editOriginals ? \"Push to left\" : \"Revert chunk\";\n      copy.chunk = chunk;\n      copy.style.top = (chunk.origTo > chunk.origFrom ? top : dv.edit.heightAtLine(chunk.editFrom, \"local\") - sTopEdit) + \"px\";\n\n      if (editOriginals) {\n        var topReverse = dv.edit.heightAtLine(chunk.editFrom, \"local\") - sTopEdit;\n        var copyReverse = dv.copyButtons.appendChild(elt(\"div\", dv.type == \"right\" ? \"\\u21dd\" : \"\\u21dc\",\n                                                         \"CodeMirror-merge-copy-reverse\"));\n        copyReverse.title = \"Push to right\";\n        copyReverse.chunk = {editFrom: chunk.origFrom, editTo: chunk.origTo,\n                             origFrom: chunk.editFrom, origTo: chunk.editTo};\n        copyReverse.style.top = topReverse + \"px\";\n        dv.type == \"right\" ? copyReverse.style.left = \"2px\" : copyReverse.style.right = \"2px\";\n      }\n    }\n  }\n\n  function copyChunk(dv, to, from, chunk) {\n    if (dv.diffOutOfDate) return;\n    var origStart = chunk.origTo > from.lastLine() ? Pos(chunk.origFrom - 1) : Pos(chunk.origFrom, 0)\n    var origEnd = Pos(chunk.origTo, 0)\n    var editStart = chunk.editTo > to.lastLine() ? Pos(chunk.editFrom - 1) : Pos(chunk.editFrom, 0)\n    var editEnd = Pos(chunk.editTo, 0)\n    var handler = dv.mv.options.revertChunk\n    if (handler)\n      handler(dv.mv, from, origStart, origEnd, to, editStart, editEnd)\n    else\n      to.replaceRange(from.getRange(origStart, origEnd), editStart, editEnd)\n  }\n\n  // Merge view, containing 0, 1, or 2 diff views.\n\n  var MergeView = CodeMirror.MergeView = function(node, options) {\n    if (!(this instanceof MergeView)) return new MergeView(node, options);\n\n    this.options = options;\n    var origLeft = options.origLeft, origRight = options.origRight == null ? options.orig : options.origRight;\n\n    var hasLeft = origLeft != null, hasRight = origRight != null;\n    var panes = 1 + (hasLeft ? 1 : 0) + (hasRight ? 1 : 0);\n    var wrap = [], left = this.left = null, right = this.right = null;\n    var self = this;\n\n    if (hasLeft) {\n      left = this.left = new DiffView(this, \"left\");\n      var leftPane = elt(\"div\", null, \"CodeMirror-merge-pane CodeMirror-merge-left\");\n      wrap.push(leftPane);\n      wrap.push(buildGap(left));\n    }\n\n    var editPane = elt(\"div\", null, \"CodeMirror-merge-pane CodeMirror-merge-editor\");\n    wrap.push(editPane);\n\n    if (hasRight) {\n      right = this.right = new DiffView(this, \"right\");\n      wrap.push(buildGap(right));\n      var rightPane = elt(\"div\", null, \"CodeMirror-merge-pane CodeMirror-merge-right\");\n      wrap.push(rightPane);\n    }\n\n    (hasRight ? rightPane : editPane).className += \" CodeMirror-merge-pane-rightmost\";\n\n    wrap.push(elt(\"div\", null, null, \"height: 0; clear: both;\"));\n\n    var wrapElt = this.wrap = node.appendChild(elt(\"div\", wrap, \"CodeMirror-merge CodeMirror-merge-\" + panes + \"pane\"));\n    this.edit = CodeMirror(editPane, copyObj(options));\n\n    if (left) left.init(leftPane, origLeft, options);\n    if (right) right.init(rightPane, origRight, options);\n    if (options.collapseIdentical)\n      this.editor().operation(function() {\n        collapseIdenticalStretches(self, options.collapseIdentical);\n      });\n    if (options.connect == \"align\") {\n      this.aligners = [];\n      alignChunks(this.left || this.right, true);\n    }\n    if (left) left.registerEvents(right)\n    if (right) right.registerEvents(left)\n\n\n    var onResize = function() {\n      if (left) makeConnections(left);\n      if (right) makeConnections(right);\n    };\n    CodeMirror.on(window, \"resize\", onResize);\n    var resizeInterval = setInterval(function() {\n      for (var p = wrapElt.parentNode; p && p != document.body; p = p.parentNode) {}\n      if (!p) { clearInterval(resizeInterval); CodeMirror.off(window, \"resize\", onResize); }\n    }, 5000);\n  };\n\n  function buildGap(dv) {\n    var lock = dv.lockButton = elt(\"div\", null, \"CodeMirror-merge-scrolllock\");\n    lock.title = \"Toggle locked scrolling\";\n    var lockWrap = elt(\"div\", [lock], \"CodeMirror-merge-scrolllock-wrap\");\n    CodeMirror.on(lock, \"click\", function() { setScrollLock(dv, !dv.lockScroll); });\n    var gapElts = [lockWrap];\n    if (dv.mv.options.revertButtons !== false) {\n      dv.copyButtons = elt(\"div\", null, \"CodeMirror-merge-copybuttons-\" + dv.type);\n      CodeMirror.on(dv.copyButtons, \"click\", function(e) {\n        var node = e.target || e.srcElement;\n        if (!node.chunk) return;\n        if (node.className == \"CodeMirror-merge-copy-reverse\") {\n          copyChunk(dv, dv.orig, dv.edit, node.chunk);\n          return;\n        }\n        copyChunk(dv, dv.edit, dv.orig, node.chunk);\n      });\n      gapElts.unshift(dv.copyButtons);\n    }\n    if (dv.mv.options.connect != \"align\") {\n      var svg = document.createElementNS && document.createElementNS(svgNS, \"svg\");\n      if (svg && !svg.createSVGRect) svg = null;\n      dv.svg = svg;\n      if (svg) gapElts.push(svg);\n    }\n\n    return dv.gap = elt(\"div\", gapElts, \"CodeMirror-merge-gap\");\n  }\n\n  MergeView.prototype = {\n    constructor: MergeView,\n    editor: function() { return this.edit; },\n    rightOriginal: function() { return this.right && this.right.orig; },\n    leftOriginal: function() { return this.left && this.left.orig; },\n    setShowDifferences: function(val) {\n      if (this.right) this.right.setShowDifferences(val);\n      if (this.left) this.left.setShowDifferences(val);\n    },\n    rightChunks: function() {\n      if (this.right) { ensureDiff(this.right); return this.right.chunks; }\n    },\n    leftChunks: function() {\n      if (this.left) { ensureDiff(this.left); return this.left.chunks; }\n    }\n  };\n\n  function asString(obj) {\n    if (typeof obj == \"string\") return obj;\n    else return obj.getValue();\n  }\n\n  // Operations on diffs\n\n  var dmp = new diff_match_patch();\n  function getDiff(a, b, ignoreWhitespace) {\n    var diff = dmp.diff_main(a, b);\n    // The library sometimes leaves in empty parts, which confuse the algorithm\n    for (var i = 0; i < diff.length; ++i) {\n      var part = diff[i];\n      if (ignoreWhitespace ? !/[^ \\t]/.test(part[1]) : !part[1]) {\n        diff.splice(i--, 1);\n      } else if (i && diff[i - 1][0] == part[0]) {\n        diff.splice(i--, 1);\n        diff[i][1] += part[1];\n      }\n    }\n    return diff;\n  }\n\n  function getChunks(diff) {\n    var chunks = [];\n    var startEdit = 0, startOrig = 0;\n    var edit = Pos(0, 0), orig = Pos(0, 0);\n    for (var i = 0; i < diff.length; ++i) {\n      var part = diff[i], tp = part[0];\n      if (tp == DIFF_EQUAL) {\n        var startOff = !startOfLineClean(diff, i) || edit.line < startEdit || orig.line < startOrig ? 1 : 0;\n        var cleanFromEdit = edit.line + startOff, cleanFromOrig = orig.line + startOff;\n        moveOver(edit, part[1], null, orig);\n        var endOff = endOfLineClean(diff, i) ? 1 : 0;\n        var cleanToEdit = edit.line + endOff, cleanToOrig = orig.line + endOff;\n        if (cleanToEdit > cleanFromEdit) {\n          if (i) chunks.push({origFrom: startOrig, origTo: cleanFromOrig,\n                              editFrom: startEdit, editTo: cleanFromEdit});\n          startEdit = cleanToEdit; startOrig = cleanToOrig;\n        }\n      } else {\n        moveOver(tp == DIFF_INSERT ? edit : orig, part[1]);\n      }\n    }\n    if (startEdit <= edit.line || startOrig <= orig.line)\n      chunks.push({origFrom: startOrig, origTo: orig.line + 1,\n                   editFrom: startEdit, editTo: edit.line + 1});\n    return chunks;\n  }\n\n  function endOfLineClean(diff, i) {\n    if (i == diff.length - 1) return true;\n    var next = diff[i + 1][1];\n    if ((next.length == 1 && i < diff.length - 2) || next.charCodeAt(0) != 10) return false;\n    if (i == diff.length - 2) return true;\n    next = diff[i + 2][1];\n    return (next.length > 1 || i == diff.length - 3) && next.charCodeAt(0) == 10;\n  }\n\n  function startOfLineClean(diff, i) {\n    if (i == 0) return true;\n    var last = diff[i - 1][1];\n    if (last.charCodeAt(last.length - 1) != 10) return false;\n    if (i == 1) return true;\n    last = diff[i - 2][1];\n    return last.charCodeAt(last.length - 1) == 10;\n  }\n\n  function chunkBoundariesAround(chunks, n, nInEdit) {\n    var beforeE, afterE, beforeO, afterO;\n    for (var i = 0; i < chunks.length; i++) {\n      var chunk = chunks[i];\n      var fromLocal = nInEdit ? chunk.editFrom : chunk.origFrom;\n      var toLocal = nInEdit ? chunk.editTo : chunk.origTo;\n      if (afterE == null) {\n        if (fromLocal > n) { afterE = chunk.editFrom; afterO = chunk.origFrom; }\n        else if (toLocal > n) { afterE = chunk.editTo; afterO = chunk.origTo; }\n      }\n      if (toLocal <= n) { beforeE = chunk.editTo; beforeO = chunk.origTo; }\n      else if (fromLocal <= n) { beforeE = chunk.editFrom; beforeO = chunk.origFrom; }\n    }\n    return {edit: {before: beforeE, after: afterE}, orig: {before: beforeO, after: afterO}};\n  }\n\n  function collapseSingle(cm, from, to) {\n    cm.addLineClass(from, \"wrap\", \"CodeMirror-merge-collapsed-line\");\n    var widget = document.createElement(\"span\");\n    widget.className = \"CodeMirror-merge-collapsed-widget\";\n    widget.title = \"Identical text collapsed. Click to expand.\";\n    var mark = cm.markText(Pos(from, 0), Pos(to - 1), {\n      inclusiveLeft: true,\n      inclusiveRight: true,\n      replacedWith: widget,\n      clearOnEnter: true\n    });\n    function clear() {\n      mark.clear();\n      cm.removeLineClass(from, \"wrap\", \"CodeMirror-merge-collapsed-line\");\n    }\n    CodeMirror.on(widget, \"click\", clear);\n    return {mark: mark, clear: clear};\n  }\n\n  function collapseStretch(size, editors) {\n    var marks = [];\n    function clear() {\n      for (var i = 0; i < marks.length; i++) marks[i].clear();\n    }\n    for (var i = 0; i < editors.length; i++) {\n      var editor = editors[i];\n      var mark = collapseSingle(editor.cm, editor.line, editor.line + size);\n      marks.push(mark);\n      mark.mark.on(\"clear\", clear);\n    }\n    return marks[0].mark;\n  }\n\n  function unclearNearChunks(dv, margin, off, clear) {\n    for (var i = 0; i < dv.chunks.length; i++) {\n      var chunk = dv.chunks[i];\n      for (var l = chunk.editFrom - margin; l < chunk.editTo + margin; l++) {\n        var pos = l + off;\n        if (pos >= 0 && pos < clear.length) clear[pos] = false;\n      }\n    }\n  }\n\n  function collapseIdenticalStretches(mv, margin) {\n    if (typeof margin != \"number\") margin = 2;\n    var clear = [], edit = mv.editor(), off = edit.firstLine();\n    for (var l = off, e = edit.lastLine(); l <= e; l++) clear.push(true);\n    if (mv.left) unclearNearChunks(mv.left, margin, off, clear);\n    if (mv.right) unclearNearChunks(mv.right, margin, off, clear);\n\n    for (var i = 0; i < clear.length; i++) {\n      if (clear[i]) {\n        var line = i + off;\n        for (var size = 1; i < clear.length - 1 && clear[i + 1]; i++, size++) {}\n        if (size > margin) {\n          var editors = [{line: line, cm: edit}];\n          if (mv.left) editors.push({line: getMatchingOrigLine(line, mv.left.chunks), cm: mv.left.orig});\n          if (mv.right) editors.push({line: getMatchingOrigLine(line, mv.right.chunks), cm: mv.right.orig});\n          var mark = collapseStretch(size, editors);\n          if (mv.options.onCollapse) mv.options.onCollapse(mv, line, size, mark);\n        }\n      }\n    }\n  }\n\n  // General utilities\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) e.className = className;\n    if (style) e.style.cssText = style;\n    if (typeof content == \"string\") e.appendChild(document.createTextNode(content));\n    else if (content) for (var i = 0; i < content.length; ++i) e.appendChild(content[i]);\n    return e;\n  }\n\n  function clear(node) {\n    for (var count = node.childNodes.length; count > 0; --count)\n      node.removeChild(node.firstChild);\n  }\n\n  function attrs(elt) {\n    for (var i = 1; i < arguments.length; i += 2)\n      elt.setAttribute(arguments[i], arguments[i+1]);\n  }\n\n  function copyObj(obj, target) {\n    if (!target) target = {};\n    for (var prop in obj) if (obj.hasOwnProperty(prop)) target[prop] = obj[prop];\n    return target;\n  }\n\n  function moveOver(pos, str, copy, other) {\n    var out = copy ? Pos(pos.line, pos.ch) : pos, at = 0;\n    for (;;) {\n      var nl = str.indexOf(\"\\n\", at);\n      if (nl == -1) break;\n      ++out.line;\n      if (other) ++other.line;\n      at = nl + 1;\n    }\n    out.ch = (at ? 0 : out.ch) + (str.length - at);\n    if (other) other.ch = (at ? 0 : other.ch) + (str.length - at);\n    return out;\n  }\n\n  // Tracks collapsed markers and line widgets, in order to be able to\n  // accurately align the content of two editors.\n\n  var F_WIDGET = 1, F_WIDGET_BELOW = 2, F_MARKER = 4\n\n  function TrackAlignable(cm) {\n    this.cm = cm\n    this.alignable = []\n    this.height = cm.doc.height\n    var self = this\n    cm.on(\"markerAdded\", function(_, marker) {\n      if (!marker.collapsed) return\n      var found = marker.find(1)\n      if (found != null) self.set(found.line, F_MARKER)\n    })\n    cm.on(\"markerCleared\", function(_, marker, _min, max) {\n      if (max != null && marker.collapsed)\n        self.check(max, F_MARKER, self.hasMarker)\n    })\n    cm.on(\"markerChanged\", this.signal.bind(this))\n    cm.on(\"lineWidgetAdded\", function(_, widget, lineNo) {\n      if (widget.mergeSpacer) return\n      if (widget.above) self.set(lineNo - 1, F_WIDGET_BELOW)\n      else self.set(lineNo, F_WIDGET)\n    })\n    cm.on(\"lineWidgetCleared\", function(_, widget, lineNo) {\n      if (widget.mergeSpacer) return\n      if (widget.above) self.check(lineNo - 1, F_WIDGET_BELOW, self.hasWidgetBelow)\n      else self.check(lineNo, F_WIDGET, self.hasWidget)\n    })\n    cm.on(\"lineWidgetChanged\", this.signal.bind(this))\n    cm.on(\"change\", function(_, change) {\n      var start = change.from.line, nBefore = change.to.line - change.from.line\n      var nAfter = change.text.length - 1, end = start + nAfter\n      if (nBefore || nAfter) self.map(start, nBefore, nAfter)\n      self.check(end, F_MARKER, self.hasMarker)\n      if (nBefore || nAfter) self.check(change.from.line, F_MARKER, self.hasMarker)\n    })\n    cm.on(\"viewportChange\", function() {\n      if (self.cm.doc.height != self.height) self.signal()\n    })\n  }\n\n  TrackAlignable.prototype = {\n    signal: function() {\n      CodeMirror.signal(this, \"realign\")\n      this.height = this.cm.doc.height\n    },\n\n    set: function(n, flags) {\n      var pos = -1\n      for (; pos < this.alignable.length; pos += 2) {\n        var diff = this.alignable[pos] - n\n        if (diff == 0) {\n          if ((this.alignable[pos + 1] & flags) == flags) return\n          this.alignable[pos + 1] |= flags\n          this.signal()\n          return\n        }\n        if (diff > 0) break\n      }\n      this.signal()\n      this.alignable.splice(pos, 0, n, flags)\n    },\n\n    find: function(n) {\n      for (var i = 0; i < this.alignable.length; i += 2)\n        if (this.alignable[i] == n) return i\n      return -1\n    },\n\n    check: function(n, flag, pred) {\n      var found = this.find(n)\n      if (found == -1 || !(this.alignable[found + 1] & flag)) return\n      if (!pred.call(this, n)) {\n        this.signal()\n        var flags = this.alignable[found + 1] & ~flag\n        if (flags) this.alignable[found + 1] = flags\n        else this.alignable.splice(found, 2)\n      }\n    },\n\n    hasMarker: function(n) {\n      var handle = this.cm.getLineHandle(n)\n      if (handle.markedSpans) for (var i = 0; i < handle.markedSpans.length; i++)\n        if (handle.markedSpans[i].mark.collapsed && handle.markedSpans[i].to != null)\n          return true\n      return false\n    },\n\n    hasWidget: function(n) {\n      var handle = this.cm.getLineHandle(n)\n      if (handle.widgets) for (var i = 0; i < handle.widgets.length; i++)\n        if (!handle.widgets[i].above && !handle.widgets[i].mergeSpacer) return true\n      return false\n    },\n\n    hasWidgetBelow: function(n) {\n      if (n == this.cm.lastLine()) return false\n      var handle = this.cm.getLineHandle(n + 1)\n      if (handle.widgets) for (var i = 0; i < handle.widgets.length; i++)\n        if (handle.widgets[i].above && !handle.widgets[i].mergeSpacer) return true\n      return false\n    },\n\n    map: function(from, nBefore, nAfter) {\n      var diff = nAfter - nBefore, to = from + nBefore, widgetFrom = -1, widgetTo = -1\n      for (var i = 0; i < this.alignable.length; i += 2) {\n        var n = this.alignable[i]\n        if (n == from && (this.alignable[i + 1] & F_WIDGET_BELOW)) widgetFrom = i\n        if (n == to && (this.alignable[i + 1] & F_WIDGET_BELOW)) widgetTo = i\n        if (n <= from) continue\n        else if (n < to) this.alignable.splice(i--, 2)\n        else this.alignable[i] += diff\n      }\n      if (widgetFrom > -1) {\n        var flags = this.alignable[widgetFrom + 1]\n        if (flags == F_WIDGET_BELOW) this.alignable.splice(widgetFrom, 2)\n        else this.alignable[widgetFrom + 1] = flags & ~F_WIDGET_BELOW\n      }\n      if (widgetTo > -1 && nAfter)\n        this.set(from + nAfter, F_WIDGET_BELOW)\n    }\n  }\n\n  function posMin(a, b) { return (a.line - b.line || a.ch - b.ch) < 0 ? a : b; }\n  function posMax(a, b) { return (a.line - b.line || a.ch - b.ch) > 0 ? a : b; }\n  function posEq(a, b) { return a.line == b.line && a.ch == b.ch; }\n\n  function findPrevDiff(chunks, start, isOrig) {\n    for (var i = chunks.length - 1; i >= 0; i--) {\n      var chunk = chunks[i];\n      var to = (isOrig ? chunk.origTo : chunk.editTo) - 1;\n      if (to < start) return to;\n    }\n  }\n\n  function findNextDiff(chunks, start, isOrig) {\n    for (var i = 0; i < chunks.length; i++) {\n      var chunk = chunks[i];\n      var from = (isOrig ? chunk.origFrom : chunk.editFrom);\n      if (from > start) return from;\n    }\n  }\n\n  function goNearbyDiff(cm, dir) {\n    var found = null, views = cm.state.diffViews, line = cm.getCursor().line;\n    if (views) for (var i = 0; i < views.length; i++) {\n      var dv = views[i], isOrig = cm == dv.orig;\n      ensureDiff(dv);\n      var pos = dir < 0 ? findPrevDiff(dv.chunks, line, isOrig) : findNextDiff(dv.chunks, line, isOrig);\n      if (pos != null && (found == null || (dir < 0 ? pos > found : pos < found)))\n        found = pos;\n    }\n    if (found != null)\n      cm.setCursor(found, 0);\n    else\n      return CodeMirror.Pass;\n  }\n\n  CodeMirror.commands.goNextDiff = function(cm) {\n    return goNearbyDiff(cm, 1);\n  };\n  CodeMirror.commands.goPrevDiff = function(cm) {\n    return goNearbyDiff(cm, -1);\n  };\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/mode/loadmode.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), \"cjs\");\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], function(CM) { mod(CM, \"amd\"); });\n  else // Plain browser env\n    mod(CodeMirror, \"plain\");\n})(function(CodeMirror, env) {\n  if (!CodeMirror.modeURL) CodeMirror.modeURL = \"../mode/%N/%N.js\";\n\n  var loading = {};\n  function splitCallback(cont, n) {\n    var countDown = n;\n    return function() { if (--countDown == 0) cont(); };\n  }\n  function ensureDeps(mode, cont) {\n    var deps = CodeMirror.modes[mode].dependencies;\n    if (!deps) return cont();\n    var missing = [];\n    for (var i = 0; i < deps.length; ++i) {\n      if (!CodeMirror.modes.hasOwnProperty(deps[i]))\n        missing.push(deps[i]);\n    }\n    if (!missing.length) return cont();\n    var split = splitCallback(cont, missing.length);\n    for (var i = 0; i < missing.length; ++i)\n      CodeMirror.requireMode(missing[i], split);\n  }\n\n  CodeMirror.requireMode = function(mode, cont) {\n    if (typeof mode != \"string\") mode = mode.name;\n    if (CodeMirror.modes.hasOwnProperty(mode)) return ensureDeps(mode, cont);\n    if (loading.hasOwnProperty(mode)) return loading[mode].push(cont);\n\n    var file = CodeMirror.modeURL.replace(/%N/g, mode);\n    if (env == \"plain\") {\n      var script = document.createElement(\"script\");\n      script.src = file;\n      var others = document.getElementsByTagName(\"script\")[0];\n      var list = loading[mode] = [cont];\n      CodeMirror.on(script, \"load\", function() {\n        ensureDeps(mode, function() {\n          for (var i = 0; i < list.length; ++i) list[i]();\n        });\n      });\n      others.parentNode.insertBefore(script, others);\n    } else if (env == \"cjs\") {\n      require(file);\n      cont();\n    } else if (env == \"amd\") {\n      requirejs([file], cont);\n    }\n  };\n\n  CodeMirror.autoLoadMode = function(instance, mode) {\n    if (!CodeMirror.modes.hasOwnProperty(mode))\n      CodeMirror.requireMode(mode, function() {\n        instance.setOption(\"mode\", instance.getOption(\"mode\"));\n      });\n  };\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/mode/multiplex.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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            state.inner = CodeMirror.startState(other.mode, outer.indent ? outer.indent(state.outer, \"\") : 0);\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) {\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);\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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/mode/multiplex_test.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function() {\n  CodeMirror.defineMode(\"markdown_with_stex\", function(){\n    var inner = CodeMirror.getMode({}, \"stex\");\n    var outer = CodeMirror.getMode({}, \"markdown\");\n\n    var innerOptions = {\n      open: '$',\n      close: '$',\n      mode: inner,\n      delimStyle: 'delim',\n      innerStyle: 'inner'\n    };\n\n    return CodeMirror.multiplexingMode(outer, innerOptions);\n  });\n\n  var mode = CodeMirror.getMode({}, \"markdown_with_stex\");\n\n  function MT(name) {\n    test.mode(\n      name,\n      mode,\n      Array.prototype.slice.call(arguments, 1),\n      'multiplexing');\n  }\n\n  MT(\n    \"stexInsideMarkdown\",\n    \"[strong **Equation:**] [delim&delim-open $][inner&tag \\\\pi][delim&delim-close $]\");\n})();\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/mode/overlay.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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) {\n      return base.indent(state.base, textAfter);\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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/mode/simple.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 (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          if (matches.length > 2) {\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 rule.token[0];\n          } else if (rule.token && rule.token.join) {\n            return rule.token[0];\n          } else {\n            return rule.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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/runmode/colorize.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"./runmode\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"./runmode\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\n\n  var isBlock = /^(p|li|div|h\\\\d|pre|blockquote|td)$/;\n\n  function textContent(node, out) {\n    if (node.nodeType == 3) return out.push(node.nodeValue);\n    for (var ch = node.firstChild; ch; ch = ch.nextSibling) {\n      textContent(ch, out);\n      if (isBlock.test(node.nodeType)) out.push(\"\\n\");\n    }\n  }\n\n  CodeMirror.colorize = function(collection, defaultMode) {\n    if (!collection) collection = document.body.getElementsByTagName(\"pre\");\n\n    for (var i = 0; i < collection.length; ++i) {\n      var node = collection[i];\n      var mode = node.getAttribute(\"data-lang\") || defaultMode;\n      if (!mode) continue;\n\n      var text = [];\n      textContent(node, text);\n      node.innerHTML = \"\";\n      CodeMirror.runMode(text.join(\"\"), mode, node);\n\n      node.className += \" cm-s-default\";\n    }\n  };\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/runmode/runmode-standalone.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\nwindow.CodeMirror = {};\n\n(function() {\n\"use strict\";\n\nfunction splitLines(string){ return string.split(/\\r?\\n|\\r/); };\n\nfunction StringStream(string) {\n  this.pos = this.start = 0;\n  this.string = string;\n  this.lineStart = 0;\n}\nStringStream.prototype = {\n  eol: function() {return this.pos >= this.string.length;},\n  sol: function() {return this.pos == 0;},\n  peek: function() {return this.string.charAt(this.pos) || null;},\n  next: function() {\n    if (this.pos < this.string.length)\n      return this.string.charAt(this.pos++);\n  },\n  eat: function(match) {\n    var ch = this.string.charAt(this.pos);\n    if (typeof match == \"string\") var ok = ch == match;\n    else var ok = ch && (match.test ? match.test(ch) : match(ch));\n    if (ok) {++this.pos; return ch;}\n  },\n  eatWhile: function(match) {\n    var start = this.pos;\n    while (this.eat(match)){}\n    return this.pos > start;\n  },\n  eatSpace: function() {\n    var start = this.pos;\n    while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\n    return this.pos > start;\n  },\n  skipToEnd: function() {this.pos = this.string.length;},\n  skipTo: function(ch) {\n    var found = this.string.indexOf(ch, this.pos);\n    if (found > -1) {this.pos = found; return true;}\n  },\n  backUp: function(n) {this.pos -= n;},\n  column: function() {return this.start - this.lineStart;},\n  indentation: function() {return 0;},\n  match: function(pattern, consume, caseInsensitive) {\n    if (typeof pattern == \"string\") {\n      var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};\n      var substr = this.string.substr(this.pos, pattern.length);\n      if (cased(substr) == cased(pattern)) {\n        if (consume !== false) this.pos += pattern.length;\n        return true;\n      }\n    } else {\n      var match = this.string.slice(this.pos).match(pattern);\n      if (match && match.index > 0) return null;\n      if (match && consume !== false) this.pos += match[0].length;\n      return match;\n    }\n  },\n  current: function(){return this.string.slice(this.start, this.pos);},\n  hideFirstChars: function(n, inner) {\n    this.lineStart += n;\n    try { return inner(); }\n    finally { this.lineStart -= n; }\n  }\n};\nCodeMirror.StringStream = StringStream;\n\nCodeMirror.startState = function (mode, a1, a2) {\n  return mode.startState ? mode.startState(a1, a2) : true;\n};\n\nvar modes = CodeMirror.modes = {}, mimeModes = CodeMirror.mimeModes = {};\nCodeMirror.defineMode = function (name, mode) {\n  if (arguments.length > 2)\n    mode.dependencies = Array.prototype.slice.call(arguments, 2);\n  modes[name] = mode;\n};\nCodeMirror.defineMIME = function (mime, spec) { mimeModes[mime] = spec; };\nCodeMirror.resolveMode = function(spec) {\n  if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n    spec = mimeModes[spec];\n  } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n    spec = mimeModes[spec.name];\n  }\n  if (typeof spec == \"string\") return {name: spec};\n  else return spec || {name: \"null\"};\n};\nCodeMirror.getMode = function (options, spec) {\n  spec = CodeMirror.resolveMode(spec);\n  var mfactory = modes[spec.name];\n  if (!mfactory) throw new Error(\"Unknown mode: \" + spec);\n  return mfactory(options, spec);\n};\nCodeMirror.registerHelper = CodeMirror.registerGlobalHelper = Math.min;\nCodeMirror.defineMode(\"null\", function() {\n  return {token: function(stream) {stream.skipToEnd();}};\n});\nCodeMirror.defineMIME(\"text/plain\", \"null\");\n\nCodeMirror.runMode = function (string, modespec, callback, options) {\n  var mode = CodeMirror.getMode({ indentUnit: 2 }, modespec);\n\n  if (callback.nodeType == 1) {\n    var tabSize = (options && options.tabSize) || 4;\n    var node = callback, col = 0;\n    node.innerHTML = \"\";\n    callback = function (text, style) {\n      if (text == \"\\n\") {\n        node.appendChild(document.createElement(\"br\"));\n        col = 0;\n        return;\n      }\n      var content = \"\";\n      // replace tabs\n      for (var pos = 0; ;) {\n        var idx = text.indexOf(\"\\t\", pos);\n        if (idx == -1) {\n          content += text.slice(pos);\n          col += text.length - pos;\n          break;\n        } else {\n          col += idx - pos;\n          content += text.slice(pos, idx);\n          var size = tabSize - col % tabSize;\n          col += size;\n          for (var i = 0; i < size; ++i) content += \" \";\n          pos = idx + 1;\n        }\n      }\n\n      if (style) {\n        var sp = node.appendChild(document.createElement(\"span\"));\n        sp.className = \"cm-\" + style.replace(/ +/g, \" cm-\");\n        sp.appendChild(document.createTextNode(content));\n      } else {\n        node.appendChild(document.createTextNode(content));\n      }\n    };\n  }\n\n  var lines = splitLines(string), state = (options && options.state) || CodeMirror.startState(mode);\n  for (var i = 0, e = lines.length; i < e; ++i) {\n    if (i) callback(\"\\n\");\n    var stream = new CodeMirror.StringStream(lines[i]);\n    if (!stream.string && mode.blankLine) mode.blankLine(state);\n    while (!stream.eol()) {\n      var style = mode.token(stream, state);\n      callback(stream.current(), style, i, stream.start, state);\n      stream.start = stream.pos;\n    }\n  }\n};\n})();\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/runmode/runmode.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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.runMode = function(string, modespec, callback, options) {\n  var mode = CodeMirror.getMode(CodeMirror.defaults, modespec);\n  var ie = /MSIE \\d/.test(navigator.userAgent);\n  var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9);\n\n  if (callback.appendChild) {\n    var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize;\n    var node = callback, col = 0;\n    node.innerHTML = \"\";\n    callback = function(text, style) {\n      if (text == \"\\n\") {\n        // Emitting LF or CRLF on IE8 or earlier results in an incorrect display.\n        // Emitting a carriage return makes everything ok.\n        node.appendChild(document.createTextNode(ie_lt9 ? '\\r' : text));\n        col = 0;\n        return;\n      }\n      var content = \"\";\n      // replace tabs\n      for (var pos = 0;;) {\n        var idx = text.indexOf(\"\\t\", pos);\n        if (idx == -1) {\n          content += text.slice(pos);\n          col += text.length - pos;\n          break;\n        } else {\n          col += idx - pos;\n          content += text.slice(pos, idx);\n          var size = tabSize - col % tabSize;\n          col += size;\n          for (var i = 0; i < size; ++i) content += \" \";\n          pos = idx + 1;\n        }\n      }\n\n      if (style) {\n        var sp = node.appendChild(document.createElement(\"span\"));\n        sp.className = \"cm-\" + style.replace(/ +/g, \" cm-\");\n        sp.appendChild(document.createTextNode(content));\n      } else {\n        node.appendChild(document.createTextNode(content));\n      }\n    };\n  }\n\n  var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode);\n  for (var i = 0, e = lines.length; i < e; ++i) {\n    if (i) callback(\"\\n\");\n    var stream = new CodeMirror.StringStream(lines[i]);\n    if (!stream.string && mode.blankLine) mode.blankLine(state);\n    while (!stream.eol()) {\n      var style = mode.token(stream, state);\n      callback(stream.current(), style, i, stream.start, state);\n      stream.start = stream.pos;\n    }\n  }\n};\n\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/runmode/runmode.node.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n/* Just enough of CodeMirror to run runMode under node.js */\n\nfunction splitLines(string){return string.split(/\\r\\n?|\\n/);};\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nvar countColumn = function(string, end, tabSize, startIndex, startValue) {\n  if (end == null) {\n    end = string.search(/[^\\s\\u00a0]/);\n    if (end == -1) end = string.length;\n  }\n  for (var i = startIndex || 0, n = startValue || 0;;) {\n    var nextTab = string.indexOf(\"\\t\", i);\n    if (nextTab < 0 || nextTab >= end)\n      return n + (end - i);\n    n += nextTab - i;\n    n += tabSize - (n % tabSize);\n    i = nextTab + 1;\n  }\n};\n\nfunction StringStream(string, tabSize) {\n  this.pos = this.start = 0;\n  this.string = string;\n  this.tabSize = tabSize || 8;\n  this.lastColumnPos = this.lastColumnValue = 0;\n  this.lineStart = 0;\n};\n\nStringStream.prototype = {\n  eol: function() {return this.pos >= this.string.length;},\n  sol: function() {return this.pos == this.lineStart;},\n  peek: function() {return this.string.charAt(this.pos) || undefined;},\n  next: function() {\n    if (this.pos < this.string.length)\n      return this.string.charAt(this.pos++);\n  },\n  eat: function(match) {\n    var ch = this.string.charAt(this.pos);\n    if (typeof match == \"string\") var ok = ch == match;\n    else var ok = ch && (match.test ? match.test(ch) : match(ch));\n    if (ok) {++this.pos; return ch;}\n  },\n  eatWhile: function(match) {\n    var start = this.pos;\n    while (this.eat(match)){}\n    return this.pos > start;\n  },\n  eatSpace: function() {\n    var start = this.pos;\n    while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\n    return this.pos > start;\n  },\n  skipToEnd: function() {this.pos = this.string.length;},\n  skipTo: function(ch) {\n    var found = this.string.indexOf(ch, this.pos);\n    if (found > -1) {this.pos = found; return true;}\n  },\n  backUp: function(n) {this.pos -= n;},\n  column: function() {\n    if (this.lastColumnPos < this.start) {\n      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n      this.lastColumnPos = this.start;\n    }\n    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n  },\n  indentation: function() {\n    return countColumn(this.string, null, this.tabSize) -\n      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);\n  },\n  match: function(pattern, consume, caseInsensitive) {\n    if (typeof pattern == \"string\") {\n      var cased = function(str) {return caseInsensitive ? str.toLowerCase() : str;};\n      var substr = this.string.substr(this.pos, pattern.length);\n      if (cased(substr) == cased(pattern)) {\n        if (consume !== false) this.pos += pattern.length;\n        return true;\n      }\n    } else {\n      var match = this.string.slice(this.pos).match(pattern);\n      if (match && match.index > 0) return null;\n      if (match && consume !== false) this.pos += match[0].length;\n      return match;\n    }\n  },\n  current: function(){return this.string.slice(this.start, this.pos);},\n  hideFirstChars: function(n, inner) {\n    this.lineStart += n;\n    try { return inner(); }\n    finally { this.lineStart -= n; }\n  }\n};\nexports.StringStream = StringStream;\n\nexports.startState = function(mode, a1, a2) {\n  return mode.startState ? mode.startState(a1, a2) : true;\n};\n\nvar modes = exports.modes = {}, mimeModes = exports.mimeModes = {};\nexports.defineMode = function(name, mode) {\n  if (arguments.length > 2)\n    mode.dependencies = Array.prototype.slice.call(arguments, 2);\n  modes[name] = mode;\n};\nexports.defineMIME = function(mime, spec) { mimeModes[mime] = spec; };\n\nexports.defineMode(\"null\", function() {\n  return {token: function(stream) {stream.skipToEnd();}};\n});\nexports.defineMIME(\"text/plain\", \"null\");\n\nexports.resolveMode = function(spec) {\n  if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n    spec = mimeModes[spec];\n  } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n    spec = mimeModes[spec.name];\n  }\n  if (typeof spec == \"string\") return {name: spec};\n  else return spec || {name: \"null\"};\n};\n\nfunction copyObj(obj, target, overwrite) {\n  if (!target) target = {};\n  for (var prop in obj)\n    if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n      target[prop] = obj[prop];\n  return target;\n}\n\n// This can be used to attach properties to mode objects from\n// outside the actual mode definition.\nvar modeExtensions = exports.modeExtensions = {};\nexports.extendMode = function(mode, properties) {\n  var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n  copyObj(properties, exts);\n};\n\nexports.getMode = function(options, spec) {\n  var spec = exports.resolveMode(spec);\n  var mfactory = modes[spec.name];\n  if (!mfactory) return exports.getMode(options, \"text/plain\");\n  var modeObj = mfactory(options, spec);\n  if (modeExtensions.hasOwnProperty(spec.name)) {\n    var exts = modeExtensions[spec.name];\n    for (var prop in exts) {\n      if (!exts.hasOwnProperty(prop)) continue;\n      if (modeObj.hasOwnProperty(prop)) modeObj[\"_\" + prop] = modeObj[prop];\n      modeObj[prop] = exts[prop];\n    }\n  }\n  modeObj.name = spec.name;\n  if (spec.helperType) modeObj.helperType = spec.helperType;\n  if (spec.modeProps) for (var prop in spec.modeProps)\n    modeObj[prop] = spec.modeProps[prop];\n\n  return modeObj;\n};\nexports.registerHelper = exports.registerGlobalHelper = Math.min;\n\nexports.runMode = function(string, modespec, callback, options) {\n  var mode = exports.getMode({indentUnit: 2}, modespec);\n  var lines = splitLines(string), state = (options && options.state) || exports.startState(mode);\n  for (var i = 0, e = lines.length; i < e; ++i) {\n    if (i) callback(\"\\n\");\n    var stream = new exports.StringStream(lines[i]);\n    if (!stream.string && mode.blankLine) mode.blankLine(state);\n    while (!stream.eol()) {\n      var style = mode.token(stream, state);\n      callback(stream.current(), style, i, stream.start, state);\n      stream.start = stream.pos;\n    }\n  }\n};\n\nrequire.cache[require.resolve(\"../../lib/codemirror\")] = require.cache[require.resolve(\"./runmode.node\")];\nrequire.cache[require.resolve(\"../../addon/runmode/runmode\")] = require.cache[require.resolve(\"./runmode.node\")];\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/scroll/annotatescrollbar.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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.defineExtension(\"annotateScrollbar\", function(options) {\n    if (typeof options == \"string\") options = {className: options};\n    return new Annotation(this, options);\n  });\n\n  CodeMirror.defineOption(\"scrollButtonHeight\", 0);\n\n  function Annotation(cm, options) {\n    this.cm = cm;\n    this.options = options;\n    this.buttonHeight = options.scrollButtonHeight || cm.getOption(\"scrollButtonHeight\");\n    this.annotations = [];\n    this.doRedraw = this.doUpdate = null;\n    this.div = cm.getWrapperElement().appendChild(document.createElement(\"div\"));\n    this.div.style.cssText = \"position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none\";\n    this.computeScale();\n\n    function scheduleRedraw(delay) {\n      clearTimeout(self.doRedraw);\n      self.doRedraw = setTimeout(function() { self.redraw(); }, delay);\n    }\n\n    var self = this;\n    cm.on(\"refresh\", this.resizeHandler = function() {\n      clearTimeout(self.doUpdate);\n      self.doUpdate = setTimeout(function() {\n        if (self.computeScale()) scheduleRedraw(20);\n      }, 100);\n    });\n    cm.on(\"markerAdded\", this.resizeHandler);\n    cm.on(\"markerCleared\", this.resizeHandler);\n    if (options.listenForChanges !== false)\n      cm.on(\"change\", this.changeHandler = function() {\n        scheduleRedraw(250);\n      });\n  }\n\n  Annotation.prototype.computeScale = function() {\n    var cm = this.cm;\n    var hScale = (cm.getWrapperElement().clientHeight - cm.display.barHeight - this.buttonHeight * 2) /\n      cm.getScrollerElement().scrollHeight\n    if (hScale != this.hScale) {\n      this.hScale = hScale;\n      return true;\n    }\n  };\n\n  Annotation.prototype.update = function(annotations) {\n    this.annotations = annotations;\n    this.redraw();\n  };\n\n  Annotation.prototype.redraw = function(compute) {\n    if (compute !== false) this.computeScale();\n    var cm = this.cm, hScale = this.hScale;\n\n    var frag = document.createDocumentFragment(), anns = this.annotations;\n\n    var wrapping = cm.getOption(\"lineWrapping\");\n    var singleLineH = wrapping && cm.defaultTextHeight() * 1.5;\n    var curLine = null, curLineObj = null;\n    function getY(pos, top) {\n      if (curLine != pos.line) {\n        curLine = pos.line;\n        curLineObj = cm.getLineHandle(curLine);\n      }\n      if ((curLineObj.widgets && curLineObj.widgets.length) ||\n          (wrapping && curLineObj.height > singleLineH))\n        return cm.charCoords(pos, \"local\")[top ? \"top\" : \"bottom\"];\n      var topY = cm.heightAtLine(curLineObj, \"local\");\n      return topY + (top ? 0 : curLineObj.height);\n    }\n\n    var lastLine = cm.lastLine()\n    if (cm.display.barWidth) for (var i = 0, nextTop; i < anns.length; i++) {\n      var ann = anns[i];\n      if (ann.to.line > lastLine) continue;\n      var top = nextTop || getY(ann.from, true) * hScale;\n      var bottom = getY(ann.to, false) * hScale;\n      while (i < anns.length - 1) {\n        if (anns[i + 1].to.line > lastLine) break;\n        nextTop = getY(anns[i + 1].from, true) * hScale;\n        if (nextTop > bottom + .9) break;\n        ann = anns[++i];\n        bottom = getY(ann.to, false) * hScale;\n      }\n      if (bottom == top) continue;\n      var height = Math.max(bottom - top, 3);\n\n      var elt = frag.appendChild(document.createElement(\"div\"));\n      elt.style.cssText = \"position: absolute; right: 0px; width: \" + Math.max(cm.display.barWidth - 1, 2) + \"px; top: \"\n        + (top + this.buttonHeight) + \"px; height: \" + height + \"px\";\n      elt.className = this.options.className;\n      if (ann.id) {\n        elt.setAttribute(\"annotation-id\", ann.id);\n      }\n    }\n    this.div.textContent = \"\";\n    this.div.appendChild(frag);\n  };\n\n  Annotation.prototype.clear = function() {\n    this.cm.off(\"refresh\", this.resizeHandler);\n    this.cm.off(\"markerAdded\", this.resizeHandler);\n    this.cm.off(\"markerCleared\", this.resizeHandler);\n    if (this.changeHandler) this.cm.off(\"change\", this.changeHandler);\n    this.div.parentNode.removeChild(this.div);\n  };\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/scroll/scrollpastend.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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.defineOption(\"scrollPastEnd\", false, function(cm, val, old) {\n    if (old && old != CodeMirror.Init) {\n      cm.off(\"change\", onChange);\n      cm.off(\"refresh\", updateBottomMargin);\n      cm.display.lineSpace.parentNode.style.paddingBottom = \"\";\n      cm.state.scrollPastEndPadding = null;\n    }\n    if (val) {\n      cm.on(\"change\", onChange);\n      cm.on(\"refresh\", updateBottomMargin);\n      updateBottomMargin(cm);\n    }\n  });\n\n  function onChange(cm, change) {\n    if (CodeMirror.changeEnd(change).line == cm.lastLine())\n      updateBottomMargin(cm);\n  }\n\n  function updateBottomMargin(cm) {\n    var padding = \"\";\n    if (cm.lineCount() > 1) {\n      var totalH = cm.display.scroller.clientHeight - 30,\n          lastLineH = cm.getLineHandle(cm.lastLine()).height;\n      padding = (totalH - lastLineH) + \"px\";\n    }\n    if (cm.state.scrollPastEndPadding != padding) {\n      cm.state.scrollPastEndPadding = padding;\n      cm.display.lineSpace.parentNode.style.paddingBottom = padding;\n      cm.off(\"refresh\", updateBottomMargin);\n      cm.setSize();\n      cm.on(\"refresh\", updateBottomMargin);\n    }\n  }\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/scroll/simplescrollbars.css",
    "content": ".CodeMirror-simplescroll-horizontal div, .CodeMirror-simplescroll-vertical div {\n  position: absolute;\n  background: #ccc;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  border: 1px solid #bbb;\n  border-radius: 2px;\n}\n\n.CodeMirror-simplescroll-horizontal, .CodeMirror-simplescroll-vertical {\n  position: absolute;\n  z-index: 6;\n  background: #eee;\n}\n\n.CodeMirror-simplescroll-horizontal {\n  bottom: 0; left: 0;\n  height: 8px;\n}\n.CodeMirror-simplescroll-horizontal div {\n  bottom: 0;\n  height: 100%;\n}\n\n.CodeMirror-simplescroll-vertical {\n  right: 0; top: 0;\n  width: 8px;\n}\n.CodeMirror-simplescroll-vertical div {\n  right: 0;\n  width: 100%;\n}\n\n\n.CodeMirror-overlayscroll .CodeMirror-scrollbar-filler, .CodeMirror-overlayscroll .CodeMirror-gutter-filler {\n  display: none;\n}\n\n.CodeMirror-overlayscroll-horizontal div, .CodeMirror-overlayscroll-vertical div {\n  position: absolute;\n  background: #bcd;\n  border-radius: 3px;\n}\n\n.CodeMirror-overlayscroll-horizontal, .CodeMirror-overlayscroll-vertical {\n  position: absolute;\n  z-index: 6;\n}\n\n.CodeMirror-overlayscroll-horizontal {\n  bottom: 0; left: 0;\n  height: 6px;\n}\n.CodeMirror-overlayscroll-horizontal div {\n  bottom: 0;\n  height: 100%;\n}\n\n.CodeMirror-overlayscroll-vertical {\n  right: 0; top: 0;\n  width: 6px;\n}\n.CodeMirror-overlayscroll-vertical div {\n  right: 0;\n  width: 100%;\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/scroll/simplescrollbars.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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  function Bar(cls, orientation, scroll) {\n    this.orientation = orientation;\n    this.scroll = scroll;\n    this.screen = this.total = this.size = 1;\n    this.pos = 0;\n\n    this.node = document.createElement(\"div\");\n    this.node.className = cls + \"-\" + orientation;\n    this.inner = this.node.appendChild(document.createElement(\"div\"));\n\n    var self = this;\n    CodeMirror.on(this.inner, \"mousedown\", function(e) {\n      if (e.which != 1) return;\n      CodeMirror.e_preventDefault(e);\n      var axis = self.orientation == \"horizontal\" ? \"pageX\" : \"pageY\";\n      var start = e[axis], startpos = self.pos;\n      function done() {\n        CodeMirror.off(document, \"mousemove\", move);\n        CodeMirror.off(document, \"mouseup\", done);\n      }\n      function move(e) {\n        if (e.which != 1) return done();\n        self.moveTo(startpos + (e[axis] - start) * (self.total / self.size));\n      }\n      CodeMirror.on(document, \"mousemove\", move);\n      CodeMirror.on(document, \"mouseup\", done);\n    });\n\n    CodeMirror.on(this.node, \"click\", function(e) {\n      CodeMirror.e_preventDefault(e);\n      var innerBox = self.inner.getBoundingClientRect(), where;\n      if (self.orientation == \"horizontal\")\n        where = e.clientX < innerBox.left ? -1 : e.clientX > innerBox.right ? 1 : 0;\n      else\n        where = e.clientY < innerBox.top ? -1 : e.clientY > innerBox.bottom ? 1 : 0;\n      self.moveTo(self.pos + where * self.screen);\n    });\n\n    function onWheel(e) {\n      var moved = CodeMirror.wheelEventPixels(e)[self.orientation == \"horizontal\" ? \"x\" : \"y\"];\n      var oldPos = self.pos;\n      self.moveTo(self.pos + moved);\n      if (self.pos != oldPos) CodeMirror.e_preventDefault(e);\n    }\n    CodeMirror.on(this.node, \"mousewheel\", onWheel);\n    CodeMirror.on(this.node, \"DOMMouseScroll\", onWheel);\n  }\n\n  Bar.prototype.setPos = function(pos, force) {\n    if (pos < 0) pos = 0;\n    if (pos > this.total - this.screen) pos = this.total - this.screen;\n    if (!force && pos == this.pos) return false;\n    this.pos = pos;\n    this.inner.style[this.orientation == \"horizontal\" ? \"left\" : \"top\"] =\n      (pos * (this.size / this.total)) + \"px\";\n    return true\n  };\n\n  Bar.prototype.moveTo = function(pos) {\n    if (this.setPos(pos)) this.scroll(pos, this.orientation);\n  }\n\n  var minButtonSize = 10;\n\n  Bar.prototype.update = function(scrollSize, clientSize, barSize) {\n    var sizeChanged = this.screen != clientSize || this.total != scrollSize || this.size != barSize\n    if (sizeChanged) {\n      this.screen = clientSize;\n      this.total = scrollSize;\n      this.size = barSize;\n    }\n\n    var buttonSize = this.screen * (this.size / this.total);\n    if (buttonSize < minButtonSize) {\n      this.size -= minButtonSize - buttonSize;\n      buttonSize = minButtonSize;\n    }\n    this.inner.style[this.orientation == \"horizontal\" ? \"width\" : \"height\"] =\n      buttonSize + \"px\";\n    this.setPos(this.pos, sizeChanged);\n  };\n\n  function SimpleScrollbars(cls, place, scroll) {\n    this.addClass = cls;\n    this.horiz = new Bar(cls, \"horizontal\", scroll);\n    place(this.horiz.node);\n    this.vert = new Bar(cls, \"vertical\", scroll);\n    place(this.vert.node);\n    this.width = null;\n  }\n\n  SimpleScrollbars.prototype.update = function(measure) {\n    if (this.width == null) {\n      var style = window.getComputedStyle ? window.getComputedStyle(this.horiz.node) : this.horiz.node.currentStyle;\n      if (style) this.width = parseInt(style.height);\n    }\n    var width = this.width || 0;\n\n    var needsH = measure.scrollWidth > measure.clientWidth + 1;\n    var needsV = measure.scrollHeight > measure.clientHeight + 1;\n    this.vert.node.style.display = needsV ? \"block\" : \"none\";\n    this.horiz.node.style.display = needsH ? \"block\" : \"none\";\n\n    if (needsV) {\n      this.vert.update(measure.scrollHeight, measure.clientHeight,\n                       measure.viewHeight - (needsH ? width : 0));\n      this.vert.node.style.bottom = needsH ? width + \"px\" : \"0\";\n    }\n    if (needsH) {\n      this.horiz.update(measure.scrollWidth, measure.clientWidth,\n                        measure.viewWidth - (needsV ? width : 0) - measure.barLeft);\n      this.horiz.node.style.right = needsV ? width + \"px\" : \"0\";\n      this.horiz.node.style.left = measure.barLeft + \"px\";\n    }\n\n    return {right: needsV ? width : 0, bottom: needsH ? width : 0};\n  };\n\n  SimpleScrollbars.prototype.setScrollTop = function(pos) {\n    this.vert.setPos(pos);\n  };\n\n  SimpleScrollbars.prototype.setScrollLeft = function(pos) {\n    this.horiz.setPos(pos);\n  };\n\n  SimpleScrollbars.prototype.clear = function() {\n    var parent = this.horiz.node.parentNode;\n    parent.removeChild(this.horiz.node);\n    parent.removeChild(this.vert.node);\n  };\n\n  CodeMirror.scrollbarModel.simple = function(place, scroll) {\n    return new SimpleScrollbars(\"CodeMirror-simplescroll\", place, scroll);\n  };\n  CodeMirror.scrollbarModel.overlay = function(place, scroll) {\n    return new SimpleScrollbars(\"CodeMirror-overlayscroll\", place, scroll);\n  };\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/search/jump-to-line.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// Defines jumpToLine command. Uses dialog.js if present.\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"), require(\"../dialog/dialog\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\", \"../dialog/dialog\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  \"use strict\";\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  var jumpDialog =\n      'Jump to line: <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">(Use line:column or scroll% syntax)</span>';\n\n  function interpretLine(cm, string) {\n    var num = Number(string)\n    if (/^[-+]/.test(string)) return cm.getCursor().line + num\n    else return num - 1\n  }\n\n  CodeMirror.commands.jumpToLine = function(cm) {\n    var cur = cm.getCursor();\n    dialog(cm, jumpDialog, \"Jump to line:\", (cur.line + 1) + \":\" + cur.ch, function(posStr) {\n      if (!posStr) return;\n\n      var match;\n      if (match = /^\\s*([\\+\\-]?\\d+)\\s*\\:\\s*(\\d+)\\s*$/.exec(posStr)) {\n        cm.setCursor(interpretLine(cm, match[1]), Number(match[2]))\n      } else if (match = /^\\s*([\\+\\-]?\\d+(\\.\\d+)?)\\%\\s*/.exec(posStr)) {\n        var line = Math.round(cm.lineCount() * Number(match[1]) / 100);\n        if (/^[-+]/.test(match[1])) line = cur.line + line + 1;\n        cm.setCursor(line - 1, cur.ch);\n      } else if (match = /^\\s*\\:?\\s*([\\+\\-]?\\d+)\\s*/.exec(posStr)) {\n        cm.setCursor(interpretLine(cm, match[1]), cur.ch);\n      }\n    });\n  };\n\n  CodeMirror.keyMap[\"default\"][\"Alt-G\"] = \"jumpToLine\";\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/search/match-highlighter.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 + \"\\\\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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/search/matchesonscrollbar.css",
    "content": ".CodeMirror-search-match {\n  background: gold;\n  border-top: 1px solid orange;\n  border-bottom: 1px solid orange;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n  opacity: .5;\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/search/matchesonscrollbar.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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), this.caseFold);\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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/search/search.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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, queryCaseInsensitive(query));\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(/\\\\(.)/g, function(_, ch) {\n      if (ch == \"n\") return \"\\n\"\n      if (ch == \"r\") return \"\\r\"\n      return ch\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  var queryDialog =\n    '<span class=\"CodeMirror-search-label\">Search:</span> <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">(Use /re/ syntax for regexp search)</span>';\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 (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, queryDialog, q, searchNext, function(event, query) {\n        var keyName = CodeMirror.keyName(event)\n        var cmd = CodeMirror.keyMap[cm.getOption(\"keyMap\")][keyName]\n        if (!cmd) cmd = cm.getOption('extraKeys')[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, queryDialog, \"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  var replaceQueryDialog =\n    ' <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">(Use /re/ syntax for regexp search)</span>';\n  var replacementQueryDialog = '<span class=\"CodeMirror-search-label\">With:</span> <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/>';\n  var doReplaceConfirm = '<span class=\"CodeMirror-search-label\">Replace?</span> <button>Yes</button> <button>No</button> <button>All</button> <button>Stop</button>';\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 ? 'Replace all:' : 'Replace:') + '</span>';\n    dialog(cm, dialogText + replaceQueryDialog, dialogText, query, function(query) {\n      if (!query) return;\n      query = parseQuery(query);\n      dialog(cm, replacementQueryDialog, \"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, doReplaceConfirm, \"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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/search/searchcursor.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 SearchCursor(doc, query, pos, caseFold) {\n    this.atOccurrence = false; this.doc = doc;\n    if (caseFold == null && typeof query == \"string\") caseFold = false;\n\n    pos = pos ? doc.clipPos(pos) : Pos(0, 0);\n    this.pos = {from: pos, to: pos};\n\n    // The matches method is filled in based on the type of query.\n    // It takes a position and a direction, and returns an object\n    // describing the next occurrence of the query, or null if no\n    // more matches were found.\n    if (typeof query != \"string\") { // Regexp match\n      if (!query.global) query = new RegExp(query.source, query.ignoreCase ? \"ig\" : \"g\");\n      this.matches = function(reverse, pos) {\n        if (reverse) {\n          query.lastIndex = 0;\n          var line = doc.getLine(pos.line).slice(0, pos.ch), cutOff = 0, match, start;\n          for (;;) {\n            query.lastIndex = cutOff;\n            var newMatch = query.exec(line);\n            if (!newMatch) break;\n            match = newMatch;\n            start = match.index;\n            cutOff = match.index + (match[0].length || 1);\n            if (cutOff == line.length) break;\n          }\n          var matchLen = (match && match[0].length) || 0;\n          if (!matchLen) {\n            if (start == 0 && line.length == 0) {match = undefined;}\n            else if (start != doc.getLine(pos.line).length) {\n              matchLen++;\n            }\n          }\n        } else {\n          query.lastIndex = pos.ch;\n          var line = doc.getLine(pos.line), match = query.exec(line);\n          var matchLen = (match && match[0].length) || 0;\n          var start = match && match.index;\n          if (start + matchLen != line.length && !matchLen) matchLen = 1;\n        }\n        if (match && matchLen)\n          return {from: Pos(pos.line, start),\n                  to: Pos(pos.line, start + matchLen),\n                  match: match};\n      };\n    } else { // String query\n      var origQuery = query;\n      if (caseFold) query = query.toLowerCase();\n      var fold = caseFold ? function(str){return str.toLowerCase();} : function(str){return str;};\n      var target = query.split(\"\\n\");\n      // Different methods for single-line and multi-line queries\n      if (target.length == 1) {\n        if (!query.length) {\n          // Empty string would match anything and never progress, so\n          // we define it to match nothing instead.\n          this.matches = function() {};\n        } else {\n          this.matches = function(reverse, pos) {\n            if (reverse) {\n              var orig = doc.getLine(pos.line).slice(0, pos.ch), line = fold(orig);\n              var match = line.lastIndexOf(query);\n              if (match > -1) {\n                match = adjustPos(orig, line, match);\n                return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)};\n              }\n             } else {\n               var orig = doc.getLine(pos.line).slice(pos.ch), line = fold(orig);\n               var match = line.indexOf(query);\n               if (match > -1) {\n                 match = adjustPos(orig, line, match) + pos.ch;\n                 return {from: Pos(pos.line, match), to: Pos(pos.line, match + origQuery.length)};\n               }\n            }\n          };\n        }\n      } else {\n        var origTarget = origQuery.split(\"\\n\");\n        this.matches = function(reverse, pos) {\n          var last = target.length - 1;\n          if (reverse) {\n            if (pos.line - (target.length - 1) < doc.firstLine()) return;\n            if (fold(doc.getLine(pos.line).slice(0, origTarget[last].length)) != target[target.length - 1]) return;\n            var to = Pos(pos.line, origTarget[last].length);\n            for (var ln = pos.line - 1, i = last - 1; i >= 1; --i, --ln)\n              if (target[i] != fold(doc.getLine(ln))) return;\n            var line = doc.getLine(ln), cut = line.length - origTarget[0].length;\n            if (fold(line.slice(cut)) != target[0]) return;\n            return {from: Pos(ln, cut), to: to};\n          } else {\n            if (pos.line + (target.length - 1) > doc.lastLine()) return;\n            var line = doc.getLine(pos.line), cut = line.length - origTarget[0].length;\n            if (fold(line.slice(cut)) != target[0]) return;\n            var from = Pos(pos.line, cut);\n            for (var ln = pos.line + 1, i = 1; i < last; ++i, ++ln)\n              if (target[i] != fold(doc.getLine(ln))) return;\n            if (fold(doc.getLine(ln).slice(0, origTarget[last].length)) != target[last]) return;\n            return {from: from, to: Pos(ln, origTarget[last].length)};\n          }\n        };\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 self = this, pos = this.doc.clipPos(reverse ? this.pos.from : this.pos.to);\n      function savePosAndFail(line) {\n        var pos = Pos(line, 0);\n        self.pos = {from: pos, to: pos};\n        self.atOccurrence = false;\n        return false;\n      }\n\n      for (;;) {\n        if (this.pos = this.matches(reverse, pos)) {\n          this.atOccurrence = true;\n          return this.pos.match || true;\n        }\n        if (reverse) {\n          if (!pos.line) return savePosAndFail(0);\n          pos = Pos(pos.line-1, this.doc.getLine(pos.line-1).length);\n        }\n        else {\n          var maxLine = this.doc.lineCount();\n          if (pos.line == maxLine - 1) return savePosAndFail(maxLine);\n          pos = Pos(pos.line + 1, 0);\n        }\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  // 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) {\n    if (orig.length == folded.length) return pos;\n    for (var pos1 = Math.min(pos, orig.length);;) {\n      var len1 = orig.slice(0, pos1).toLowerCase().length;\n      if (len1 < pos) ++pos1;\n      else if (len1 > pos) --pos1;\n      else return pos1;\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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/selection/active-line.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/selection/mark-selection.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/selection/selection-pointer.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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.defineOption(\"selectionPointer\", false, function(cm, val) {\n    var data = cm.state.selectionPointer;\n    if (data) {\n      CodeMirror.off(cm.getWrapperElement(), \"mousemove\", data.mousemove);\n      CodeMirror.off(cm.getWrapperElement(), \"mouseout\", data.mouseout);\n      CodeMirror.off(window, \"scroll\", data.windowScroll);\n      cm.off(\"cursorActivity\", reset);\n      cm.off(\"scroll\", reset);\n      cm.state.selectionPointer = null;\n      cm.display.lineDiv.style.cursor = \"\";\n    }\n    if (val) {\n      data = cm.state.selectionPointer = {\n        value: typeof val == \"string\" ? val : \"default\",\n        mousemove: function(event) { mousemove(cm, event); },\n        mouseout: function(event) { mouseout(cm, event); },\n        windowScroll: function() { reset(cm); },\n        rects: null,\n        mouseX: null, mouseY: null,\n        willUpdate: false\n      };\n      CodeMirror.on(cm.getWrapperElement(), \"mousemove\", data.mousemove);\n      CodeMirror.on(cm.getWrapperElement(), \"mouseout\", data.mouseout);\n      CodeMirror.on(window, \"scroll\", data.windowScroll);\n      cm.on(\"cursorActivity\", reset);\n      cm.on(\"scroll\", reset);\n    }\n  });\n\n  function mousemove(cm, event) {\n    var data = cm.state.selectionPointer;\n    if (event.buttons == null ? event.which : event.buttons) {\n      data.mouseX = data.mouseY = null;\n    } else {\n      data.mouseX = event.clientX;\n      data.mouseY = event.clientY;\n    }\n    scheduleUpdate(cm);\n  }\n\n  function mouseout(cm, event) {\n    if (!cm.getWrapperElement().contains(event.relatedTarget)) {\n      var data = cm.state.selectionPointer;\n      data.mouseX = data.mouseY = null;\n      scheduleUpdate(cm);\n    }\n  }\n\n  function reset(cm) {\n    cm.state.selectionPointer.rects = null;\n    scheduleUpdate(cm);\n  }\n\n  function scheduleUpdate(cm) {\n    if (!cm.state.selectionPointer.willUpdate) {\n      cm.state.selectionPointer.willUpdate = true;\n      setTimeout(function() {\n        update(cm);\n        cm.state.selectionPointer.willUpdate = false;\n      }, 50);\n    }\n  }\n\n  function update(cm) {\n    var data = cm.state.selectionPointer;\n    if (!data) return;\n    if (data.rects == null && data.mouseX != null) {\n      data.rects = [];\n      if (cm.somethingSelected()) {\n        for (var sel = cm.display.selectionDiv.firstChild; sel; sel = sel.nextSibling)\n          data.rects.push(sel.getBoundingClientRect());\n      }\n    }\n    var inside = false;\n    if (data.mouseX != null) for (var i = 0; i < data.rects.length; i++) {\n      var rect = data.rects[i];\n      if (rect.left <= data.mouseX && rect.right >= data.mouseX &&\n          rect.top <= data.mouseY && rect.bottom >= data.mouseY)\n        inside = true;\n    }\n    var cursor = inside ? data.value : \"\";\n    if (cm.display.lineDiv.style.cursor != cursor)\n      cm.display.lineDiv.style.cursor = cursor;\n  }\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/tern/tern.css",
    "content": ".CodeMirror-Tern-completion {\n  padding-left: 22px;\n  position: relative;\n  line-height: 1.5;\n}\n.CodeMirror-Tern-completion:before {\n  position: absolute;\n  left: 2px;\n  bottom: 2px;\n  border-radius: 50%;\n  font-size: 12px;\n  font-weight: bold;\n  height: 15px;\n  width: 15px;\n  line-height: 16px;\n  text-align: center;\n  color: white;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.CodeMirror-Tern-completion-unknown:before {\n  content: \"?\";\n  background: #4bb;\n}\n.CodeMirror-Tern-completion-object:before {\n  content: \"O\";\n  background: #77c;\n}\n.CodeMirror-Tern-completion-fn:before {\n  content: \"F\";\n  background: #7c7;\n}\n.CodeMirror-Tern-completion-array:before {\n  content: \"A\";\n  background: #c66;\n}\n.CodeMirror-Tern-completion-number:before {\n  content: \"1\";\n  background: #999;\n}\n.CodeMirror-Tern-completion-string:before {\n  content: \"S\";\n  background: #999;\n}\n.CodeMirror-Tern-completion-bool:before {\n  content: \"B\";\n  background: #999;\n}\n\n.CodeMirror-Tern-completion-guess {\n  color: #999;\n}\n\n.CodeMirror-Tern-tooltip {\n  border: 1px solid silver;\n  border-radius: 3px;\n  color: #444;\n  padding: 2px 5px;\n  font-size: 90%;\n  font-family: monospace;\n  background-color: white;\n  white-space: pre-wrap;\n\n  max-width: 40em;\n  position: absolute;\n  z-index: 10;\n  -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n  box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n\n  transition: opacity 1s;\n  -moz-transition: opacity 1s;\n  -webkit-transition: opacity 1s;\n  -o-transition: opacity 1s;\n  -ms-transition: opacity 1s;\n}\n\n.CodeMirror-Tern-hint-doc {\n  max-width: 25em;\n  margin-top: -3px;\n}\n\n.CodeMirror-Tern-fname { color: black; }\n.CodeMirror-Tern-farg { color: #70a; }\n.CodeMirror-Tern-farg-current { text-decoration: underline; }\n.CodeMirror-Tern-type { color: #07c; }\n.CodeMirror-Tern-fhint-guess { opacity: .7; }\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/tern/tern.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// Glue code between CodeMirror and Tern.\n//\n// Create a CodeMirror.TernServer to wrap an actual Tern server,\n// register open documents (CodeMirror.Doc instances) with it, and\n// call its methods to activate the assisting functions that Tern\n// provides.\n//\n// Options supported (all optional):\n// * defs: An array of JSON definition data structures.\n// * plugins: An object mapping plugin names to configuration\n//   options.\n// * getFile: A function(name, c) that can be used to access files in\n//   the project that haven't been loaded yet. Simply do c(null) to\n//   indicate that a file is not available.\n// * fileFilter: A function(value, docName, doc) that will be applied\n//   to documents before passing them on to Tern.\n// * switchToDoc: A function(name, doc) that should, when providing a\n//   multi-file view, switch the view or focus to the named file.\n// * showError: A function(editor, message) that can be used to\n//   override the way errors are displayed.\n// * completionTip: Customize the content in tooltips for completions.\n//   Is passed a single argument—the completion's data as returned by\n//   Tern—and may return a string, DOM node, or null to indicate that\n//   no tip should be shown. By default the docstring is shown.\n// * typeTip: Like completionTip, but for the tooltips shown for type\n//   queries.\n// * responseFilter: A function(doc, query, request, error, data) that\n//   will be applied to the Tern responses before treating them\n//\n//\n// It is possible to run the Tern server in a web worker by specifying\n// these additional options:\n// * useWorker: Set to true to enable web worker mode. You'll probably\n//   want to feature detect the actual value you use here, for example\n//   !!window.Worker.\n// * workerScript: The main script of the worker. Point this to\n//   wherever you are hosting worker.js from this directory.\n// * workerDeps: An array of paths pointing (relative to workerScript)\n//   to the Acorn and Tern libraries and any Tern plugins you want to\n//   load. Or, if you minified those into a single script and included\n//   them in the workerScript, simply leave this undefined.\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  // declare global: tern\n\n  CodeMirror.TernServer = function(options) {\n    var self = this;\n    this.options = options || {};\n    var plugins = this.options.plugins || (this.options.plugins = {});\n    if (!plugins.doc_comment) plugins.doc_comment = true;\n    this.docs = Object.create(null);\n    if (this.options.useWorker) {\n      this.server = new WorkerServer(this);\n    } else {\n      this.server = new tern.Server({\n        getFile: function(name, c) { return getFile(self, name, c); },\n        async: true,\n        defs: this.options.defs || [],\n        plugins: plugins\n      });\n    }\n    this.trackChange = function(doc, change) { trackChange(self, doc, change); };\n\n    this.cachedArgHints = null;\n    this.activeArgHints = null;\n    this.jumpStack = [];\n\n    this.getHint = function(cm, c) { return hint(self, cm, c); };\n    this.getHint.async = true;\n  };\n\n  CodeMirror.TernServer.prototype = {\n    addDoc: function(name, doc) {\n      var data = {doc: doc, name: name, changed: null};\n      this.server.addFile(name, docValue(this, data));\n      CodeMirror.on(doc, \"change\", this.trackChange);\n      return this.docs[name] = data;\n    },\n\n    delDoc: function(id) {\n      var found = resolveDoc(this, id);\n      if (!found) return;\n      CodeMirror.off(found.doc, \"change\", this.trackChange);\n      delete this.docs[found.name];\n      this.server.delFile(found.name);\n    },\n\n    hideDoc: function(id) {\n      closeArgHints(this);\n      var found = resolveDoc(this, id);\n      if (found && found.changed) sendDoc(this, found);\n    },\n\n    complete: function(cm) {\n      cm.showHint({hint: this.getHint});\n    },\n\n    showType: function(cm, pos, c) { showContextInfo(this, cm, pos, \"type\", c); },\n\n    showDocs: function(cm, pos, c) { showContextInfo(this, cm, pos, \"documentation\", c); },\n\n    updateArgHints: function(cm) { updateArgHints(this, cm); },\n\n    jumpToDef: function(cm) { jumpToDef(this, cm); },\n\n    jumpBack: function(cm) { jumpBack(this, cm); },\n\n    rename: function(cm) { rename(this, cm); },\n\n    selectName: function(cm) { selectName(this, cm); },\n\n    request: function (cm, query, c, pos) {\n      var self = this;\n      var doc = findDoc(this, cm.getDoc());\n      var request = buildRequest(this, doc, query, pos);\n      var extraOptions = request.query && this.options.queryOptions && this.options.queryOptions[request.query.type]\n      if (extraOptions) for (var prop in extraOptions) request.query[prop] = extraOptions[prop];\n\n      this.server.request(request, function (error, data) {\n        if (!error && self.options.responseFilter)\n          data = self.options.responseFilter(doc, query, request, error, data);\n        c(error, data);\n      });\n    },\n\n    destroy: function () {\n      closeArgHints(this)\n      if (this.worker) {\n        this.worker.terminate();\n        this.worker = null;\n      }\n    }\n  };\n\n  var Pos = CodeMirror.Pos;\n  var cls = \"CodeMirror-Tern-\";\n  var bigDoc = 250;\n\n  function getFile(ts, name, c) {\n    var buf = ts.docs[name];\n    if (buf)\n      c(docValue(ts, buf));\n    else if (ts.options.getFile)\n      ts.options.getFile(name, c);\n    else\n      c(null);\n  }\n\n  function findDoc(ts, doc, name) {\n    for (var n in ts.docs) {\n      var cur = ts.docs[n];\n      if (cur.doc == doc) return cur;\n    }\n    if (!name) for (var i = 0;; ++i) {\n      n = \"[doc\" + (i || \"\") + \"]\";\n      if (!ts.docs[n]) { name = n; break; }\n    }\n    return ts.addDoc(name, doc);\n  }\n\n  function resolveDoc(ts, id) {\n    if (typeof id == \"string\") return ts.docs[id];\n    if (id instanceof CodeMirror) id = id.getDoc();\n    if (id instanceof CodeMirror.Doc) return findDoc(ts, id);\n  }\n\n  function trackChange(ts, doc, change) {\n    var data = findDoc(ts, doc);\n\n    var argHints = ts.cachedArgHints;\n    if (argHints && argHints.doc == doc && cmpPos(argHints.start, change.to) >= 0)\n      ts.cachedArgHints = null;\n\n    var changed = data.changed;\n    if (changed == null)\n      data.changed = changed = {from: change.from.line, to: change.from.line};\n    var end = change.from.line + (change.text.length - 1);\n    if (change.from.line < changed.to) changed.to = changed.to - (change.to.line - end);\n    if (end >= changed.to) changed.to = end + 1;\n    if (changed.from > change.from.line) changed.from = change.from.line;\n\n    if (doc.lineCount() > bigDoc && change.to - changed.from > 100) setTimeout(function() {\n      if (data.changed && data.changed.to - data.changed.from > 100) sendDoc(ts, data);\n    }, 200);\n  }\n\n  function sendDoc(ts, doc) {\n    ts.server.request({files: [{type: \"full\", name: doc.name, text: docValue(ts, doc)}]}, function(error) {\n      if (error) window.console.error(error);\n      else doc.changed = null;\n    });\n  }\n\n  // Completion\n\n  function hint(ts, cm, c) {\n    ts.request(cm, {type: \"completions\", types: true, docs: true, urls: true}, function(error, data) {\n      if (error) return showError(ts, cm, error);\n      var completions = [], after = \"\";\n      var from = data.start, to = data.end;\n      if (cm.getRange(Pos(from.line, from.ch - 2), from) == \"[\\\"\" &&\n          cm.getRange(to, Pos(to.line, to.ch + 2)) != \"\\\"]\")\n        after = \"\\\"]\";\n\n      for (var i = 0; i < data.completions.length; ++i) {\n        var completion = data.completions[i], className = typeToIcon(completion.type);\n        if (data.guess) className += \" \" + cls + \"guess\";\n        completions.push({text: completion.name + after,\n                          displayText: completion.displayName || completion.name,\n                          className: className,\n                          data: completion});\n      }\n\n      var obj = {from: from, to: to, list: completions};\n      var tooltip = null;\n      CodeMirror.on(obj, \"close\", function() { remove(tooltip); });\n      CodeMirror.on(obj, \"update\", function() { remove(tooltip); });\n      CodeMirror.on(obj, \"select\", function(cur, node) {\n        remove(tooltip);\n        var content = ts.options.completionTip ? ts.options.completionTip(cur.data) : cur.data.doc;\n        if (content) {\n          tooltip = makeTooltip(node.parentNode.getBoundingClientRect().right + window.pageXOffset,\n                                node.getBoundingClientRect().top + window.pageYOffset, content);\n          tooltip.className += \" \" + cls + \"hint-doc\";\n        }\n      });\n      c(obj);\n    });\n  }\n\n  function typeToIcon(type) {\n    var suffix;\n    if (type == \"?\") suffix = \"unknown\";\n    else if (type == \"number\" || type == \"string\" || type == \"bool\") suffix = type;\n    else if (/^fn\\(/.test(type)) suffix = \"fn\";\n    else if (/^\\[/.test(type)) suffix = \"array\";\n    else suffix = \"object\";\n    return cls + \"completion \" + cls + \"completion-\" + suffix;\n  }\n\n  // Type queries\n\n  function showContextInfo(ts, cm, pos, queryName, c) {\n    ts.request(cm, queryName, function(error, data) {\n      if (error) return showError(ts, cm, error);\n      if (ts.options.typeTip) {\n        var tip = ts.options.typeTip(data);\n      } else {\n        var tip = elt(\"span\", null, elt(\"strong\", null, data.type || \"not found\"));\n        if (data.doc)\n          tip.appendChild(document.createTextNode(\" — \" + data.doc));\n        if (data.url) {\n          tip.appendChild(document.createTextNode(\" \"));\n          var child = tip.appendChild(elt(\"a\", null, \"[docs]\"));\n          child.href = data.url;\n          child.target = \"_blank\";\n        }\n      }\n      tempTooltip(cm, tip, ts);\n      if (c) c();\n    }, pos);\n  }\n\n  // Maintaining argument hints\n\n  function updateArgHints(ts, cm) {\n    closeArgHints(ts);\n\n    if (cm.somethingSelected()) return;\n    var state = cm.getTokenAt(cm.getCursor()).state;\n    var inner = CodeMirror.innerMode(cm.getMode(), state);\n    if (inner.mode.name != \"javascript\") return;\n    var lex = inner.state.lexical;\n    if (lex.info != \"call\") return;\n\n    var ch, argPos = lex.pos || 0, tabSize = cm.getOption(\"tabSize\");\n    for (var line = cm.getCursor().line, e = Math.max(0, line - 9), found = false; line >= e; --line) {\n      var str = cm.getLine(line), extra = 0;\n      for (var pos = 0;;) {\n        var tab = str.indexOf(\"\\t\", pos);\n        if (tab == -1) break;\n        extra += tabSize - (tab + extra) % tabSize - 1;\n        pos = tab + 1;\n      }\n      ch = lex.column - extra;\n      if (str.charAt(ch) == \"(\") {found = true; break;}\n    }\n    if (!found) return;\n\n    var start = Pos(line, ch);\n    var cache = ts.cachedArgHints;\n    if (cache && cache.doc == cm.getDoc() && cmpPos(start, cache.start) == 0)\n      return showArgHints(ts, cm, argPos);\n\n    ts.request(cm, {type: \"type\", preferFunction: true, end: start}, function(error, data) {\n      if (error || !data.type || !(/^fn\\(/).test(data.type)) return;\n      ts.cachedArgHints = {\n        start: start,\n        type: parseFnType(data.type),\n        name: data.exprName || data.name || \"fn\",\n        guess: data.guess,\n        doc: cm.getDoc()\n      };\n      showArgHints(ts, cm, argPos);\n    });\n  }\n\n  function showArgHints(ts, cm, pos) {\n    closeArgHints(ts);\n\n    var cache = ts.cachedArgHints, tp = cache.type;\n    var tip = elt(\"span\", cache.guess ? cls + \"fhint-guess\" : null,\n                  elt(\"span\", cls + \"fname\", cache.name), \"(\");\n    for (var i = 0; i < tp.args.length; ++i) {\n      if (i) tip.appendChild(document.createTextNode(\", \"));\n      var arg = tp.args[i];\n      tip.appendChild(elt(\"span\", cls + \"farg\" + (i == pos ? \" \" + cls + \"farg-current\" : \"\"), arg.name || \"?\"));\n      if (arg.type != \"?\") {\n        tip.appendChild(document.createTextNode(\":\\u00a0\"));\n        tip.appendChild(elt(\"span\", cls + \"type\", arg.type));\n      }\n    }\n    tip.appendChild(document.createTextNode(tp.rettype ? \") ->\\u00a0\" : \")\"));\n    if (tp.rettype) tip.appendChild(elt(\"span\", cls + \"type\", tp.rettype));\n    var place = cm.cursorCoords(null, \"page\");\n    ts.activeArgHints = makeTooltip(place.right + 1, place.bottom, tip);\n  }\n\n  function parseFnType(text) {\n    var args = [], pos = 3;\n\n    function skipMatching(upto) {\n      var depth = 0, start = pos;\n      for (;;) {\n        var next = text.charAt(pos);\n        if (upto.test(next) && !depth) return text.slice(start, pos);\n        if (/[{\\[\\(]/.test(next)) ++depth;\n        else if (/[}\\]\\)]/.test(next)) --depth;\n        ++pos;\n      }\n    }\n\n    // Parse arguments\n    if (text.charAt(pos) != \")\") for (;;) {\n      var name = text.slice(pos).match(/^([^, \\(\\[\\{]+): /);\n      if (name) {\n        pos += name[0].length;\n        name = name[1];\n      }\n      args.push({name: name, type: skipMatching(/[\\),]/)});\n      if (text.charAt(pos) == \")\") break;\n      pos += 2;\n    }\n\n    var rettype = text.slice(pos).match(/^\\) -> (.*)$/);\n\n    return {args: args, rettype: rettype && rettype[1]};\n  }\n\n  // Moving to the definition of something\n\n  function jumpToDef(ts, cm) {\n    function inner(varName) {\n      var req = {type: \"definition\", variable: varName || null};\n      var doc = findDoc(ts, cm.getDoc());\n      ts.server.request(buildRequest(ts, doc, req), function(error, data) {\n        if (error) return showError(ts, cm, error);\n        if (!data.file && data.url) { window.open(data.url); return; }\n\n        if (data.file) {\n          var localDoc = ts.docs[data.file], found;\n          if (localDoc && (found = findContext(localDoc.doc, data))) {\n            ts.jumpStack.push({file: doc.name,\n                               start: cm.getCursor(\"from\"),\n                               end: cm.getCursor(\"to\")});\n            moveTo(ts, doc, localDoc, found.start, found.end);\n            return;\n          }\n        }\n        showError(ts, cm, \"Could not find a definition.\");\n      });\n    }\n\n    if (!atInterestingExpression(cm))\n      dialog(cm, \"Jump to variable\", function(name) { if (name) inner(name); });\n    else\n      inner();\n  }\n\n  function jumpBack(ts, cm) {\n    var pos = ts.jumpStack.pop(), doc = pos && ts.docs[pos.file];\n    if (!doc) return;\n    moveTo(ts, findDoc(ts, cm.getDoc()), doc, pos.start, pos.end);\n  }\n\n  function moveTo(ts, curDoc, doc, start, end) {\n    doc.doc.setSelection(start, end);\n    if (curDoc != doc && ts.options.switchToDoc) {\n      closeArgHints(ts);\n      ts.options.switchToDoc(doc.name, doc.doc);\n    }\n  }\n\n  // The {line,ch} representation of positions makes this rather awkward.\n  function findContext(doc, data) {\n    var before = data.context.slice(0, data.contextOffset).split(\"\\n\");\n    var startLine = data.start.line - (before.length - 1);\n    var start = Pos(startLine, (before.length == 1 ? data.start.ch : doc.getLine(startLine).length) - before[0].length);\n\n    var text = doc.getLine(startLine).slice(start.ch);\n    for (var cur = startLine + 1; cur < doc.lineCount() && text.length < data.context.length; ++cur)\n      text += \"\\n\" + doc.getLine(cur);\n    if (text.slice(0, data.context.length) == data.context) return data;\n\n    var cursor = doc.getSearchCursor(data.context, 0, false);\n    var nearest, nearestDist = Infinity;\n    while (cursor.findNext()) {\n      var from = cursor.from(), dist = Math.abs(from.line - start.line) * 10000;\n      if (!dist) dist = Math.abs(from.ch - start.ch);\n      if (dist < nearestDist) { nearest = from; nearestDist = dist; }\n    }\n    if (!nearest) return null;\n\n    if (before.length == 1)\n      nearest.ch += before[0].length;\n    else\n      nearest = Pos(nearest.line + (before.length - 1), before[before.length - 1].length);\n    if (data.start.line == data.end.line)\n      var end = Pos(nearest.line, nearest.ch + (data.end.ch - data.start.ch));\n    else\n      var end = Pos(nearest.line + (data.end.line - data.start.line), data.end.ch);\n    return {start: nearest, end: end};\n  }\n\n  function atInterestingExpression(cm) {\n    var pos = cm.getCursor(\"end\"), tok = cm.getTokenAt(pos);\n    if (tok.start < pos.ch && tok.type == \"comment\") return false;\n    return /[\\w)\\]]/.test(cm.getLine(pos.line).slice(Math.max(pos.ch - 1, 0), pos.ch + 1));\n  }\n\n  // Variable renaming\n\n  function rename(ts, cm) {\n    var token = cm.getTokenAt(cm.getCursor());\n    if (!/\\w/.test(token.string)) return showError(ts, cm, \"Not at a variable\");\n    dialog(cm, \"New name for \" + token.string, function(newName) {\n      ts.request(cm, {type: \"rename\", newName: newName, fullDocs: true}, function(error, data) {\n        if (error) return showError(ts, cm, error);\n        applyChanges(ts, data.changes);\n      });\n    });\n  }\n\n  function selectName(ts, cm) {\n    var name = findDoc(ts, cm.doc).name;\n    ts.request(cm, {type: \"refs\"}, function(error, data) {\n      if (error) return showError(ts, cm, error);\n      var ranges = [], cur = 0;\n      var curPos = cm.getCursor();\n      for (var i = 0; i < data.refs.length; i++) {\n        var ref = data.refs[i];\n        if (ref.file == name) {\n          ranges.push({anchor: ref.start, head: ref.end});\n          if (cmpPos(curPos, ref.start) >= 0 && cmpPos(curPos, ref.end) <= 0)\n            cur = ranges.length - 1;\n        }\n      }\n      cm.setSelections(ranges, cur);\n    });\n  }\n\n  var nextChangeOrig = 0;\n  function applyChanges(ts, changes) {\n    var perFile = Object.create(null);\n    for (var i = 0; i < changes.length; ++i) {\n      var ch = changes[i];\n      (perFile[ch.file] || (perFile[ch.file] = [])).push(ch);\n    }\n    for (var file in perFile) {\n      var known = ts.docs[file], chs = perFile[file];;\n      if (!known) continue;\n      chs.sort(function(a, b) { return cmpPos(b.start, a.start); });\n      var origin = \"*rename\" + (++nextChangeOrig);\n      for (var i = 0; i < chs.length; ++i) {\n        var ch = chs[i];\n        known.doc.replaceRange(ch.text, ch.start, ch.end, origin);\n      }\n    }\n  }\n\n  // Generic request-building helper\n\n  function buildRequest(ts, doc, query, pos) {\n    var files = [], offsetLines = 0, allowFragments = !query.fullDocs;\n    if (!allowFragments) delete query.fullDocs;\n    if (typeof query == \"string\") query = {type: query};\n    query.lineCharPositions = true;\n    if (query.end == null) {\n      query.end = pos || doc.doc.getCursor(\"end\");\n      if (doc.doc.somethingSelected())\n        query.start = doc.doc.getCursor(\"start\");\n    }\n    var startPos = query.start || query.end;\n\n    if (doc.changed) {\n      if (doc.doc.lineCount() > bigDoc && allowFragments !== false &&\n          doc.changed.to - doc.changed.from < 100 &&\n          doc.changed.from <= startPos.line && doc.changed.to > query.end.line) {\n        files.push(getFragmentAround(doc, startPos, query.end));\n        query.file = \"#0\";\n        var offsetLines = files[0].offsetLines;\n        if (query.start != null) query.start = Pos(query.start.line - -offsetLines, query.start.ch);\n        query.end = Pos(query.end.line - offsetLines, query.end.ch);\n      } else {\n        files.push({type: \"full\",\n                    name: doc.name,\n                    text: docValue(ts, doc)});\n        query.file = doc.name;\n        doc.changed = null;\n      }\n    } else {\n      query.file = doc.name;\n    }\n    for (var name in ts.docs) {\n      var cur = ts.docs[name];\n      if (cur.changed && cur != doc) {\n        files.push({type: \"full\", name: cur.name, text: docValue(ts, cur)});\n        cur.changed = null;\n      }\n    }\n\n    return {query: query, files: files};\n  }\n\n  function getFragmentAround(data, start, end) {\n    var doc = data.doc;\n    var minIndent = null, minLine = null, endLine, tabSize = 4;\n    for (var p = start.line - 1, min = Math.max(0, p - 50); p >= min; --p) {\n      var line = doc.getLine(p), fn = line.search(/\\bfunction\\b/);\n      if (fn < 0) continue;\n      var indent = CodeMirror.countColumn(line, null, tabSize);\n      if (minIndent != null && minIndent <= indent) continue;\n      minIndent = indent;\n      minLine = p;\n    }\n    if (minLine == null) minLine = min;\n    var max = Math.min(doc.lastLine(), end.line + 20);\n    if (minIndent == null || minIndent == CodeMirror.countColumn(doc.getLine(start.line), null, tabSize))\n      endLine = max;\n    else for (endLine = end.line + 1; endLine < max; ++endLine) {\n      var indent = CodeMirror.countColumn(doc.getLine(endLine), null, tabSize);\n      if (indent <= minIndent) break;\n    }\n    var from = Pos(minLine, 0);\n\n    return {type: \"part\",\n            name: data.name,\n            offsetLines: from.line,\n            text: doc.getRange(from, Pos(endLine, 0))};\n  }\n\n  // Generic utilities\n\n  var cmpPos = CodeMirror.cmpPos;\n\n  function elt(tagname, cls /*, ... elts*/) {\n    var e = document.createElement(tagname);\n    if (cls) e.className = cls;\n    for (var i = 2; i < arguments.length; ++i) {\n      var elt = arguments[i];\n      if (typeof elt == \"string\") elt = document.createTextNode(elt);\n      e.appendChild(elt);\n    }\n    return e;\n  }\n\n  function dialog(cm, text, f) {\n    if (cm.openDialog)\n      cm.openDialog(text + \": <input type=text>\", f);\n    else\n      f(prompt(text, \"\"));\n  }\n\n  // Tooltips\n\n  function tempTooltip(cm, content, ts) {\n    if (cm.state.ternTooltip) remove(cm.state.ternTooltip);\n    var where = cm.cursorCoords();\n    var tip = cm.state.ternTooltip = makeTooltip(where.right + 1, where.bottom, content);\n    function maybeClear() {\n      old = true;\n      if (!mouseOnTip) clear();\n    }\n    function clear() {\n      cm.state.ternTooltip = null;\n      if (!tip.parentNode) return;\n      cm.off(\"cursorActivity\", clear);\n      cm.off('blur', clear);\n      cm.off('scroll', clear);\n      fadeOut(tip);\n    }\n    var mouseOnTip = false, old = false;\n    CodeMirror.on(tip, \"mousemove\", function() { mouseOnTip = true; });\n    CodeMirror.on(tip, \"mouseout\", function(e) {\n      if (!CodeMirror.contains(tip, e.relatedTarget || e.toElement)) {\n        if (old) clear();\n        else mouseOnTip = false;\n      }\n    });\n    setTimeout(maybeClear, ts.options.hintDelay ? ts.options.hintDelay : 1700);\n    cm.on(\"cursorActivity\", clear);\n    cm.on('blur', clear);\n    cm.on('scroll', clear);\n  }\n\n  function makeTooltip(x, y, content) {\n    var node = elt(\"div\", cls + \"tooltip\", content);\n    node.style.left = x + \"px\";\n    node.style.top = y + \"px\";\n    document.body.appendChild(node);\n    return node;\n  }\n\n  function remove(node) {\n    var p = node && node.parentNode;\n    if (p) p.removeChild(node);\n  }\n\n  function fadeOut(tooltip) {\n    tooltip.style.opacity = \"0\";\n    setTimeout(function() { remove(tooltip); }, 1100);\n  }\n\n  function showError(ts, cm, msg) {\n    if (ts.options.showError)\n      ts.options.showError(cm, msg);\n    else\n      tempTooltip(cm, String(msg), ts);\n  }\n\n  function closeArgHints(ts) {\n    if (ts.activeArgHints) { remove(ts.activeArgHints); ts.activeArgHints = null; }\n  }\n\n  function docValue(ts, doc) {\n    var val = doc.doc.getValue();\n    if (ts.options.fileFilter) val = ts.options.fileFilter(val, doc.name, doc.doc);\n    return val;\n  }\n\n  // Worker wrapper\n\n  function WorkerServer(ts) {\n    var worker = ts.worker = new Worker(ts.options.workerScript);\n    worker.postMessage({type: \"init\",\n                        defs: ts.options.defs,\n                        plugins: ts.options.plugins,\n                        scripts: ts.options.workerDeps});\n    var msgId = 0, pending = {};\n\n    function send(data, c) {\n      if (c) {\n        data.id = ++msgId;\n        pending[msgId] = c;\n      }\n      worker.postMessage(data);\n    }\n    worker.onmessage = function(e) {\n      var data = e.data;\n      if (data.type == \"getFile\") {\n        getFile(ts, data.name, function(err, text) {\n          send({type: \"getFile\", err: String(err), text: text, id: data.id});\n        });\n      } else if (data.type == \"debug\") {\n        window.console.log(data.message);\n      } else if (data.id && pending[data.id]) {\n        pending[data.id](data.err, data.body);\n        delete pending[data.id];\n      }\n    };\n    worker.onerror = function(e) {\n      for (var id in pending) pending[id](e);\n      pending = {};\n    };\n\n    this.addFile = function(name, text) { send({type: \"add\", name: name, text: text}); };\n    this.delFile = function(name) { send({type: \"del\", name: name}); };\n    this.request = function(body, c) { send({type: \"req\", body: body}, c); };\n  }\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/tern/worker.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// declare global: tern, server\n\nvar server;\n\nthis.onmessage = function(e) {\n  var data = e.data;\n  switch (data.type) {\n  case \"init\": return startServer(data.defs, data.plugins, data.scripts);\n  case \"add\": return server.addFile(data.name, data.text);\n  case \"del\": return server.delFile(data.name);\n  case \"req\": return server.request(data.body, function(err, reqData) {\n    postMessage({id: data.id, body: reqData, err: err && String(err)});\n  });\n  case \"getFile\":\n    var c = pending[data.id];\n    delete pending[data.id];\n    return c(data.err, data.text);\n  default: throw new Error(\"Unknown message type: \" + data.type);\n  }\n};\n\nvar nextId = 0, pending = {};\nfunction getFile(file, c) {\n  postMessage({type: \"getFile\", name: file, id: ++nextId});\n  pending[nextId] = c;\n}\n\nfunction startServer(defs, plugins, scripts) {\n  if (scripts) importScripts.apply(null, scripts);\n\n  server = new tern.Server({\n    getFile: getFile,\n    async: true,\n    defs: defs,\n    plugins: plugins\n  });\n}\n\nthis.console = {\n  log: function(v) { postMessage({type: \"debug\", message: v}); }\n};\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/addon/wrap/hardwrap.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 Pos = CodeMirror.Pos;\n\n  function findParagraph(cm, pos, options) {\n    var startRE = options.paragraphStart || cm.getHelper(pos, \"paragraphStart\");\n    for (var start = pos.line, first = cm.firstLine(); start > first; --start) {\n      var line = cm.getLine(start);\n      if (startRE && startRE.test(line)) break;\n      if (!/\\S/.test(line)) { ++start; break; }\n    }\n    var endRE = options.paragraphEnd || cm.getHelper(pos, \"paragraphEnd\");\n    for (var end = pos.line + 1, last = cm.lastLine(); end <= last; ++end) {\n      var line = cm.getLine(end);\n      if (endRE && endRE.test(line)) { ++end; break; }\n      if (!/\\S/.test(line)) break;\n    }\n    return {from: start, to: end};\n  }\n\n  function findBreakPoint(text, column, wrapOn, killTrailingSpace) {\n    var at = column\n    while (at < text.length && text.charAt(at) == \" \") at++\n    for (; at > 0; --at)\n      if (wrapOn.test(text.slice(at - 1, at + 1))) break;\n    for (var first = true;; first = false) {\n      var endOfText = at;\n      if (killTrailingSpace)\n        while (text.charAt(endOfText - 1) == \" \") --endOfText;\n      if (endOfText == 0 && first) at = column;\n      else return {from: endOfText, to: at};\n    }\n  }\n\n  function wrapRange(cm, from, to, options) {\n    from = cm.clipPos(from); to = cm.clipPos(to);\n    var column = options.column || 80;\n    var wrapOn = options.wrapOn || /\\s\\S|-[^\\.\\d]/;\n    var killTrailing = options.killTrailingSpace !== false;\n    var changes = [], curLine = \"\", curNo = from.line;\n    var lines = cm.getRange(from, to, false);\n    if (!lines.length) return null;\n    var leadingSpace = lines[0].match(/^[ \\t]*/)[0];\n\n    for (var i = 0; i < lines.length; ++i) {\n      var text = lines[i], oldLen = curLine.length, spaceInserted = 0;\n      if (curLine && text && !wrapOn.test(curLine.charAt(curLine.length - 1) + text.charAt(0))) {\n        curLine += \" \";\n        spaceInserted = 1;\n      }\n      var spaceTrimmed = \"\";\n      if (i) {\n        spaceTrimmed = text.match(/^\\s*/)[0];\n        text = text.slice(spaceTrimmed.length);\n      }\n      curLine += text;\n      if (i) {\n        var firstBreak = curLine.length > column && leadingSpace == spaceTrimmed &&\n          findBreakPoint(curLine, column, wrapOn, killTrailing);\n        // If this isn't broken, or is broken at a different point, remove old break\n        if (!firstBreak || firstBreak.from != oldLen || firstBreak.to != oldLen + spaceInserted) {\n          changes.push({text: [spaceInserted ? \" \" : \"\"],\n                        from: Pos(curNo, oldLen),\n                        to: Pos(curNo + 1, spaceTrimmed.length)});\n        } else {\n          curLine = leadingSpace + text;\n          ++curNo;\n        }\n      }\n      while (curLine.length > column) {\n        var bp = findBreakPoint(curLine, column, wrapOn, killTrailing);\n        changes.push({text: [\"\", leadingSpace],\n                      from: Pos(curNo, bp.from),\n                      to: Pos(curNo, bp.to)});\n        curLine = leadingSpace + curLine.slice(bp.to);\n        ++curNo;\n      }\n    }\n    if (changes.length) cm.operation(function() {\n      for (var i = 0; i < changes.length; ++i) {\n        var change = changes[i];\n        if (change.text || CodeMirror.cmpPos(change.from, change.to))\n          cm.replaceRange(change.text, change.from, change.to);\n      }\n    });\n    return changes.length ? {from: changes[0].from, to: CodeMirror.changeEnd(changes[changes.length - 1])} : null;\n  }\n\n  CodeMirror.defineExtension(\"wrapParagraph\", function(pos, options) {\n    options = options || {};\n    if (!pos) pos = this.getCursor();\n    var para = findParagraph(this, pos, options);\n    return wrapRange(this, Pos(para.from, 0), Pos(para.to - 1), options);\n  });\n\n  CodeMirror.commands.wrapLines = function(cm) {\n    cm.operation(function() {\n      var ranges = cm.listSelections(), at = cm.lastLine() + 1;\n      for (var i = ranges.length - 1; i >= 0; i--) {\n        var range = ranges[i], span;\n        if (range.empty()) {\n          var para = findParagraph(cm, range.head, {});\n          span = {from: Pos(para.from, 0), to: Pos(para.to - 1)};\n        } else {\n          span = {from: range.from(), to: range.to()};\n        }\n        if (span.to.line >= at) continue;\n        at = span.from.line;\n        wrapRange(cm, span.from, span.to, {});\n      }\n    });\n  };\n\n  CodeMirror.defineExtension(\"wrapRange\", function(from, to, options) {\n    return wrapRange(this, from, to, options || {});\n  });\n\n  CodeMirror.defineExtension(\"wrapParagraphsInRange\", function(from, to, options) {\n    options = options || {};\n    var cm = this, paras = [];\n    for (var line = from.line; line <= to.line;) {\n      var para = findParagraph(cm, Pos(line, 0), options);\n      paras.push(para);\n      line = para.to;\n    }\n    var madeChange = false;\n    if (paras.length) cm.operation(function() {\n      for (var i = paras.length - 1; i >= 0; --i)\n        madeChange = madeChange || wrapRange(cm, Pos(paras[i].from, 0), Pos(paras[i].to - 1), options);\n    });\n    return madeChange;\n  });\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/keymap/emacs.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 Pos = CodeMirror.Pos;\n  function posEq(a, b) { return a.line == b.line && a.ch == b.ch; }\n\n  // Kill 'ring'\n\n  var killRing = [];\n  function addToRing(str) {\n    killRing.push(str);\n    if (killRing.length > 50) killRing.shift();\n  }\n  function growRingTop(str) {\n    if (!killRing.length) return addToRing(str);\n    killRing[killRing.length - 1] += str;\n  }\n  function getFromRing(n) { return killRing[killRing.length - (n ? Math.min(n, 1) : 1)] || \"\"; }\n  function popFromRing() { if (killRing.length > 1) killRing.pop(); return getFromRing(); }\n\n  var lastKill = null;\n\n  function kill(cm, from, to, mayGrow, text) {\n    if (text == null) text = cm.getRange(from, to);\n\n    if (mayGrow && lastKill && lastKill.cm == cm && posEq(from, lastKill.pos) && cm.isClean(lastKill.gen))\n      growRingTop(text);\n    else\n      addToRing(text);\n    cm.replaceRange(\"\", from, to, \"+delete\");\n\n    if (mayGrow) lastKill = {cm: cm, pos: from, gen: cm.changeGeneration()};\n    else lastKill = null;\n  }\n\n  // Boundaries of various units\n\n  function byChar(cm, pos, dir) {\n    return cm.findPosH(pos, dir, \"char\", true);\n  }\n\n  function byWord(cm, pos, dir) {\n    return cm.findPosH(pos, dir, \"word\", true);\n  }\n\n  function byLine(cm, pos, dir) {\n    return cm.findPosV(pos, dir, \"line\", cm.doc.sel.goalColumn);\n  }\n\n  function byPage(cm, pos, dir) {\n    return cm.findPosV(pos, dir, \"page\", cm.doc.sel.goalColumn);\n  }\n\n  function byParagraph(cm, pos, dir) {\n    var no = pos.line, line = cm.getLine(no);\n    var sawText = /\\S/.test(dir < 0 ? line.slice(0, pos.ch) : line.slice(pos.ch));\n    var fst = cm.firstLine(), lst = cm.lastLine();\n    for (;;) {\n      no += dir;\n      if (no < fst || no > lst)\n        return cm.clipPos(Pos(no - dir, dir < 0 ? 0 : null));\n      line = cm.getLine(no);\n      var hasText = /\\S/.test(line);\n      if (hasText) sawText = true;\n      else if (sawText) return Pos(no, 0);\n    }\n  }\n\n  function bySentence(cm, pos, dir) {\n    var line = pos.line, ch = pos.ch;\n    var text = cm.getLine(pos.line), sawWord = false;\n    for (;;) {\n      var next = text.charAt(ch + (dir < 0 ? -1 : 0));\n      if (!next) { // End/beginning of line reached\n        if (line == (dir < 0 ? cm.firstLine() : cm.lastLine())) return Pos(line, ch);\n        text = cm.getLine(line + dir);\n        if (!/\\S/.test(text)) return Pos(line, ch);\n        line += dir;\n        ch = dir < 0 ? text.length : 0;\n        continue;\n      }\n      if (sawWord && /[!?.]/.test(next)) return Pos(line, ch + (dir > 0 ? 1 : 0));\n      if (!sawWord) sawWord = /\\w/.test(next);\n      ch += dir;\n    }\n  }\n\n  function byExpr(cm, pos, dir) {\n    var wrap;\n    if (cm.findMatchingBracket && (wrap = cm.findMatchingBracket(pos, true))\n        && wrap.match && (wrap.forward ? 1 : -1) == dir)\n      return dir > 0 ? Pos(wrap.to.line, wrap.to.ch + 1) : wrap.to;\n\n    for (var first = true;; first = false) {\n      var token = cm.getTokenAt(pos);\n      var after = Pos(pos.line, dir < 0 ? token.start : token.end);\n      if (first && dir > 0 && token.end == pos.ch || !/\\w/.test(token.string)) {\n        var newPos = cm.findPosH(after, dir, \"char\");\n        if (posEq(after, newPos)) return pos;\n        else pos = newPos;\n      } else {\n        return after;\n      }\n    }\n  }\n\n  // Prefixes (only crudely supported)\n\n  function getPrefix(cm, precise) {\n    var digits = cm.state.emacsPrefix;\n    if (!digits) return precise ? null : 1;\n    clearPrefix(cm);\n    return digits == \"-\" ? -1 : Number(digits);\n  }\n\n  function repeated(cmd) {\n    var f = typeof cmd == \"string\" ? function(cm) { cm.execCommand(cmd); } : cmd;\n    return function(cm) {\n      var prefix = getPrefix(cm);\n      f(cm);\n      for (var i = 1; i < prefix; ++i) f(cm);\n    };\n  }\n\n  function findEnd(cm, pos, by, dir) {\n    var prefix = getPrefix(cm);\n    if (prefix < 0) { dir = -dir; prefix = -prefix; }\n    for (var i = 0; i < prefix; ++i) {\n      var newPos = by(cm, pos, dir);\n      if (posEq(newPos, pos)) break;\n      pos = newPos;\n    }\n    return pos;\n  }\n\n  function move(by, dir) {\n    var f = function(cm) {\n      cm.extendSelection(findEnd(cm, cm.getCursor(), by, dir));\n    };\n    f.motion = true;\n    return f;\n  }\n\n  function killTo(cm, by, dir) {\n    var selections = cm.listSelections(), cursor;\n    var i = selections.length;\n    while (i--) {\n      cursor = selections[i].head;\n      kill(cm, cursor, findEnd(cm, cursor, by, dir), true);\n    }\n  }\n\n  function killRegion(cm) {\n    if (cm.somethingSelected()) {\n      var selections = cm.listSelections(), selection;\n      var i = selections.length;\n      while (i--) {\n        selection = selections[i];\n        kill(cm, selection.anchor, selection.head);\n      }\n      return true;\n    }\n  }\n\n  function addPrefix(cm, digit) {\n    if (cm.state.emacsPrefix) {\n      if (digit != \"-\") cm.state.emacsPrefix += digit;\n      return;\n    }\n    // Not active yet\n    cm.state.emacsPrefix = digit;\n    cm.on(\"keyHandled\", maybeClearPrefix);\n    cm.on(\"inputRead\", maybeDuplicateInput);\n  }\n\n  var prefixPreservingKeys = {\"Alt-G\": true, \"Ctrl-X\": true, \"Ctrl-Q\": true, \"Ctrl-U\": true};\n\n  function maybeClearPrefix(cm, arg) {\n    if (!cm.state.emacsPrefixMap && !prefixPreservingKeys.hasOwnProperty(arg))\n      clearPrefix(cm);\n  }\n\n  function clearPrefix(cm) {\n    cm.state.emacsPrefix = null;\n    cm.off(\"keyHandled\", maybeClearPrefix);\n    cm.off(\"inputRead\", maybeDuplicateInput);\n  }\n\n  function maybeDuplicateInput(cm, event) {\n    var dup = getPrefix(cm);\n    if (dup > 1 && event.origin == \"+input\") {\n      var one = event.text.join(\"\\n\"), txt = \"\";\n      for (var i = 1; i < dup; ++i) txt += one;\n      cm.replaceSelection(txt);\n    }\n  }\n\n  function addPrefixMap(cm) {\n    cm.state.emacsPrefixMap = true;\n    cm.addKeyMap(prefixMap);\n    cm.on(\"keyHandled\", maybeRemovePrefixMap);\n    cm.on(\"inputRead\", maybeRemovePrefixMap);\n  }\n\n  function maybeRemovePrefixMap(cm, arg) {\n    if (typeof arg == \"string\" && (/^\\d$/.test(arg) || arg == \"Ctrl-U\")) return;\n    cm.removeKeyMap(prefixMap);\n    cm.state.emacsPrefixMap = false;\n    cm.off(\"keyHandled\", maybeRemovePrefixMap);\n    cm.off(\"inputRead\", maybeRemovePrefixMap);\n  }\n\n  // Utilities\n\n  function setMark(cm) {\n    cm.setCursor(cm.getCursor());\n    cm.setExtending(!cm.getExtending());\n    cm.on(\"change\", function() { cm.setExtending(false); });\n  }\n\n  function clearMark(cm) {\n    cm.setExtending(false);\n    cm.setCursor(cm.getCursor());\n  }\n\n  function getInput(cm, msg, f) {\n    if (cm.openDialog)\n      cm.openDialog(msg + \": <input type=\\\"text\\\" style=\\\"width: 10em\\\"/>\", f, {bottom: true});\n    else\n      f(prompt(msg, \"\"));\n  }\n\n  function operateOnWord(cm, op) {\n    var start = cm.getCursor(), end = cm.findPosH(start, 1, \"word\");\n    cm.replaceRange(op(cm.getRange(start, end)), start, end);\n    cm.setCursor(end);\n  }\n\n  function toEnclosingExpr(cm) {\n    var pos = cm.getCursor(), line = pos.line, ch = pos.ch;\n    var stack = [];\n    while (line >= cm.firstLine()) {\n      var text = cm.getLine(line);\n      for (var i = ch == null ? text.length : ch; i > 0;) {\n        var ch = text.charAt(--i);\n        if (ch == \")\")\n          stack.push(\"(\");\n        else if (ch == \"]\")\n          stack.push(\"[\");\n        else if (ch == \"}\")\n          stack.push(\"{\");\n        else if (/[\\(\\{\\[]/.test(ch) && (!stack.length || stack.pop() != ch))\n          return cm.extendSelection(Pos(line, i));\n      }\n      --line; ch = null;\n    }\n  }\n\n  function quit(cm) {\n    cm.execCommand(\"clearSearch\");\n    clearMark(cm);\n  }\n\n  CodeMirror.emacs = {kill: kill, killRegion: killRegion, repeated: repeated};\n\n  // Actual keymap\n\n  var keyMap = CodeMirror.keyMap.emacs = CodeMirror.normalizeKeyMap({\n    \"Ctrl-W\": function(cm) {kill(cm, cm.getCursor(\"start\"), cm.getCursor(\"end\"));},\n    \"Ctrl-K\": repeated(function(cm) {\n      var start = cm.getCursor(), end = cm.clipPos(Pos(start.line));\n      var text = cm.getRange(start, end);\n      if (!/\\S/.test(text)) {\n        text += \"\\n\";\n        end = Pos(start.line + 1, 0);\n      }\n      kill(cm, start, end, true, text);\n    }),\n    \"Alt-W\": function(cm) {\n      addToRing(cm.getSelection());\n      clearMark(cm);\n    },\n    \"Ctrl-Y\": function(cm) {\n      var start = cm.getCursor();\n      cm.replaceRange(getFromRing(getPrefix(cm)), start, start, \"paste\");\n      cm.setSelection(start, cm.getCursor());\n    },\n    \"Alt-Y\": function(cm) {cm.replaceSelection(popFromRing(), \"around\", \"paste\");},\n\n    \"Ctrl-Space\": setMark, \"Ctrl-Shift-2\": setMark,\n\n    \"Ctrl-F\": move(byChar, 1), \"Ctrl-B\": move(byChar, -1),\n    \"Right\": move(byChar, 1), \"Left\": move(byChar, -1),\n    \"Ctrl-D\": function(cm) { killTo(cm, byChar, 1); },\n    \"Delete\": function(cm) { killRegion(cm) || killTo(cm, byChar, 1); },\n    \"Ctrl-H\": function(cm) { killTo(cm, byChar, -1); },\n    \"Backspace\": function(cm) { killRegion(cm) || killTo(cm, byChar, -1); },\n\n    \"Alt-F\": move(byWord, 1), \"Alt-B\": move(byWord, -1),\n    \"Alt-D\": function(cm) { killTo(cm, byWord, 1); },\n    \"Alt-Backspace\": function(cm) { killTo(cm, byWord, -1); },\n\n    \"Ctrl-N\": move(byLine, 1), \"Ctrl-P\": move(byLine, -1),\n    \"Down\": move(byLine, 1), \"Up\": move(byLine, -1),\n    \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStart\",\n\n    \"Alt-V\": move(byPage, -1), \"Ctrl-V\": move(byPage, 1),\n    \"PageUp\": move(byPage, -1), \"PageDown\": move(byPage, 1),\n\n    \"Ctrl-Up\": move(byParagraph, -1), \"Ctrl-Down\": move(byParagraph, 1),\n\n    \"Alt-A\": move(bySentence, -1), \"Alt-E\": move(bySentence, 1),\n    \"Alt-K\": function(cm) { killTo(cm, bySentence, 1); },\n\n    \"Ctrl-Alt-K\": function(cm) { killTo(cm, byExpr, 1); },\n    \"Ctrl-Alt-Backspace\": function(cm) { killTo(cm, byExpr, -1); },\n    \"Ctrl-Alt-F\": move(byExpr, 1), \"Ctrl-Alt-B\": move(byExpr, -1),\n\n    \"Shift-Ctrl-Alt-2\": function(cm) {\n      var cursor = cm.getCursor();\n      cm.setSelection(findEnd(cm, cursor, byExpr, 1), cursor);\n    },\n    \"Ctrl-Alt-T\": function(cm) {\n      var leftStart = byExpr(cm, cm.getCursor(), -1), leftEnd = byExpr(cm, leftStart, 1);\n      var rightEnd = byExpr(cm, leftEnd, 1), rightStart = byExpr(cm, rightEnd, -1);\n      cm.replaceRange(cm.getRange(rightStart, rightEnd) + cm.getRange(leftEnd, rightStart) +\n                      cm.getRange(leftStart, leftEnd), leftStart, rightEnd);\n    },\n    \"Ctrl-Alt-U\": repeated(toEnclosingExpr),\n\n    \"Alt-Space\": function(cm) {\n      var pos = cm.getCursor(), from = pos.ch, to = pos.ch, text = cm.getLine(pos.line);\n      while (from && /\\s/.test(text.charAt(from - 1))) --from;\n      while (to < text.length && /\\s/.test(text.charAt(to))) ++to;\n      cm.replaceRange(\" \", Pos(pos.line, from), Pos(pos.line, to));\n    },\n    \"Ctrl-O\": repeated(function(cm) { cm.replaceSelection(\"\\n\", \"start\"); }),\n    \"Ctrl-T\": repeated(function(cm) {\n      cm.execCommand(\"transposeChars\");\n    }),\n\n    \"Alt-C\": repeated(function(cm) {\n      operateOnWord(cm, function(w) {\n        var letter = w.search(/\\w/);\n        if (letter == -1) return w;\n        return w.slice(0, letter) + w.charAt(letter).toUpperCase() + w.slice(letter + 1).toLowerCase();\n      });\n    }),\n    \"Alt-U\": repeated(function(cm) {\n      operateOnWord(cm, function(w) { return w.toUpperCase(); });\n    }),\n    \"Alt-L\": repeated(function(cm) {\n      operateOnWord(cm, function(w) { return w.toLowerCase(); });\n    }),\n\n    \"Alt-;\": \"toggleComment\",\n\n    \"Ctrl-/\": repeated(\"undo\"), \"Shift-Ctrl--\": repeated(\"undo\"),\n    \"Ctrl-Z\": repeated(\"undo\"), \"Cmd-Z\": repeated(\"undo\"),\n    \"Shift-Alt-,\": \"goDocStart\", \"Shift-Alt-.\": \"goDocEnd\",\n    \"Ctrl-S\": \"findNext\", \"Ctrl-R\": \"findPrev\", \"Ctrl-G\": quit, \"Shift-Alt-5\": \"replace\",\n    \"Alt-/\": \"autocomplete\",\n    \"Enter\": \"newlineAndIndent\",\n    \"Ctrl-J\": repeated(function(cm) { cm.replaceSelection(\"\\n\", \"end\"); }),\n    \"Tab\": \"indentAuto\",\n\n    \"Alt-G G\": function(cm) {\n      var prefix = getPrefix(cm, true);\n      if (prefix != null && prefix > 0) return cm.setCursor(prefix - 1);\n\n      getInput(cm, \"Goto line\", function(str) {\n        var num;\n        if (str && !isNaN(num = Number(str)) && num == (num|0) && num > 0)\n          cm.setCursor(num - 1);\n      });\n    },\n\n    \"Ctrl-X Tab\": function(cm) {\n      cm.indentSelection(getPrefix(cm, true) || cm.getOption(\"indentUnit\"));\n    },\n    \"Ctrl-X Ctrl-X\": function(cm) {\n      cm.setSelection(cm.getCursor(\"head\"), cm.getCursor(\"anchor\"));\n    },\n    \"Ctrl-X Ctrl-S\": \"save\",\n    \"Ctrl-X Ctrl-W\": \"save\",\n    \"Ctrl-X S\": \"saveAll\",\n    \"Ctrl-X F\": \"open\",\n    \"Ctrl-X U\": repeated(\"undo\"),\n    \"Ctrl-X K\": \"close\",\n    \"Ctrl-X Delete\": function(cm) { kill(cm, cm.getCursor(), bySentence(cm, cm.getCursor(), 1), true); },\n    \"Ctrl-X H\": \"selectAll\",\n\n    \"Ctrl-Q Tab\": repeated(\"insertTab\"),\n    \"Ctrl-U\": addPrefixMap\n  });\n\n  var prefixMap = {\"Ctrl-G\": clearPrefix};\n  function regPrefix(d) {\n    prefixMap[d] = function(cm) { addPrefix(cm, d); };\n    keyMap[\"Ctrl-\" + d] = function(cm) { addPrefix(cm, d); };\n    prefixPreservingKeys[\"Ctrl-\" + d] = true;\n  }\n  for (var i = 0; i < 10; ++i) regPrefix(String(i));\n  regPrefix(\"-\");\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/keymap/sublime.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://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 map = CodeMirror.keyMap.sublime = {fallthrough: \"default\"};\n  var cmds = CodeMirror.commands;\n  var Pos = CodeMirror.Pos;\n  var mac = CodeMirror.keyMap[\"default\"] == CodeMirror.keyMap.macDefault;\n  var ctrl = mac ? \"Cmd-\" : \"Ctrl-\";\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;\n    for (var pos = start.ch, 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 if (state == \"in\") {\n        if (type != cat) {\n          if (type == \"w\" && cat == \"W\" && dir < 0) pos--;\n          if (type == \"W\" && cat == \"w\" && dir > 0) { type = \"w\"; continue; }\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  var goSubwordCombo = mac ? \"Ctrl-\" : \"Alt-\";\n\n  cmds[map[goSubwordCombo + \"Left\"] = \"goSubwordLeft\"] = function(cm) { moveSubword(cm, -1); };\n  cmds[map[goSubwordCombo + \"Right\"] = \"goSubwordRight\"] = function(cm) { moveSubword(cm, 1); };\n\n  if (mac) map[\"Cmd-Left\"] = \"goLineStartSmart\";\n\n  var scrollLineCombo = mac ? \"Ctrl-Alt-\" : \"Ctrl-\";\n\n  cmds[map[scrollLineCombo + \"Up\"] = \"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[map[scrollLineCombo + \"Down\"] = \"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[map[\"Shift-\" + ctrl + \"L\"] = \"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  map[\"Shift-Tab\"] = \"indentLess\";\n\n  cmds[map[\"Esc\"] = \"singleSelectionTop\"] = function(cm) {\n    var range = cm.listSelections()[0];\n    cm.setSelection(range.anchor, range.head, {scroll: false});\n  };\n\n  cmds[map[ctrl + \"L\"] = \"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  map[\"Shift-Ctrl-K\"] = \"deleteLine\";\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[map[ctrl + \"Enter\"] = \"insertLineAfter\"] = function(cm) { return insertLine(cm, false); };\n\n  cmds[map[\"Shift-\" + ctrl + \"Enter\"] = \"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[map[ctrl + \"D\"] = \"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()))\n        return CodeMirror.Pass\n      cm.addSelection(cur.from(), cur.to());\n    }\n    if (fullWord)\n      cm.state.sublimeFindFullWord = cm.doc.sel;\n  };\n\n  function isSelectedRange(ranges, from, to) {\n    for (var i = 0; i < ranges.length; i++)\n      if (ranges[i].from() == from && ranges[i].to() == to) 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          newRanges.push({anchor: Pos(opening.pos.line, opening.pos.ch + 1),\n                          head: closing.pos});\n          break;\n        }\n        pos = Pos(closing.pos.line, closing.pos.ch + 1);\n      }\n    }\n    cm.setSelections(newRanges);\n    return true;\n  }\n\n  cmds[map[\"Shift-\" + ctrl + \"Space\"] = \"selectScope\"] = function(cm) {\n    selectBetweenBrackets(cm) || cm.execCommand(\"selectAll\");\n  };\n  cmds[map[\"Shift-\" + ctrl + \"M\"] = \"selectBetweenBrackets\"] = function(cm) {\n    if (!selectBetweenBrackets(cm)) return CodeMirror.Pass;\n  };\n\n  cmds[map[ctrl + \"M\"] = \"goToBracket\"] = function(cm) {\n    cm.extendSelectionsBy(function(range) {\n      var next = cm.scanForBracket(range.head, 1);\n      if (next && CodeMirror.cmpPos(next.pos, range.head) != 0) return next.pos;\n      var prev = cm.scanForBracket(range.head, -1);\n      return prev && Pos(prev.pos.line, prev.pos.ch + 1) || range.head;\n    });\n  };\n\n  var swapLineCombo = mac ? \"Cmd-Ctrl-\" : \"Shift-Ctrl-\";\n\n  cmds[map[swapLineCombo + \"Up\"] = \"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[map[swapLineCombo + \"Down\"] = \"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[map[ctrl + \"/\"] = \"toggleCommentIndented\"] = function(cm) {\n    cm.toggleComment({ indent: true });\n  }\n\n  cmds[map[ctrl + \"J\"] = \"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[map[\"Shift-\" + ctrl + \"D\"] = \"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  if (!mac) map[ctrl + \"T\"] = \"transposeChars\";\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[map[\"F9\"] = \"sortLines\"] = function(cm) { sortLines(cm, true); };\n  cmds[map[ctrl + \"F9\"] = \"sortLinesInsensitive\"] = function(cm) { sortLines(cm, false); };\n\n  cmds[map[\"F2\"] = \"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[map[\"Shift-F2\"] = \"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[map[ctrl + \"F2\"] = \"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 = 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[map[\"Shift-\" + ctrl + \"F2\"] = \"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[map[\"Alt-F2\"] = \"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  map[\"Alt-Q\"] = \"wrapLines\";\n\n  var cK = ctrl + \"K \";\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  map[cK + ctrl + \"Backspace\"] = \"delLineLeft\";\n\n  cmds[map[\"Backspace\"] = \"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[map[cK + ctrl + \"K\"] = \"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[map[cK + ctrl + \"U\"] = \"upcaseAtCursor\"] = function(cm) {\n    modifyWordOrSelection(cm, function(str) { return str.toUpperCase(); });\n  };\n  cmds[map[cK + ctrl + \"L\"] = \"downcaseAtCursor\"] = function(cm) {\n    modifyWordOrSelection(cm, function(str) { return str.toLowerCase(); });\n  };\n\n  cmds[map[cK + ctrl + \"Space\"] = \"setSublimeMark\"] = function(cm) {\n    if (cm.state.sublimeMark) cm.state.sublimeMark.clear();\n    cm.state.sublimeMark = cm.setBookmark(cm.getCursor());\n  };\n  cmds[map[cK + ctrl + \"A\"] = \"selectToSublimeMark\"] = function(cm) {\n    var found = cm.state.sublimeMark && cm.state.sublimeMark.find();\n    if (found) cm.setSelection(cm.getCursor(), found);\n  };\n  cmds[map[cK + ctrl + \"W\"] = \"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[map[cK + ctrl + \"X\"] = \"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[map[cK + ctrl + \"Y\"] = \"sublimeYank\"] = function(cm) {\n    if (cm.state.sublimeKilled != null)\n      cm.replaceSelection(cm.state.sublimeKilled, null, \"paste\");\n  };\n\n  map[cK + ctrl + \"G\"] = \"clearBookmarks\";\n  cmds[map[cK + ctrl + \"C\"] = \"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  var selectLinesCombo = mac ? \"Ctrl-Shift-\" : \"Ctrl-Alt-\";\n  cmds[map[selectLinesCombo + \"Up\"] = \"selectLinesUpward\"] = function(cm) {\n    cm.operation(function() {\n      var ranges = cm.listSelections();\n      for (var i = 0; i < ranges.length; i++) {\n        var range = ranges[i];\n        if (range.head.line > cm.firstLine())\n          cm.addSelection(Pos(range.head.line - 1, range.head.ch));\n      }\n    });\n  };\n  cmds[map[selectLinesCombo + \"Down\"] = \"selectLinesDownward\"] = function(cm) {\n    cm.operation(function() {\n      var ranges = cm.listSelections();\n      for (var i = 0; i < ranges.length; i++) {\n        var range = ranges[i];\n        if (range.head.line < cm.lastLine())\n          cm.addSelection(Pos(range.head.line + 1, range.head.ch));\n      }\n    });\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[map[ctrl + \"F3\"] = \"findUnder\"] = function(cm) { findAndGoTo(cm, true); };\n  cmds[map[\"Shift-\" + ctrl + \"F3\"] = \"findUnderPrevious\"] = function(cm) { findAndGoTo(cm,false); };\n  cmds[map[\"Alt-F3\"] = \"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  map[\"Shift-\" + ctrl + \"[\"] = \"fold\";\n  map[\"Shift-\" + ctrl + \"]\"] = \"unfold\";\n  map[cK + ctrl + \"0\"] = map[cK + ctrl + \"J\"] = \"unfoldAll\";\n\n  map[ctrl + \"I\"] = \"findIncremental\";\n  map[\"Shift-\" + ctrl + \"I\"] = \"findIncrementalReverse\";\n  map[ctrl + \"H\"] = \"replace\";\n  map[\"F3\"] = \"findNext\";\n  map[\"Shift-F3\"] = \"findPrev\";\n\n  CodeMirror.normalizeKeyMap(map);\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/keymap/vim.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n/**\n * Supported keybindings:\n *   Too many to list. Refer to defaultKeyMap below.\n *\n * Supported Ex commands:\n *   Refer to defaultExCommandMap below.\n *\n * Registers: unnamed, -, a-z, A-Z, 0-9\n *   (Does not respect the special case for number registers when delete\n *    operator is made with these commands: %, (, ),  , /, ?, n, N, {, } )\n *   TODO: Implement the remaining registers.\n *\n * Marks: a-z, A-Z, and 0-9\n *   TODO: Implement the remaining special marks. They have more complex\n *       behavior.\n *\n * Events:\n *  'vim-mode-change' - raised on the editor anytime the current mode changes,\n *                      Event object: {mode: \"visual\", subMode: \"linewise\"}\n *\n * Code structure:\n *  1. Default keymap\n *  2. Variable declarations and short basic helpers\n *  3. Instance (External API) implementation\n *  4. Internal state tracking objects (input state, counter) implementation\n *     and instantiation\n *  5. Key handler (the main command dispatcher) implementation\n *  6. Motion, operator, and action implementations\n *  7. Helper functions for the key handler, motions, operators, and actions\n *  8. Set up Vim to work as a keymap for CodeMirror.\n *  9. Ex command implementations.\n */\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../lib/codemirror\"), require(\"../addon/search/searchcursor\"), require(\"../addon/dialog/dialog\"), require(\"../addon/edit/matchbrackets.js\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../lib/codemirror\", \"../addon/search/searchcursor\", \"../addon/dialog/dialog\", \"../addon/edit/matchbrackets\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n  'use strict';\n\n  var defaultKeymap = [\n    // Key to key mapping. This goes first to make it possible to override\n    // existing mappings.\n    { keys: '<Left>', type: 'keyToKey', toKeys: 'h' },\n    { keys: '<Right>', type: 'keyToKey', toKeys: 'l' },\n    { keys: '<Up>', type: 'keyToKey', toKeys: 'k' },\n    { keys: '<Down>', type: 'keyToKey', toKeys: 'j' },\n    { keys: '<Space>', type: 'keyToKey', toKeys: 'l' },\n    { keys: '<BS>', type: 'keyToKey', toKeys: 'h', context: 'normal'},\n    { keys: '<C-Space>', type: 'keyToKey', toKeys: 'W' },\n    { keys: '<C-BS>', type: 'keyToKey', toKeys: 'B', context: 'normal' },\n    { keys: '<S-Space>', type: 'keyToKey', toKeys: 'w' },\n    { keys: '<S-BS>', type: 'keyToKey', toKeys: 'b', context: 'normal' },\n    { keys: '<C-n>', type: 'keyToKey', toKeys: 'j' },\n    { keys: '<C-p>', type: 'keyToKey', toKeys: 'k' },\n    { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>' },\n    { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>' },\n    { keys: '<C-[>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },\n    { keys: '<C-c>', type: 'keyToKey', toKeys: '<Esc>', context: 'insert' },\n    { keys: 's', type: 'keyToKey', toKeys: 'cl', context: 'normal' },\n    { keys: 's', type: 'keyToKey', toKeys: 'c', context: 'visual'},\n    { keys: 'S', type: 'keyToKey', toKeys: 'cc', context: 'normal' },\n    { keys: 'S', type: 'keyToKey', toKeys: 'VdO', context: 'visual' },\n    { keys: '<Home>', type: 'keyToKey', toKeys: '0' },\n    { keys: '<End>', type: 'keyToKey', toKeys: '$' },\n    { keys: '<PageUp>', type: 'keyToKey', toKeys: '<C-b>' },\n    { keys: '<PageDown>', type: 'keyToKey', toKeys: '<C-f>' },\n    { keys: '<CR>', type: 'keyToKey', toKeys: 'j^', context: 'normal' },\n    { keys: '<Ins>', type: 'action', action: 'toggleOverwrite', context: 'insert' },\n    // Motions\n    { keys: 'H', type: 'motion', motion: 'moveToTopLine', motionArgs: { linewise: true, toJumplist: true }},\n    { keys: 'M', type: 'motion', motion: 'moveToMiddleLine', motionArgs: { linewise: true, toJumplist: true }},\n    { keys: 'L', type: 'motion', motion: 'moveToBottomLine', motionArgs: { linewise: true, toJumplist: true }},\n    { keys: 'h', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: false }},\n    { keys: 'l', type: 'motion', motion: 'moveByCharacters', motionArgs: { forward: true }},\n    { keys: 'j', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, linewise: true }},\n    { keys: 'k', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, linewise: true }},\n    { keys: 'gj', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: true }},\n    { keys: 'gk', type: 'motion', motion: 'moveByDisplayLines', motionArgs: { forward: false }},\n    { keys: 'w', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false }},\n    { keys: 'W', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: false, bigWord: true }},\n    { keys: 'e', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, inclusive: true }},\n    { keys: 'E', type: 'motion', motion: 'moveByWords', motionArgs: { forward: true, wordEnd: true, bigWord: true, inclusive: true }},\n    { keys: 'b', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }},\n    { keys: 'B', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false, bigWord: true }},\n    { keys: 'ge', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, inclusive: true }},\n    { keys: 'gE', type: 'motion', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: true, bigWord: true, inclusive: true }},\n    { keys: '{', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: false, toJumplist: true }},\n    { keys: '}', type: 'motion', motion: 'moveByParagraph', motionArgs: { forward: true, toJumplist: true }},\n    { keys: '<C-f>', type: 'motion', motion: 'moveByPage', motionArgs: { forward: true }},\n    { keys: '<C-b>', type: 'motion', motion: 'moveByPage', motionArgs: { forward: false }},\n    { keys: '<C-d>', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: true, explicitRepeat: true }},\n    { keys: '<C-u>', type: 'motion', motion: 'moveByScroll', motionArgs: { forward: false, explicitRepeat: true }},\n    { keys: 'gg', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: false, explicitRepeat: true, linewise: true, toJumplist: true }},\n    { keys: 'G', type: 'motion', motion: 'moveToLineOrEdgeOfDocument', motionArgs: { forward: true, explicitRepeat: true, linewise: true, toJumplist: true }},\n    { keys: '0', type: 'motion', motion: 'moveToStartOfLine' },\n    { keys: '^', type: 'motion', motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: '+', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true }},\n    { keys: '-', type: 'motion', motion: 'moveByLines', motionArgs: { forward: false, toFirstChar:true }},\n    { keys: '_', type: 'motion', motion: 'moveByLines', motionArgs: { forward: true, toFirstChar:true, repeatOffset:-1 }},\n    { keys: '$', type: 'motion', motion: 'moveToEol', motionArgs: { inclusive: true }},\n    { keys: '%', type: 'motion', motion: 'moveToMatchedSymbol', motionArgs: { inclusive: true, toJumplist: true }},\n    { keys: 'f<character>', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: true , inclusive: true }},\n    { keys: 'F<character>', type: 'motion', motion: 'moveToCharacter', motionArgs: { forward: false }},\n    { keys: 't<character>', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: true, inclusive: true }},\n    { keys: 'T<character>', type: 'motion', motion: 'moveTillCharacter', motionArgs: { forward: false }},\n    { keys: ';', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: true }},\n    { keys: ',', type: 'motion', motion: 'repeatLastCharacterSearch', motionArgs: { forward: false }},\n    { keys: '\\'<character>', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true, linewise: true}},\n    { keys: '`<character>', type: 'motion', motion: 'goToMark', motionArgs: {toJumplist: true}},\n    { keys: ']`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true } },\n    { keys: '[`', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false } },\n    { keys: ']\\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: true, linewise: true } },\n    { keys: '[\\'', type: 'motion', motion: 'jumpToMark', motionArgs: { forward: false, linewise: true } },\n    // the next two aren't motions but must come before more general motion declarations\n    { keys: ']p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true, matchIndent: true}},\n    { keys: '[p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true, matchIndent: true}},\n    { keys: ']<character>', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: true, toJumplist: true}},\n    { keys: '[<character>', type: 'motion', motion: 'moveToSymbol', motionArgs: { forward: false, toJumplist: true}},\n    { keys: '|', type: 'motion', motion: 'moveToColumn'},\n    { keys: 'o', type: 'motion', motion: 'moveToOtherHighlightedEnd', context:'visual'},\n    { keys: 'O', type: 'motion', motion: 'moveToOtherHighlightedEnd', motionArgs: {sameLine: true}, context:'visual'},\n    // Operators\n    { keys: 'd', type: 'operator', operator: 'delete' },\n    { keys: 'y', type: 'operator', operator: 'yank' },\n    { keys: 'c', type: 'operator', operator: 'change' },\n    { keys: '>', type: 'operator', operator: 'indent', operatorArgs: { indentRight: true }},\n    { keys: '<', type: 'operator', operator: 'indent', operatorArgs: { indentRight: false }},\n    { keys: 'g~', type: 'operator', operator: 'changeCase' },\n    { keys: 'gu', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, isEdit: true },\n    { keys: 'gU', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, isEdit: true },\n    { keys: 'n', type: 'motion', motion: 'findNext', motionArgs: { forward: true, toJumplist: true }},\n    { keys: 'N', type: 'motion', motion: 'findNext', motionArgs: { forward: false, toJumplist: true }},\n    // Operator-Motion dual commands\n    { keys: 'x', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorMotionArgs: { visualLine: false }},\n    { keys: 'X', type: 'operatorMotion', operator: 'delete', motion: 'moveByCharacters', motionArgs: { forward: false }, operatorMotionArgs: { visualLine: true }},\n    { keys: 'D', type: 'operatorMotion', operator: 'delete', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},\n    { keys: 'D', type: 'operator', operator: 'delete', operatorArgs: { linewise: true }, context: 'visual'},\n    { keys: 'Y', type: 'operatorMotion', operator: 'yank', motion: 'expandToLine', motionArgs: { linewise: true }, context: 'normal'},\n    { keys: 'Y', type: 'operator', operator: 'yank', operatorArgs: { linewise: true }, context: 'visual'},\n    { keys: 'C', type: 'operatorMotion', operator: 'change', motion: 'moveToEol', motionArgs: { inclusive: true }, context: 'normal'},\n    { keys: 'C', type: 'operator', operator: 'change', operatorArgs: { linewise: true }, context: 'visual'},\n    { keys: '~', type: 'operatorMotion', operator: 'changeCase', motion: 'moveByCharacters', motionArgs: { forward: true }, operatorArgs: { shouldMoveCursor: true }, context: 'normal'},\n    { keys: '~', type: 'operator', operator: 'changeCase', context: 'visual'},\n    { keys: '<C-w>', type: 'operatorMotion', operator: 'delete', motion: 'moveByWords', motionArgs: { forward: false, wordEnd: false }, context: 'insert' },\n    // Actions\n    { keys: '<C-i>', type: 'action', action: 'jumpListWalk', actionArgs: { forward: true }},\n    { keys: '<C-o>', type: 'action', action: 'jumpListWalk', actionArgs: { forward: false }},\n    { keys: '<C-e>', type: 'action', action: 'scroll', actionArgs: { forward: true, linewise: true }},\n    { keys: '<C-y>', type: 'action', action: 'scroll', actionArgs: { forward: false, linewise: true }},\n    { keys: 'a', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'charAfter' }, context: 'normal' },\n    { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'eol' }, context: 'normal' },\n    { keys: 'A', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'endOfSelectedArea' }, context: 'visual' },\n    { keys: 'i', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'inplace' }, context: 'normal' },\n    { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'firstNonBlank'}, context: 'normal' },\n    { keys: 'I', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'startOfSelectedArea' }, context: 'visual' },\n    { keys: 'o', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: true }, context: 'normal' },\n    { keys: 'O', type: 'action', action: 'newLineAndEnterInsertMode', isEdit: true, interlaceInsertRepeat: true, actionArgs: { after: false }, context: 'normal' },\n    { keys: 'v', type: 'action', action: 'toggleVisualMode' },\n    { keys: 'V', type: 'action', action: 'toggleVisualMode', actionArgs: { linewise: true }},\n    { keys: '<C-v>', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true }},\n    { keys: '<C-q>', type: 'action', action: 'toggleVisualMode', actionArgs: { blockwise: true }},\n    { keys: 'gv', type: 'action', action: 'reselectLastSelection' },\n    { keys: 'J', type: 'action', action: 'joinLines', isEdit: true },\n    { keys: 'p', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: true, isEdit: true }},\n    { keys: 'P', type: 'action', action: 'paste', isEdit: true, actionArgs: { after: false, isEdit: true }},\n    { keys: 'r<character>', type: 'action', action: 'replace', isEdit: true },\n    { keys: '@<character>', type: 'action', action: 'replayMacro' },\n    { keys: 'q<character>', type: 'action', action: 'enterMacroRecordMode' },\n    // Handle Replace-mode as a special case of insert mode.\n    { keys: 'R', type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { replace: true }},\n    { keys: 'u', type: 'action', action: 'undo', context: 'normal' },\n    { keys: 'u', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: true}, context: 'visual', isEdit: true },\n    { keys: 'U', type: 'operator', operator: 'changeCase', operatorArgs: {toLower: false}, context: 'visual', isEdit: true },\n    { keys: '<C-r>', type: 'action', action: 'redo' },\n    { keys: 'm<character>', type: 'action', action: 'setMark' },\n    { keys: '\"<character>', type: 'action', action: 'setRegister' },\n    { keys: 'zz', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }},\n    { keys: 'z.', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'center' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: 'zt', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }},\n    { keys: 'z<CR>', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'top' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: 'z-', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }},\n    { keys: 'zb', type: 'action', action: 'scrollToCursor', actionArgs: { position: 'bottom' }, motion: 'moveToFirstNonWhiteSpaceCharacter' },\n    { keys: '.', type: 'action', action: 'repeatLastEdit' },\n    { keys: '<C-a>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: true, backtrack: false}},\n    { keys: '<C-x>', type: 'action', action: 'incrementNumberToken', isEdit: true, actionArgs: {increase: false, backtrack: false}},\n    { keys: '<C-t>', type: 'action', action: 'indent', actionArgs: { indentRight: true }, context: 'insert' },\n    { keys: '<C-d>', type: 'action', action: 'indent', actionArgs: { indentRight: false }, context: 'insert' },\n    // Text object motions\n    { keys: 'a<character>', type: 'motion', motion: 'textObjectManipulation' },\n    { keys: 'i<character>', type: 'motion', motion: 'textObjectManipulation', motionArgs: { textObjectInner: true }},\n    // Search\n    { keys: '/', type: 'search', searchArgs: { forward: true, querySrc: 'prompt', toJumplist: true }},\n    { keys: '?', type: 'search', searchArgs: { forward: false, querySrc: 'prompt', toJumplist: true }},\n    { keys: '*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }},\n    { keys: '#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', wholeWordOnly: true, toJumplist: true }},\n    { keys: 'g*', type: 'search', searchArgs: { forward: true, querySrc: 'wordUnderCursor', toJumplist: true }},\n    { keys: 'g#', type: 'search', searchArgs: { forward: false, querySrc: 'wordUnderCursor', toJumplist: true }},\n    // Ex command\n    { keys: ':', type: 'ex' }\n  ];\n\n  /**\n   * Ex commands\n   * Care must be taken when adding to the default Ex command map. For any\n   * pair of commands that have a shared prefix, at least one of their\n   * shortNames must not match the prefix of the other command.\n   */\n  var defaultExCommandMap = [\n    { name: 'colorscheme', shortName: 'colo' },\n    { name: 'map' },\n    { name: 'imap', shortName: 'im' },\n    { name: 'nmap', shortName: 'nm' },\n    { name: 'vmap', shortName: 'vm' },\n    { name: 'unmap' },\n    { name: 'write', shortName: 'w' },\n    { name: 'undo', shortName: 'u' },\n    { name: 'redo', shortName: 'red' },\n    { name: 'set', shortName: 'se' },\n    { name: 'set', shortName: 'se' },\n    { name: 'setlocal', shortName: 'setl' },\n    { name: 'setglobal', shortName: 'setg' },\n    { name: 'sort', shortName: 'sor' },\n    { name: 'substitute', shortName: 's', possiblyAsync: true },\n    { name: 'nohlsearch', shortName: 'noh' },\n    { name: 'yank', shortName: 'y' },\n    { name: 'delmarks', shortName: 'delm' },\n    { name: 'registers', shortName: 'reg', excludeFromCommandHistory: true },\n    { name: 'global', shortName: 'g' }\n  ];\n\n  var Pos = CodeMirror.Pos;\n\n  var Vim = function() {\n    function enterVimMode(cm) {\n      cm.setOption('disableInput', true);\n      cm.setOption('showCursorWhenSelecting', false);\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      cm.on('cursorActivity', onCursorActivity);\n      maybeInitVimState(cm);\n      CodeMirror.on(cm.getInputField(), 'paste', getOnPasteFn(cm));\n    }\n\n    function leaveVimMode(cm) {\n      cm.setOption('disableInput', false);\n      cm.off('cursorActivity', onCursorActivity);\n      CodeMirror.off(cm.getInputField(), 'paste', getOnPasteFn(cm));\n      cm.state.vim = null;\n    }\n\n    function detachVimMap(cm, next) {\n      if (this == CodeMirror.keyMap.vim)\n        CodeMirror.rmClass(cm.getWrapperElement(), \"cm-fat-cursor\");\n\n      if (!next || next.attach != attachVimMap)\n        leaveVimMode(cm, false);\n    }\n    function attachVimMap(cm, prev) {\n      if (this == CodeMirror.keyMap.vim)\n        CodeMirror.addClass(cm.getWrapperElement(), \"cm-fat-cursor\");\n\n      if (!prev || prev.attach != attachVimMap)\n        enterVimMode(cm);\n    }\n\n    // Deprecated, simply setting the keymap works again.\n    CodeMirror.defineOption('vimMode', false, function(cm, val, prev) {\n      if (val && cm.getOption(\"keyMap\") != \"vim\")\n        cm.setOption(\"keyMap\", \"vim\");\n      else if (!val && prev != CodeMirror.Init && /^vim/.test(cm.getOption(\"keyMap\")))\n        cm.setOption(\"keyMap\", \"default\");\n    });\n\n    function cmKey(key, cm) {\n      if (!cm) { return undefined; }\n      if (this[key]) { return this[key]; }\n      var vimKey = cmKeyToVimKey(key);\n      if (!vimKey) {\n        return false;\n      }\n      var cmd = CodeMirror.Vim.findKey(cm, vimKey);\n      if (typeof cmd == 'function') {\n        CodeMirror.signal(cm, 'vim-keypress', vimKey);\n      }\n      return cmd;\n    }\n\n    var modifiers = {'Shift': 'S', 'Ctrl': 'C', 'Alt': 'A', 'Cmd': 'D', 'Mod': 'A'};\n    var specialKeys = {Enter:'CR',Backspace:'BS',Delete:'Del',Insert:'Ins'};\n    function cmKeyToVimKey(key) {\n      if (key.charAt(0) == '\\'') {\n        // Keypress character binding of format \"'a'\"\n        return key.charAt(1);\n      }\n      var pieces = key.split(/-(?!$)/);\n      var lastPiece = pieces[pieces.length - 1];\n      if (pieces.length == 1 && pieces[0].length == 1) {\n        // No-modifier bindings use literal character bindings above. Skip.\n        return false;\n      } else if (pieces.length == 2 && pieces[0] == 'Shift' && lastPiece.length == 1) {\n        // Ignore Shift+char bindings as they should be handled by literal character.\n        return false;\n      }\n      var hasCharacter = false;\n      for (var i = 0; i < pieces.length; i++) {\n        var piece = pieces[i];\n        if (piece in modifiers) { pieces[i] = modifiers[piece]; }\n        else { hasCharacter = true; }\n        if (piece in specialKeys) { pieces[i] = specialKeys[piece]; }\n      }\n      if (!hasCharacter) {\n        // Vim does not support modifier only keys.\n        return false;\n      }\n      // TODO: Current bindings expect the character to be lower case, but\n      // it looks like vim key notation uses upper case.\n      if (isUpperCase(lastPiece)) {\n        pieces[pieces.length - 1] = lastPiece.toLowerCase();\n      }\n      return '<' + pieces.join('-') + '>';\n    }\n\n    function getOnPasteFn(cm) {\n      var vim = cm.state.vim;\n      if (!vim.onPasteFn) {\n        vim.onPasteFn = function() {\n          if (!vim.insertMode) {\n            cm.setCursor(offsetCursor(cm.getCursor(), 0, 1));\n            actions.enterInsertMode(cm, {}, vim);\n          }\n        };\n      }\n      return vim.onPasteFn;\n    }\n\n    var numberRegex = /[\\d]/;\n    var wordCharTest = [CodeMirror.isWordChar, function(ch) {\n      return ch && !CodeMirror.isWordChar(ch) && !/\\s/.test(ch);\n    }], bigWordCharTest = [function(ch) {\n      return /\\S/.test(ch);\n    }];\n    function makeKeyRange(start, size) {\n      var keys = [];\n      for (var i = start; i < start + size; i++) {\n        keys.push(String.fromCharCode(i));\n      }\n      return keys;\n    }\n    var upperCaseAlphabet = makeKeyRange(65, 26);\n    var lowerCaseAlphabet = makeKeyRange(97, 26);\n    var numbers = makeKeyRange(48, 10);\n    var validMarks = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['<', '>']);\n    var validRegisters = [].concat(upperCaseAlphabet, lowerCaseAlphabet, numbers, ['-', '\"', '.', ':', '/']);\n\n    function isLine(cm, line) {\n      return line >= cm.firstLine() && line <= cm.lastLine();\n    }\n    function isLowerCase(k) {\n      return (/^[a-z]$/).test(k);\n    }\n    function isMatchableSymbol(k) {\n      return '()[]{}'.indexOf(k) != -1;\n    }\n    function isNumber(k) {\n      return numberRegex.test(k);\n    }\n    function isUpperCase(k) {\n      return (/^[A-Z]$/).test(k);\n    }\n    function isWhiteSpaceString(k) {\n      return (/^\\s*$/).test(k);\n    }\n    function inArray(val, arr) {\n      for (var i = 0; i < arr.length; i++) {\n        if (arr[i] == val) {\n          return true;\n        }\n      }\n      return false;\n    }\n\n    var options = {};\n    function defineOption(name, defaultValue, type, aliases, callback) {\n      if (defaultValue === undefined && !callback) {\n        throw Error('defaultValue is required unless callback is provided');\n      }\n      if (!type) { type = 'string'; }\n      options[name] = {\n        type: type,\n        defaultValue: defaultValue,\n        callback: callback\n      };\n      if (aliases) {\n        for (var i = 0; i < aliases.length; i++) {\n          options[aliases[i]] = options[name];\n        }\n      }\n      if (defaultValue) {\n        setOption(name, defaultValue);\n      }\n    }\n\n    function setOption(name, value, cm, cfg) {\n      var option = options[name];\n      cfg = cfg || {};\n      var scope = cfg.scope;\n      if (!option) {\n        throw Error('Unknown option: ' + name);\n      }\n      if (option.type == 'boolean') {\n        if (value && value !== true) {\n          throw Error('Invalid argument: ' + name + '=' + value);\n        } else if (value !== false) {\n          // Boolean options are set to true if value is not defined.\n          value = true;\n        }\n      }\n      if (option.callback) {\n        if (scope !== 'local') {\n          option.callback(value, undefined);\n        }\n        if (scope !== 'global' && cm) {\n          option.callback(value, cm);\n        }\n      } else {\n        if (scope !== 'local') {\n          option.value = option.type == 'boolean' ? !!value : value;\n        }\n        if (scope !== 'global' && cm) {\n          cm.state.vim.options[name] = {value: value};\n        }\n      }\n    }\n\n    function getOption(name, cm, cfg) {\n      var option = options[name];\n      cfg = cfg || {};\n      var scope = cfg.scope;\n      if (!option) {\n        throw Error('Unknown option: ' + name);\n      }\n      if (option.callback) {\n        var local = cm && option.callback(undefined, cm);\n        if (scope !== 'global' && local !== undefined) {\n          return local;\n        }\n        if (scope !== 'local') {\n          return option.callback();\n        }\n        return;\n      } else {\n        var local = (scope !== 'global') && (cm && cm.state.vim.options[name]);\n        return (local || (scope !== 'local') && option || {}).value;\n      }\n    }\n\n    defineOption('filetype', undefined, 'string', ['ft'], function(name, cm) {\n      // Option is local. Do nothing for global.\n      if (cm === undefined) {\n        return;\n      }\n      // The 'filetype' option proxies to the CodeMirror 'mode' option.\n      if (name === undefined) {\n        var mode = cm.getOption('mode');\n        return mode == 'null' ? '' : mode;\n      } else {\n        var mode = name == '' ? 'null' : name;\n        cm.setOption('mode', mode);\n      }\n    });\n\n    var createCircularJumpList = function() {\n      var size = 100;\n      var pointer = -1;\n      var head = 0;\n      var tail = 0;\n      var buffer = new Array(size);\n      function add(cm, oldCur, newCur) {\n        var current = pointer % size;\n        var curMark = buffer[current];\n        function useNextSlot(cursor) {\n          var next = ++pointer % size;\n          var trashMark = buffer[next];\n          if (trashMark) {\n            trashMark.clear();\n          }\n          buffer[next] = cm.setBookmark(cursor);\n        }\n        if (curMark) {\n          var markPos = curMark.find();\n          // avoid recording redundant cursor position\n          if (markPos && !cursorEqual(markPos, oldCur)) {\n            useNextSlot(oldCur);\n          }\n        } else {\n          useNextSlot(oldCur);\n        }\n        useNextSlot(newCur);\n        head = pointer;\n        tail = pointer - size + 1;\n        if (tail < 0) {\n          tail = 0;\n        }\n      }\n      function move(cm, offset) {\n        pointer += offset;\n        if (pointer > head) {\n          pointer = head;\n        } else if (pointer < tail) {\n          pointer = tail;\n        }\n        var mark = buffer[(size + pointer) % size];\n        // skip marks that are temporarily removed from text buffer\n        if (mark && !mark.find()) {\n          var inc = offset > 0 ? 1 : -1;\n          var newCur;\n          var oldCur = cm.getCursor();\n          do {\n            pointer += inc;\n            mark = buffer[(size + pointer) % size];\n            // skip marks that are the same as current position\n            if (mark &&\n                (newCur = mark.find()) &&\n                !cursorEqual(oldCur, newCur)) {\n              break;\n            }\n          } while (pointer < head && pointer > tail);\n        }\n        return mark;\n      }\n      return {\n        cachedCursor: undefined, //used for # and * jumps\n        add: add,\n        move: move\n      };\n    };\n\n    // Returns an object to track the changes associated insert mode.  It\n    // clones the object that is passed in, or creates an empty object one if\n    // none is provided.\n    var createInsertModeChanges = function(c) {\n      if (c) {\n        // Copy construction\n        return {\n          changes: c.changes,\n          expectCursorActivityForChange: c.expectCursorActivityForChange\n        };\n      }\n      return {\n        // Change list\n        changes: [],\n        // Set to true on change, false on cursorActivity.\n        expectCursorActivityForChange: false\n      };\n    };\n\n    function MacroModeState() {\n      this.latestRegister = undefined;\n      this.isPlaying = false;\n      this.isRecording = false;\n      this.replaySearchQueries = [];\n      this.onRecordingDone = undefined;\n      this.lastInsertModeChanges = createInsertModeChanges();\n    }\n    MacroModeState.prototype = {\n      exitMacroRecordMode: function() {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.onRecordingDone) {\n          macroModeState.onRecordingDone(); // close dialog\n        }\n        macroModeState.onRecordingDone = undefined;\n        macroModeState.isRecording = false;\n      },\n      enterMacroRecordMode: function(cm, registerName) {\n        var register =\n            vimGlobalState.registerController.getRegister(registerName);\n        if (register) {\n          register.clear();\n          this.latestRegister = registerName;\n          if (cm.openDialog) {\n            this.onRecordingDone = cm.openDialog(\n                '(recording)['+registerName+']', null, {bottom:true});\n          }\n          this.isRecording = true;\n        }\n      }\n    };\n\n    function maybeInitVimState(cm) {\n      if (!cm.state.vim) {\n        // Store instance state in the CodeMirror object.\n        cm.state.vim = {\n          inputState: new InputState(),\n          // Vim's input state that triggered the last edit, used to repeat\n          // motions and operators with '.'.\n          lastEditInputState: undefined,\n          // Vim's action command before the last edit, used to repeat actions\n          // with '.' and insert mode repeat.\n          lastEditActionCommand: undefined,\n          // When using jk for navigation, if you move from a longer line to a\n          // shorter line, the cursor may clip to the end of the shorter line.\n          // If j is pressed again and cursor goes to the next line, the\n          // cursor should go back to its horizontal position on the longer\n          // line if it can. This is to keep track of the horizontal position.\n          lastHPos: -1,\n          // Doing the same with screen-position for gj/gk\n          lastHSPos: -1,\n          // The last motion command run. Cleared if a non-motion command gets\n          // executed in between.\n          lastMotion: null,\n          marks: {},\n          // Mark for rendering fake cursor for visual mode.\n          fakeCursor: null,\n          insertMode: false,\n          // Repeat count for changes made in insert mode, triggered by key\n          // sequences like 3,i. Only exists when insertMode is true.\n          insertModeRepeat: undefined,\n          visualMode: false,\n          // If we are in visual line mode. No effect if visualMode is false.\n          visualLine: false,\n          visualBlock: false,\n          lastSelection: null,\n          lastPastedText: null,\n          sel: {},\n          // Buffer-local/window-local values of vim options.\n          options: {}\n        };\n      }\n      return cm.state.vim;\n    }\n    var vimGlobalState;\n    function resetVimGlobalState() {\n      vimGlobalState = {\n        // The current search query.\n        searchQuery: null,\n        // Whether we are searching backwards.\n        searchIsReversed: false,\n        // Replace part of the last substituted pattern\n        lastSubstituteReplacePart: undefined,\n        jumpList: createCircularJumpList(),\n        macroModeState: new MacroModeState,\n        // Recording latest f, t, F or T motion command.\n        lastCharacterSearch: {increment:0, forward:true, selectedCharacter:''},\n        registerController: new RegisterController({}),\n        // search history buffer\n        searchHistoryController: new HistoryController({}),\n        // ex Command history buffer\n        exCommandHistoryController : new HistoryController({})\n      };\n      for (var optionName in options) {\n        var option = options[optionName];\n        option.value = option.defaultValue;\n      }\n    }\n\n    var lastInsertModeKeyTimer;\n    var vimApi= {\n      buildKeyMap: function() {\n        // TODO: Convert keymap into dictionary format for fast lookup.\n      },\n      // Testing hook, though it might be useful to expose the register\n      // controller anyways.\n      getRegisterController: function() {\n        return vimGlobalState.registerController;\n      },\n      // Testing hook.\n      resetVimGlobalState_: resetVimGlobalState,\n\n      // Testing hook.\n      getVimGlobalState_: function() {\n        return vimGlobalState;\n      },\n\n      // Testing hook.\n      maybeInitVimState_: maybeInitVimState,\n\n      suppressErrorLogging: false,\n\n      InsertModeKey: InsertModeKey,\n      map: function(lhs, rhs, ctx) {\n        // Add user defined key bindings.\n        exCommandDispatcher.map(lhs, rhs, ctx);\n      },\n      unmap: function(lhs, ctx) {\n        exCommandDispatcher.unmap(lhs, ctx);\n      },\n      // TODO: Expose setOption and getOption as instance methods. Need to decide how to namespace\n      // them, or somehow make them work with the existing CodeMirror setOption/getOption API.\n      setOption: setOption,\n      getOption: getOption,\n      defineOption: defineOption,\n      defineEx: function(name, prefix, func){\n        if (!prefix) {\n          prefix = name;\n        } else if (name.indexOf(prefix) !== 0) {\n          throw new Error('(Vim.defineEx) \"'+prefix+'\" is not a prefix of \"'+name+'\", command not registered');\n        }\n        exCommands[name]=func;\n        exCommandDispatcher.commandMap_[prefix]={name:name, shortName:prefix, type:'api'};\n      },\n      handleKey: function (cm, key, origin) {\n        var command = this.findKey(cm, key, origin);\n        if (typeof command === 'function') {\n          return command();\n        }\n      },\n      /**\n       * This is the outermost function called by CodeMirror, after keys have\n       * been mapped to their Vim equivalents.\n       *\n       * Finds a command based on the key (and cached keys if there is a\n       * multi-key sequence). Returns `undefined` if no key is matched, a noop\n       * function if a partial match is found (multi-key), and a function to\n       * execute the bound command if a a key is matched. The function always\n       * returns true.\n       */\n      findKey: function(cm, key, origin) {\n        var vim = maybeInitVimState(cm);\n        function handleMacroRecording() {\n          var macroModeState = vimGlobalState.macroModeState;\n          if (macroModeState.isRecording) {\n            if (key == 'q') {\n              macroModeState.exitMacroRecordMode();\n              clearInputState(cm);\n              return true;\n            }\n            if (origin != 'mapping') {\n              logKey(macroModeState, key);\n            }\n          }\n        }\n        function handleEsc() {\n          if (key == '<Esc>') {\n            // Clear input state and get back to normal mode.\n            clearInputState(cm);\n            if (vim.visualMode) {\n              exitVisualMode(cm);\n            } else if (vim.insertMode) {\n              exitInsertMode(cm);\n            }\n            return true;\n          }\n        }\n        function doKeyToKey(keys) {\n          // TODO: prevent infinite recursion.\n          var match;\n          while (keys) {\n            // Pull off one command key, which is either a single character\n            // or a special sequence wrapped in '<' and '>', e.g. '<Space>'.\n            match = (/<\\w+-.+?>|<\\w+>|./).exec(keys);\n            key = match[0];\n            keys = keys.substring(match.index + key.length);\n            CodeMirror.Vim.handleKey(cm, key, 'mapping');\n          }\n        }\n\n        function handleKeyInsertMode() {\n          if (handleEsc()) { return true; }\n          var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key;\n          var keysAreChars = key.length == 1;\n          var match = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');\n          // Need to check all key substrings in insert mode.\n          while (keys.length > 1 && match.type != 'full') {\n            var keys = vim.inputState.keyBuffer = keys.slice(1);\n            var thisMatch = commandDispatcher.matchCommand(keys, defaultKeymap, vim.inputState, 'insert');\n            if (thisMatch.type != 'none') { match = thisMatch; }\n          }\n          if (match.type == 'none') { clearInputState(cm); return false; }\n          else if (match.type == 'partial') {\n            if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); }\n            lastInsertModeKeyTimer = window.setTimeout(\n              function() { if (vim.insertMode && vim.inputState.keyBuffer) { clearInputState(cm); } },\n              getOption('insertModeEscKeysTimeout'));\n            return !keysAreChars;\n          }\n\n          if (lastInsertModeKeyTimer) { window.clearTimeout(lastInsertModeKeyTimer); }\n          if (keysAreChars) {\n            var selections = cm.listSelections();\n            for (var i = 0; i < selections.length; i++) {\n              var here = selections[i].head;\n              cm.replaceRange('', offsetCursor(here, 0, -(keys.length - 1)), here, '+input');\n            }\n            vimGlobalState.macroModeState.lastInsertModeChanges.changes.pop();\n          }\n          clearInputState(cm);\n          return match.command;\n        }\n\n        function handleKeyNonInsertMode() {\n          if (handleMacroRecording() || handleEsc()) { return true; };\n\n          var keys = vim.inputState.keyBuffer = vim.inputState.keyBuffer + key;\n          if (/^[1-9]\\d*$/.test(keys)) { return true; }\n\n          var keysMatcher = /^(\\d*)(.*)$/.exec(keys);\n          if (!keysMatcher) { clearInputState(cm); return false; }\n          var context = vim.visualMode ? 'visual' :\n                                         'normal';\n          var match = commandDispatcher.matchCommand(keysMatcher[2] || keysMatcher[1], defaultKeymap, vim.inputState, context);\n          if (match.type == 'none') { clearInputState(cm); return false; }\n          else if (match.type == 'partial') { return true; }\n\n          vim.inputState.keyBuffer = '';\n          var keysMatcher = /^(\\d*)(.*)$/.exec(keys);\n          if (keysMatcher[1] && keysMatcher[1] != '0') {\n            vim.inputState.pushRepeatDigit(keysMatcher[1]);\n          }\n          return match.command;\n        }\n\n        var command;\n        if (vim.insertMode) { command = handleKeyInsertMode(); }\n        else { command = handleKeyNonInsertMode(); }\n        if (command === false) {\n          return undefined;\n        } else if (command === true) {\n          // TODO: Look into using CodeMirror's multi-key handling.\n          // Return no-op since we are caching the key. Counts as handled, but\n          // don't want act on it just yet.\n          return function() { return true; };\n        } else {\n          return function() {\n            return cm.operation(function() {\n              cm.curOp.isVimOp = true;\n              try {\n                if (command.type == 'keyToKey') {\n                  doKeyToKey(command.toKeys);\n                } else {\n                  commandDispatcher.processCommand(cm, vim, command);\n                }\n              } catch (e) {\n                // clear VIM state in case it's in a bad state.\n                cm.state.vim = undefined;\n                maybeInitVimState(cm);\n                if (!CodeMirror.Vim.suppressErrorLogging) {\n                  console['log'](e);\n                }\n                throw e;\n              }\n              return true;\n            });\n          };\n        }\n      },\n      handleEx: function(cm, input) {\n        exCommandDispatcher.processCommand(cm, input);\n      },\n\n      defineMotion: defineMotion,\n      defineAction: defineAction,\n      defineOperator: defineOperator,\n      mapCommand: mapCommand,\n      _mapCommand: _mapCommand,\n\n      defineRegister: defineRegister,\n\n      exitVisualMode: exitVisualMode,\n      exitInsertMode: exitInsertMode\n    };\n\n    // Represents the current input state.\n    function InputState() {\n      this.prefixRepeat = [];\n      this.motionRepeat = [];\n\n      this.operator = null;\n      this.operatorArgs = null;\n      this.motion = null;\n      this.motionArgs = null;\n      this.keyBuffer = []; // For matching multi-key commands.\n      this.registerName = null; // Defaults to the unnamed register.\n    }\n    InputState.prototype.pushRepeatDigit = function(n) {\n      if (!this.operator) {\n        this.prefixRepeat = this.prefixRepeat.concat(n);\n      } else {\n        this.motionRepeat = this.motionRepeat.concat(n);\n      }\n    };\n    InputState.prototype.getRepeat = function() {\n      var repeat = 0;\n      if (this.prefixRepeat.length > 0 || this.motionRepeat.length > 0) {\n        repeat = 1;\n        if (this.prefixRepeat.length > 0) {\n          repeat *= parseInt(this.prefixRepeat.join(''), 10);\n        }\n        if (this.motionRepeat.length > 0) {\n          repeat *= parseInt(this.motionRepeat.join(''), 10);\n        }\n      }\n      return repeat;\n    };\n\n    function clearInputState(cm, reason) {\n      cm.state.vim.inputState = new InputState();\n      CodeMirror.signal(cm, 'vim-command-done', reason);\n    }\n\n    /*\n     * Register stores information about copy and paste registers.  Besides\n     * text, a register must store whether it is linewise (i.e., when it is\n     * pasted, should it insert itself into a new line, or should the text be\n     * inserted at the cursor position.)\n     */\n    function Register(text, linewise, blockwise) {\n      this.clear();\n      this.keyBuffer = [text || ''];\n      this.insertModeChanges = [];\n      this.searchQueries = [];\n      this.linewise = !!linewise;\n      this.blockwise = !!blockwise;\n    }\n    Register.prototype = {\n      setText: function(text, linewise, blockwise) {\n        this.keyBuffer = [text || ''];\n        this.linewise = !!linewise;\n        this.blockwise = !!blockwise;\n      },\n      pushText: function(text, linewise) {\n        // if this register has ever been set to linewise, use linewise.\n        if (linewise) {\n          if (!this.linewise) {\n            this.keyBuffer.push('\\n');\n          }\n          this.linewise = true;\n        }\n        this.keyBuffer.push(text);\n      },\n      pushInsertModeChanges: function(changes) {\n        this.insertModeChanges.push(createInsertModeChanges(changes));\n      },\n      pushSearchQuery: function(query) {\n        this.searchQueries.push(query);\n      },\n      clear: function() {\n        this.keyBuffer = [];\n        this.insertModeChanges = [];\n        this.searchQueries = [];\n        this.linewise = false;\n      },\n      toString: function() {\n        return this.keyBuffer.join('');\n      }\n    };\n\n    /**\n     * Defines an external register.\n     *\n     * The name should be a single character that will be used to reference the register.\n     * The register should support setText, pushText, clear, and toString(). See Register\n     * for a reference implementation.\n     */\n    function defineRegister(name, register) {\n      var registers = vimGlobalState.registerController.registers[name];\n      if (!name || name.length != 1) {\n        throw Error('Register name must be 1 character');\n      }\n      if (registers[name]) {\n        throw Error('Register already defined ' + name);\n      }\n      registers[name] = register;\n      validRegisters.push(name);\n    }\n\n    /*\n     * vim registers allow you to keep many independent copy and paste buffers.\n     * See http://usevim.com/2012/04/13/registers/ for an introduction.\n     *\n     * RegisterController keeps the state of all the registers.  An initial\n     * state may be passed in.  The unnamed register '\"' will always be\n     * overridden.\n     */\n    function RegisterController(registers) {\n      this.registers = registers;\n      this.unnamedRegister = registers['\"'] = new Register();\n      registers['.'] = new Register();\n      registers[':'] = new Register();\n      registers['/'] = new Register();\n    }\n    RegisterController.prototype = {\n      pushText: function(registerName, operator, text, linewise, blockwise) {\n        if (linewise && text.charAt(0) == '\\n') {\n          text = text.slice(1) + '\\n';\n        }\n        if (linewise && text.charAt(text.length - 1) !== '\\n'){\n          text += '\\n';\n        }\n        // Lowercase and uppercase registers refer to the same register.\n        // Uppercase just means append.\n        var register = this.isValidRegister(registerName) ?\n            this.getRegister(registerName) : null;\n        // if no register/an invalid register was specified, things go to the\n        // default registers\n        if (!register) {\n          switch (operator) {\n            case 'yank':\n              // The 0 register contains the text from the most recent yank.\n              this.registers['0'] = new Register(text, linewise, blockwise);\n              break;\n            case 'delete':\n            case 'change':\n              if (text.indexOf('\\n') == -1) {\n                // Delete less than 1 line. Update the small delete register.\n                this.registers['-'] = new Register(text, linewise);\n              } else {\n                // Shift down the contents of the numbered registers and put the\n                // deleted text into register 1.\n                this.shiftNumericRegisters_();\n                this.registers['1'] = new Register(text, linewise);\n              }\n              break;\n          }\n          // Make sure the unnamed register is set to what just happened\n          this.unnamedRegister.setText(text, linewise, blockwise);\n          return;\n        }\n\n        // If we've gotten to this point, we've actually specified a register\n        var append = isUpperCase(registerName);\n        if (append) {\n          register.pushText(text, linewise);\n        } else {\n          register.setText(text, linewise, blockwise);\n        }\n        // The unnamed register always has the same value as the last used\n        // register.\n        this.unnamedRegister.setText(register.toString(), linewise);\n      },\n      // Gets the register named @name.  If one of @name doesn't already exist,\n      // create it.  If @name is invalid, return the unnamedRegister.\n      getRegister: function(name) {\n        if (!this.isValidRegister(name)) {\n          return this.unnamedRegister;\n        }\n        name = name.toLowerCase();\n        if (!this.registers[name]) {\n          this.registers[name] = new Register();\n        }\n        return this.registers[name];\n      },\n      isValidRegister: function(name) {\n        return name && inArray(name, validRegisters);\n      },\n      shiftNumericRegisters_: function() {\n        for (var i = 9; i >= 2; i--) {\n          this.registers[i] = this.getRegister('' + (i - 1));\n        }\n      }\n    };\n    function HistoryController() {\n        this.historyBuffer = [];\n        this.iterator = 0;\n        this.initialPrefix = null;\n    }\n    HistoryController.prototype = {\n      // the input argument here acts a user entered prefix for a small time\n      // until we start autocompletion in which case it is the autocompleted.\n      nextMatch: function (input, up) {\n        var historyBuffer = this.historyBuffer;\n        var dir = up ? -1 : 1;\n        if (this.initialPrefix === null) this.initialPrefix = input;\n        for (var i = this.iterator + dir; up ? i >= 0 : i < historyBuffer.length; i+= dir) {\n          var element = historyBuffer[i];\n          for (var j = 0; j <= element.length; j++) {\n            if (this.initialPrefix == element.substring(0, j)) {\n              this.iterator = i;\n              return element;\n            }\n          }\n        }\n        // should return the user input in case we reach the end of buffer.\n        if (i >= historyBuffer.length) {\n          this.iterator = historyBuffer.length;\n          return this.initialPrefix;\n        }\n        // return the last autocompleted query or exCommand as it is.\n        if (i < 0 ) return input;\n      },\n      pushInput: function(input) {\n        var index = this.historyBuffer.indexOf(input);\n        if (index > -1) this.historyBuffer.splice(index, 1);\n        if (input.length) this.historyBuffer.push(input);\n      },\n      reset: function() {\n        this.initialPrefix = null;\n        this.iterator = this.historyBuffer.length;\n      }\n    };\n    var commandDispatcher = {\n      matchCommand: function(keys, keyMap, inputState, context) {\n        var matches = commandMatches(keys, keyMap, context, inputState);\n        if (!matches.full && !matches.partial) {\n          return {type: 'none'};\n        } else if (!matches.full && matches.partial) {\n          return {type: 'partial'};\n        }\n\n        var bestMatch;\n        for (var i = 0; i < matches.full.length; i++) {\n          var match = matches.full[i];\n          if (!bestMatch) {\n            bestMatch = match;\n          }\n        }\n        if (bestMatch.keys.slice(-11) == '<character>') {\n          inputState.selectedCharacter = lastChar(keys);\n        }\n        return {type: 'full', command: bestMatch};\n      },\n      processCommand: function(cm, vim, command) {\n        vim.inputState.repeatOverride = command.repeatOverride;\n        switch (command.type) {\n          case 'motion':\n            this.processMotion(cm, vim, command);\n            break;\n          case 'operator':\n            this.processOperator(cm, vim, command);\n            break;\n          case 'operatorMotion':\n            this.processOperatorMotion(cm, vim, command);\n            break;\n          case 'action':\n            this.processAction(cm, vim, command);\n            break;\n          case 'search':\n            this.processSearch(cm, vim, command);\n            break;\n          case 'ex':\n          case 'keyToEx':\n            this.processEx(cm, vim, command);\n            break;\n          default:\n            break;\n        }\n      },\n      processMotion: function(cm, vim, command) {\n        vim.inputState.motion = command.motion;\n        vim.inputState.motionArgs = copyArgs(command.motionArgs);\n        this.evalInput(cm, vim);\n      },\n      processOperator: function(cm, vim, command) {\n        var inputState = vim.inputState;\n        if (inputState.operator) {\n          if (inputState.operator == command.operator) {\n            // Typing an operator twice like 'dd' makes the operator operate\n            // linewise\n            inputState.motion = 'expandToLine';\n            inputState.motionArgs = { linewise: true };\n            this.evalInput(cm, vim);\n            return;\n          } else {\n            // 2 different operators in a row doesn't make sense.\n            clearInputState(cm);\n          }\n        }\n        inputState.operator = command.operator;\n        inputState.operatorArgs = copyArgs(command.operatorArgs);\n        if (vim.visualMode) {\n          // Operating on a selection in visual mode. We don't need a motion.\n          this.evalInput(cm, vim);\n        }\n      },\n      processOperatorMotion: function(cm, vim, command) {\n        var visualMode = vim.visualMode;\n        var operatorMotionArgs = copyArgs(command.operatorMotionArgs);\n        if (operatorMotionArgs) {\n          // Operator motions may have special behavior in visual mode.\n          if (visualMode && operatorMotionArgs.visualLine) {\n            vim.visualLine = true;\n          }\n        }\n        this.processOperator(cm, vim, command);\n        if (!visualMode) {\n          this.processMotion(cm, vim, command);\n        }\n      },\n      processAction: function(cm, vim, command) {\n        var inputState = vim.inputState;\n        var repeat = inputState.getRepeat();\n        var repeatIsExplicit = !!repeat;\n        var actionArgs = copyArgs(command.actionArgs) || {};\n        if (inputState.selectedCharacter) {\n          actionArgs.selectedCharacter = inputState.selectedCharacter;\n        }\n        // Actions may or may not have motions and operators. Do these first.\n        if (command.operator) {\n          this.processOperator(cm, vim, command);\n        }\n        if (command.motion) {\n          this.processMotion(cm, vim, command);\n        }\n        if (command.motion || command.operator) {\n          this.evalInput(cm, vim);\n        }\n        actionArgs.repeat = repeat || 1;\n        actionArgs.repeatIsExplicit = repeatIsExplicit;\n        actionArgs.registerName = inputState.registerName;\n        clearInputState(cm);\n        vim.lastMotion = null;\n        if (command.isEdit) {\n          this.recordLastEdit(vim, inputState, command);\n        }\n        actions[command.action](cm, actionArgs, vim);\n      },\n      processSearch: function(cm, vim, command) {\n        if (!cm.getSearchCursor) {\n          // Search depends on SearchCursor.\n          return;\n        }\n        var forward = command.searchArgs.forward;\n        var wholeWordOnly = command.searchArgs.wholeWordOnly;\n        getSearchState(cm).setReversed(!forward);\n        var promptPrefix = (forward) ? '/' : '?';\n        var originalQuery = getSearchState(cm).getQuery();\n        var originalScrollPos = cm.getScrollInfo();\n        function handleQuery(query, ignoreCase, smartCase) {\n          vimGlobalState.searchHistoryController.pushInput(query);\n          vimGlobalState.searchHistoryController.reset();\n          try {\n            updateSearchQuery(cm, query, ignoreCase, smartCase);\n          } catch (e) {\n            showConfirm(cm, 'Invalid regex: ' + query);\n            clearInputState(cm);\n            return;\n          }\n          commandDispatcher.processMotion(cm, vim, {\n            type: 'motion',\n            motion: 'findNext',\n            motionArgs: { forward: true, toJumplist: command.searchArgs.toJumplist }\n          });\n        }\n        function onPromptClose(query) {\n          cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n          handleQuery(query, true /** ignoreCase */, true /** smartCase */);\n          var macroModeState = vimGlobalState.macroModeState;\n          if (macroModeState.isRecording) {\n            logSearchQuery(macroModeState, query);\n          }\n        }\n        function onPromptKeyUp(e, query, close) {\n          var keyName = CodeMirror.keyName(e), up, offset;\n          if (keyName == 'Up' || keyName == 'Down') {\n            up = keyName == 'Up' ? true : false;\n            offset = e.target ? e.target.selectionEnd : 0;\n            query = vimGlobalState.searchHistoryController.nextMatch(query, up) || '';\n            close(query);\n            if (offset && e.target) e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length);\n          } else {\n            if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')\n              vimGlobalState.searchHistoryController.reset();\n          }\n          var parsedQuery;\n          try {\n            parsedQuery = updateSearchQuery(cm, query,\n                true /** ignoreCase */, true /** smartCase */);\n          } catch (e) {\n            // Swallow bad regexes for incremental search.\n          }\n          if (parsedQuery) {\n            cm.scrollIntoView(findNext(cm, !forward, parsedQuery), 30);\n          } else {\n            clearSearchHighlight(cm);\n            cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n          }\n        }\n        function onPromptKeyDown(e, query, close) {\n          var keyName = CodeMirror.keyName(e);\n          if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||\n              (keyName == 'Backspace' && query == '')) {\n            vimGlobalState.searchHistoryController.pushInput(query);\n            vimGlobalState.searchHistoryController.reset();\n            updateSearchQuery(cm, originalQuery);\n            clearSearchHighlight(cm);\n            cm.scrollTo(originalScrollPos.left, originalScrollPos.top);\n            CodeMirror.e_stop(e);\n            clearInputState(cm);\n            close();\n            cm.focus();\n          } else if (keyName == 'Up' || keyName == 'Down') {\n            CodeMirror.e_stop(e);\n          } else if (keyName == 'Ctrl-U') {\n            // Ctrl-U clears input.\n            CodeMirror.e_stop(e);\n            close('');\n          }\n        }\n        switch (command.searchArgs.querySrc) {\n          case 'prompt':\n            var macroModeState = vimGlobalState.macroModeState;\n            if (macroModeState.isPlaying) {\n              var query = macroModeState.replaySearchQueries.shift();\n              handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n            } else {\n              showPrompt(cm, {\n                  onClose: onPromptClose,\n                  prefix: promptPrefix,\n                  desc: searchPromptDesc,\n                  onKeyUp: onPromptKeyUp,\n                  onKeyDown: onPromptKeyDown\n              });\n            }\n            break;\n          case 'wordUnderCursor':\n            var word = expandWordUnderCursor(cm, false /** inclusive */,\n                true /** forward */, false /** bigWord */,\n                true /** noSymbol */);\n            var isKeyword = true;\n            if (!word) {\n              word = expandWordUnderCursor(cm, false /** inclusive */,\n                  true /** forward */, false /** bigWord */,\n                  false /** noSymbol */);\n              isKeyword = false;\n            }\n            if (!word) {\n              return;\n            }\n            var query = cm.getLine(word.start.line).substring(word.start.ch,\n                word.end.ch);\n            if (isKeyword && wholeWordOnly) {\n                query = '\\\\b' + query + '\\\\b';\n            } else {\n              query = escapeRegex(query);\n            }\n\n            // cachedCursor is used to save the old position of the cursor\n            // when * or # causes vim to seek for the nearest word and shift\n            // the cursor before entering the motion.\n            vimGlobalState.jumpList.cachedCursor = cm.getCursor();\n            cm.setCursor(word.start);\n\n            handleQuery(query, true /** ignoreCase */, false /** smartCase */);\n            break;\n        }\n      },\n      processEx: function(cm, vim, command) {\n        function onPromptClose(input) {\n          // Give the prompt some time to close so that if processCommand shows\n          // an error, the elements don't overlap.\n          vimGlobalState.exCommandHistoryController.pushInput(input);\n          vimGlobalState.exCommandHistoryController.reset();\n          exCommandDispatcher.processCommand(cm, input);\n        }\n        function onPromptKeyDown(e, input, close) {\n          var keyName = CodeMirror.keyName(e), up, offset;\n          if (keyName == 'Esc' || keyName == 'Ctrl-C' || keyName == 'Ctrl-[' ||\n              (keyName == 'Backspace' && input == '')) {\n            vimGlobalState.exCommandHistoryController.pushInput(input);\n            vimGlobalState.exCommandHistoryController.reset();\n            CodeMirror.e_stop(e);\n            clearInputState(cm);\n            close();\n            cm.focus();\n          }\n          if (keyName == 'Up' || keyName == 'Down') {\n            CodeMirror.e_stop(e);\n            up = keyName == 'Up' ? true : false;\n            offset = e.target ? e.target.selectionEnd : 0;\n            input = vimGlobalState.exCommandHistoryController.nextMatch(input, up) || '';\n            close(input);\n            if (offset && e.target) e.target.selectionEnd = e.target.selectionStart = Math.min(offset, e.target.value.length);\n          } else if (keyName == 'Ctrl-U') {\n            // Ctrl-U clears input.\n            CodeMirror.e_stop(e);\n            close('');\n          } else {\n            if ( keyName != 'Left' && keyName != 'Right' && keyName != 'Ctrl' && keyName != 'Alt' && keyName != 'Shift')\n              vimGlobalState.exCommandHistoryController.reset();\n          }\n        }\n        if (command.type == 'keyToEx') {\n          // Handle user defined Ex to Ex mappings\n          exCommandDispatcher.processCommand(cm, command.exArgs.input);\n        } else {\n          if (vim.visualMode) {\n            showPrompt(cm, { onClose: onPromptClose, prefix: ':', value: '\\'<,\\'>',\n                onKeyDown: onPromptKeyDown});\n          } else {\n            showPrompt(cm, { onClose: onPromptClose, prefix: ':',\n                onKeyDown: onPromptKeyDown});\n          }\n        }\n      },\n      evalInput: function(cm, vim) {\n        // If the motion command is set, execute both the operator and motion.\n        // Otherwise return.\n        var inputState = vim.inputState;\n        var motion = inputState.motion;\n        var motionArgs = inputState.motionArgs || {};\n        var operator = inputState.operator;\n        var operatorArgs = inputState.operatorArgs || {};\n        var registerName = inputState.registerName;\n        var sel = vim.sel;\n        // TODO: Make sure cm and vim selections are identical outside visual mode.\n        var origHead = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.head): cm.getCursor('head'));\n        var origAnchor = copyCursor(vim.visualMode ? clipCursorToContent(cm, sel.anchor) : cm.getCursor('anchor'));\n        var oldHead = copyCursor(origHead);\n        var oldAnchor = copyCursor(origAnchor);\n        var newHead, newAnchor;\n        var repeat;\n        if (operator) {\n          this.recordLastEdit(vim, inputState);\n        }\n        if (inputState.repeatOverride !== undefined) {\n          // If repeatOverride is specified, that takes precedence over the\n          // input state's repeat. Used by Ex mode and can be user defined.\n          repeat = inputState.repeatOverride;\n        } else {\n          repeat = inputState.getRepeat();\n        }\n        if (repeat > 0 && motionArgs.explicitRepeat) {\n          motionArgs.repeatIsExplicit = true;\n        } else if (motionArgs.noRepeat ||\n            (!motionArgs.explicitRepeat && repeat === 0)) {\n          repeat = 1;\n          motionArgs.repeatIsExplicit = false;\n        }\n        if (inputState.selectedCharacter) {\n          // If there is a character input, stick it in all of the arg arrays.\n          motionArgs.selectedCharacter = operatorArgs.selectedCharacter =\n              inputState.selectedCharacter;\n        }\n        motionArgs.repeat = repeat;\n        clearInputState(cm);\n        if (motion) {\n          var motionResult = motions[motion](cm, origHead, motionArgs, vim);\n          vim.lastMotion = motions[motion];\n          if (!motionResult) {\n            return;\n          }\n          if (motionArgs.toJumplist) {\n            var jumpList = vimGlobalState.jumpList;\n            // if the current motion is # or *, use cachedCursor\n            var cachedCursor = jumpList.cachedCursor;\n            if (cachedCursor) {\n              recordJumpPosition(cm, cachedCursor, motionResult);\n              delete jumpList.cachedCursor;\n            } else {\n              recordJumpPosition(cm, origHead, motionResult);\n            }\n          }\n          if (motionResult instanceof Array) {\n            newAnchor = motionResult[0];\n            newHead = motionResult[1];\n          } else {\n            newHead = motionResult;\n          }\n          // TODO: Handle null returns from motion commands better.\n          if (!newHead) {\n            newHead = copyCursor(origHead);\n          }\n          if (vim.visualMode) {\n            if (!(vim.visualBlock && newHead.ch === Infinity)) {\n              newHead = clipCursorToContent(cm, newHead, vim.visualBlock);\n            }\n            if (newAnchor) {\n              newAnchor = clipCursorToContent(cm, newAnchor, true);\n            }\n            newAnchor = newAnchor || oldAnchor;\n            sel.anchor = newAnchor;\n            sel.head = newHead;\n            updateCmSelection(cm);\n            updateMark(cm, vim, '<',\n                cursorIsBefore(newAnchor, newHead) ? newAnchor\n                    : newHead);\n            updateMark(cm, vim, '>',\n                cursorIsBefore(newAnchor, newHead) ? newHead\n                    : newAnchor);\n          } else if (!operator) {\n            newHead = clipCursorToContent(cm, newHead);\n            cm.setCursor(newHead.line, newHead.ch);\n          }\n        }\n        if (operator) {\n          if (operatorArgs.lastSel) {\n            // Replaying a visual mode operation\n            newAnchor = oldAnchor;\n            var lastSel = operatorArgs.lastSel;\n            var lineOffset = Math.abs(lastSel.head.line - lastSel.anchor.line);\n            var chOffset = Math.abs(lastSel.head.ch - lastSel.anchor.ch);\n            if (lastSel.visualLine) {\n              // Linewise Visual mode: The same number of lines.\n              newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch);\n            } else if (lastSel.visualBlock) {\n              // Blockwise Visual mode: The same number of lines and columns.\n              newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch + chOffset);\n            } else if (lastSel.head.line == lastSel.anchor.line) {\n              // Normal Visual mode within one line: The same number of characters.\n              newHead = Pos(oldAnchor.line, oldAnchor.ch + chOffset);\n            } else {\n              // Normal Visual mode with several lines: The same number of lines, in the\n              // last line the same number of characters as in the last line the last time.\n              newHead = Pos(oldAnchor.line + lineOffset, oldAnchor.ch);\n            }\n            vim.visualMode = true;\n            vim.visualLine = lastSel.visualLine;\n            vim.visualBlock = lastSel.visualBlock;\n            sel = vim.sel = {\n              anchor: newAnchor,\n              head: newHead\n            };\n            updateCmSelection(cm);\n          } else if (vim.visualMode) {\n            operatorArgs.lastSel = {\n              anchor: copyCursor(sel.anchor),\n              head: copyCursor(sel.head),\n              visualBlock: vim.visualBlock,\n              visualLine: vim.visualLine\n            };\n          }\n          var curStart, curEnd, linewise, mode;\n          var cmSel;\n          if (vim.visualMode) {\n            // Init visual op\n            curStart = cursorMin(sel.head, sel.anchor);\n            curEnd = cursorMax(sel.head, sel.anchor);\n            linewise = vim.visualLine || operatorArgs.linewise;\n            mode = vim.visualBlock ? 'block' :\n                   linewise ? 'line' :\n                   'char';\n            cmSel = makeCmSelection(cm, {\n              anchor: curStart,\n              head: curEnd\n            }, mode);\n            if (linewise) {\n              var ranges = cmSel.ranges;\n              if (mode == 'block') {\n                // Linewise operators in visual block mode extend to end of line\n                for (var i = 0; i < ranges.length; i++) {\n                  ranges[i].head.ch = lineLength(cm, ranges[i].head.line);\n                }\n              } else if (mode == 'line') {\n                ranges[0].head = Pos(ranges[0].head.line + 1, 0);\n              }\n            }\n          } else {\n            // Init motion op\n            curStart = copyCursor(newAnchor || oldAnchor);\n            curEnd = copyCursor(newHead || oldHead);\n            if (cursorIsBefore(curEnd, curStart)) {\n              var tmp = curStart;\n              curStart = curEnd;\n              curEnd = tmp;\n            }\n            linewise = motionArgs.linewise || operatorArgs.linewise;\n            if (linewise) {\n              // Expand selection to entire line.\n              expandSelectionToLine(cm, curStart, curEnd);\n            } else if (motionArgs.forward) {\n              // Clip to trailing newlines only if the motion goes forward.\n              clipToLine(cm, curStart, curEnd);\n            }\n            mode = 'char';\n            var exclusive = !motionArgs.inclusive || linewise;\n            cmSel = makeCmSelection(cm, {\n              anchor: curStart,\n              head: curEnd\n            }, mode, exclusive);\n          }\n          cm.setSelections(cmSel.ranges, cmSel.primary);\n          vim.lastMotion = null;\n          operatorArgs.repeat = repeat; // For indent in visual mode.\n          operatorArgs.registerName = registerName;\n          // Keep track of linewise as it affects how paste and change behave.\n          operatorArgs.linewise = linewise;\n          var operatorMoveTo = operators[operator](\n            cm, operatorArgs, cmSel.ranges, oldAnchor, newHead);\n          if (vim.visualMode) {\n            exitVisualMode(cm, operatorMoveTo != null);\n          }\n          if (operatorMoveTo) {\n            cm.setCursor(operatorMoveTo);\n          }\n        }\n      },\n      recordLastEdit: function(vim, inputState, actionCommand) {\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isPlaying) { return; }\n        vim.lastEditInputState = inputState;\n        vim.lastEditActionCommand = actionCommand;\n        macroModeState.lastInsertModeChanges.changes = [];\n        macroModeState.lastInsertModeChanges.expectCursorActivityForChange = false;\n      }\n    };\n\n    /**\n     * typedef {Object{line:number,ch:number}} Cursor An object containing the\n     *     position of the cursor.\n     */\n    // All of the functions below return Cursor objects.\n    var motions = {\n      moveToTopLine: function(cm, _head, motionArgs) {\n        var line = getUserVisibleLines(cm).top + motionArgs.repeat -1;\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      moveToMiddleLine: function(cm) {\n        var range = getUserVisibleLines(cm);\n        var line = Math.floor((range.top + range.bottom) * 0.5);\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      moveToBottomLine: function(cm, _head, motionArgs) {\n        var line = getUserVisibleLines(cm).bottom - motionArgs.repeat +1;\n        return Pos(line, findFirstNonWhiteSpaceCharacter(cm.getLine(line)));\n      },\n      expandToLine: function(_cm, head, motionArgs) {\n        // Expands forward to end of line, and then to next line if repeat is\n        // >1. Does not handle backward motion!\n        var cur = head;\n        return Pos(cur.line + motionArgs.repeat - 1, Infinity);\n      },\n      findNext: function(cm, _head, motionArgs) {\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        if (!query) {\n          return;\n        }\n        var prev = !motionArgs.forward;\n        // If search is initiated with ? instead of /, negate direction.\n        prev = (state.isReversed()) ? !prev : prev;\n        highlightSearchMatches(cm, query);\n        return findNext(cm, prev/** prev */, query, motionArgs.repeat);\n      },\n      goToMark: function(cm, _head, motionArgs, vim) {\n        var pos = getMarkPos(cm, vim, motionArgs.selectedCharacter);\n        if (pos) {\n          return motionArgs.linewise ? { line: pos.line, ch: findFirstNonWhiteSpaceCharacter(cm.getLine(pos.line)) } : pos;\n        }\n        return null;\n      },\n      moveToOtherHighlightedEnd: function(cm, _head, motionArgs, vim) {\n        if (vim.visualBlock && motionArgs.sameLine) {\n          var sel = vim.sel;\n          return [\n            clipCursorToContent(cm, Pos(sel.anchor.line, sel.head.ch)),\n            clipCursorToContent(cm, Pos(sel.head.line, sel.anchor.ch))\n          ];\n        } else {\n          return ([vim.sel.head, vim.sel.anchor]);\n        }\n      },\n      jumpToMark: function(cm, head, motionArgs, vim) {\n        var best = head;\n        for (var i = 0; i < motionArgs.repeat; i++) {\n          var cursor = best;\n          for (var key in vim.marks) {\n            if (!isLowerCase(key)) {\n              continue;\n            }\n            var mark = vim.marks[key].find();\n            var isWrongDirection = (motionArgs.forward) ?\n              cursorIsBefore(mark, cursor) : cursorIsBefore(cursor, mark);\n\n            if (isWrongDirection) {\n              continue;\n            }\n            if (motionArgs.linewise && (mark.line == cursor.line)) {\n              continue;\n            }\n\n            var equal = cursorEqual(cursor, best);\n            var between = (motionArgs.forward) ?\n              cursorIsBetween(cursor, mark, best) :\n              cursorIsBetween(best, mark, cursor);\n\n            if (equal || between) {\n              best = mark;\n            }\n          }\n        }\n\n        if (motionArgs.linewise) {\n          // Vim places the cursor on the first non-whitespace character of\n          // the line if there is one, else it places the cursor at the end\n          // of the line, regardless of whether a mark was found.\n          best = Pos(best.line, findFirstNonWhiteSpaceCharacter(cm.getLine(best.line)));\n        }\n        return best;\n      },\n      moveByCharacters: function(_cm, head, motionArgs) {\n        var cur = head;\n        var repeat = motionArgs.repeat;\n        var ch = motionArgs.forward ? cur.ch + repeat : cur.ch - repeat;\n        return Pos(cur.line, ch);\n      },\n      moveByLines: function(cm, head, motionArgs, vim) {\n        var cur = head;\n        var endCh = cur.ch;\n        // Depending what our last motion was, we may want to do different\n        // things. If our last motion was moving vertically, we want to\n        // preserve the HPos from our last horizontal move.  If our last motion\n        // was going to the end of a line, moving vertically we should go to\n        // the end of the line, etc.\n        switch (vim.lastMotion) {\n          case this.moveByLines:\n          case this.moveByDisplayLines:\n          case this.moveByScroll:\n          case this.moveToColumn:\n          case this.moveToEol:\n            endCh = vim.lastHPos;\n            break;\n          default:\n            vim.lastHPos = endCh;\n        }\n        var repeat = motionArgs.repeat+(motionArgs.repeatOffset||0);\n        var line = motionArgs.forward ? cur.line + repeat : cur.line - repeat;\n        var first = cm.firstLine();\n        var last = cm.lastLine();\n        // Vim go to line begin or line end when cursor at first/last line and\n        // move to previous/next line is triggered.\n        if (line < first && cur.line == first){\n          return this.moveToStartOfLine(cm, head, motionArgs, vim);\n        }else if (line > last && cur.line == last){\n            return this.moveToEol(cm, head, motionArgs, vim);\n        }\n        if (motionArgs.toFirstChar){\n          endCh=findFirstNonWhiteSpaceCharacter(cm.getLine(line));\n          vim.lastHPos = endCh;\n        }\n        vim.lastHSPos = cm.charCoords(Pos(line, endCh),'div').left;\n        return Pos(line, endCh);\n      },\n      moveByDisplayLines: function(cm, head, motionArgs, vim) {\n        var cur = head;\n        switch (vim.lastMotion) {\n          case this.moveByDisplayLines:\n          case this.moveByScroll:\n          case this.moveByLines:\n          case this.moveToColumn:\n          case this.moveToEol:\n            break;\n          default:\n            vim.lastHSPos = cm.charCoords(cur,'div').left;\n        }\n        var repeat = motionArgs.repeat;\n        var res=cm.findPosV(cur,(motionArgs.forward ? repeat : -repeat),'line',vim.lastHSPos);\n        if (res.hitSide) {\n          if (motionArgs.forward) {\n            var lastCharCoords = cm.charCoords(res, 'div');\n            var goalCoords = { top: lastCharCoords.top + 8, left: vim.lastHSPos };\n            var res = cm.coordsChar(goalCoords, 'div');\n          } else {\n            var resCoords = cm.charCoords(Pos(cm.firstLine(), 0), 'div');\n            resCoords.left = vim.lastHSPos;\n            res = cm.coordsChar(resCoords, 'div');\n          }\n        }\n        vim.lastHPos = res.ch;\n        return res;\n      },\n      moveByPage: function(cm, head, motionArgs) {\n        // CodeMirror only exposes functions that move the cursor page down, so\n        // doing this bad hack to move the cursor and move it back. evalInput\n        // will move the cursor to where it should be in the end.\n        var curStart = head;\n        var repeat = motionArgs.repeat;\n        return cm.findPosV(curStart, (motionArgs.forward ? repeat : -repeat), 'page');\n      },\n      moveByParagraph: function(cm, head, motionArgs) {\n        var dir = motionArgs.forward ? 1 : -1;\n        return findParagraph(cm, head, motionArgs.repeat, dir);\n      },\n      moveByScroll: function(cm, head, motionArgs, vim) {\n        var scrollbox = cm.getScrollInfo();\n        var curEnd = null;\n        var repeat = motionArgs.repeat;\n        if (!repeat) {\n          repeat = scrollbox.clientHeight / (2 * cm.defaultTextHeight());\n        }\n        var orig = cm.charCoords(head, 'local');\n        motionArgs.repeat = repeat;\n        var curEnd = motions.moveByDisplayLines(cm, head, motionArgs, vim);\n        if (!curEnd) {\n          return null;\n        }\n        var dest = cm.charCoords(curEnd, 'local');\n        cm.scrollTo(null, scrollbox.top + dest.top - orig.top);\n        return curEnd;\n      },\n      moveByWords: function(cm, head, motionArgs) {\n        return moveToWord(cm, head, motionArgs.repeat, !!motionArgs.forward,\n            !!motionArgs.wordEnd, !!motionArgs.bigWord);\n      },\n      moveTillCharacter: function(cm, _head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        var curEnd = moveToCharacter(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter);\n        var increment = motionArgs.forward ? -1 : 1;\n        recordLastCharacterSearch(increment, motionArgs);\n        if (!curEnd) return null;\n        curEnd.ch += increment;\n        return curEnd;\n      },\n      moveToCharacter: function(cm, head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        recordLastCharacterSearch(0, motionArgs);\n        return moveToCharacter(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter) || head;\n      },\n      moveToSymbol: function(cm, head, motionArgs) {\n        var repeat = motionArgs.repeat;\n        return findSymbol(cm, repeat, motionArgs.forward,\n            motionArgs.selectedCharacter) || head;\n      },\n      moveToColumn: function(cm, head, motionArgs, vim) {\n        var repeat = motionArgs.repeat;\n        // repeat is equivalent to which column we want to move to!\n        vim.lastHPos = repeat - 1;\n        vim.lastHSPos = cm.charCoords(head,'div').left;\n        return moveToColumn(cm, repeat);\n      },\n      moveToEol: function(cm, head, motionArgs, vim) {\n        var cur = head;\n        vim.lastHPos = Infinity;\n        var retval= Pos(cur.line + motionArgs.repeat - 1, Infinity);\n        var end=cm.clipPos(retval);\n        end.ch--;\n        vim.lastHSPos = cm.charCoords(end,'div').left;\n        return retval;\n      },\n      moveToFirstNonWhiteSpaceCharacter: function(cm, head) {\n        // Go to the start of the line where the text begins, or the end for\n        // whitespace-only lines\n        var cursor = head;\n        return Pos(cursor.line,\n                   findFirstNonWhiteSpaceCharacter(cm.getLine(cursor.line)));\n      },\n      moveToMatchedSymbol: function(cm, head) {\n        var cursor = head;\n        var line = cursor.line;\n        var ch = cursor.ch;\n        var lineText = cm.getLine(line);\n        var symbol;\n        do {\n          symbol = lineText.charAt(ch++);\n          if (symbol && isMatchableSymbol(symbol)) {\n            var style = cm.getTokenTypeAt(Pos(line, ch));\n            if (style !== \"string\" && style !== \"comment\") {\n              break;\n            }\n          }\n        } while (symbol);\n        if (symbol) {\n          var matched = cm.findMatchingBracket(Pos(line, ch));\n          return matched.to;\n        } else {\n          return cursor;\n        }\n      },\n      moveToStartOfLine: function(_cm, head) {\n        return Pos(head.line, 0);\n      },\n      moveToLineOrEdgeOfDocument: function(cm, _head, motionArgs) {\n        var lineNum = motionArgs.forward ? cm.lastLine() : cm.firstLine();\n        if (motionArgs.repeatIsExplicit) {\n          lineNum = motionArgs.repeat - cm.getOption('firstLineNumber');\n        }\n        return Pos(lineNum,\n                   findFirstNonWhiteSpaceCharacter(cm.getLine(lineNum)));\n      },\n      textObjectManipulation: function(cm, head, motionArgs, vim) {\n        // TODO: lots of possible exceptions that can be thrown here. Try da(\n        //     outside of a () block.\n\n        // TODO: adding <> >< to this map doesn't work, presumably because\n        // they're operators\n        var mirroredPairs = {'(': ')', ')': '(',\n                             '{': '}', '}': '{',\n                             '[': ']', ']': '['};\n        var selfPaired = {'\\'': true, '\"': true};\n\n        var character = motionArgs.selectedCharacter;\n        // 'b' refers to  '()' block.\n        // 'B' refers to  '{}' block.\n        if (character == 'b') {\n          character = '(';\n        } else if (character == 'B') {\n          character = '{';\n        }\n\n        // Inclusive is the difference between a and i\n        // TODO: Instead of using the additional text object map to perform text\n        //     object operations, merge the map into the defaultKeyMap and use\n        //     motionArgs to define behavior. Define separate entries for 'aw',\n        //     'iw', 'a[', 'i[', etc.\n        var inclusive = !motionArgs.textObjectInner;\n\n        var tmp;\n        if (mirroredPairs[character]) {\n          tmp = selectCompanionObject(cm, head, character, inclusive);\n        } else if (selfPaired[character]) {\n          tmp = findBeginningAndEnd(cm, head, character, inclusive);\n        } else if (character === 'W') {\n          tmp = expandWordUnderCursor(cm, inclusive, true /** forward */,\n                                                     true /** bigWord */);\n        } else if (character === 'w') {\n          tmp = expandWordUnderCursor(cm, inclusive, true /** forward */,\n                                                     false /** bigWord */);\n        } else if (character === 'p') {\n          tmp = findParagraph(cm, head, motionArgs.repeat, 0, inclusive);\n          motionArgs.linewise = true;\n          if (vim.visualMode) {\n            if (!vim.visualLine) { vim.visualLine = true; }\n          } else {\n            var operatorArgs = vim.inputState.operatorArgs;\n            if (operatorArgs) { operatorArgs.linewise = true; }\n            tmp.end.line--;\n          }\n        } else {\n          // No text object defined for this, don't move.\n          return null;\n        }\n\n        if (!cm.state.vim.visualMode) {\n          return [tmp.start, tmp.end];\n        } else {\n          return expandSelection(cm, tmp.start, tmp.end);\n        }\n      },\n\n      repeatLastCharacterSearch: function(cm, head, motionArgs) {\n        var lastSearch = vimGlobalState.lastCharacterSearch;\n        var repeat = motionArgs.repeat;\n        var forward = motionArgs.forward === lastSearch.forward;\n        var increment = (lastSearch.increment ? 1 : 0) * (forward ? -1 : 1);\n        cm.moveH(-increment, 'char');\n        motionArgs.inclusive = forward ? true : false;\n        var curEnd = moveToCharacter(cm, repeat, forward, lastSearch.selectedCharacter);\n        if (!curEnd) {\n          cm.moveH(increment, 'char');\n          return head;\n        }\n        curEnd.ch += increment;\n        return curEnd;\n      }\n    };\n\n    function defineMotion(name, fn) {\n      motions[name] = fn;\n    }\n\n    function fillArray(val, times) {\n      var arr = [];\n      for (var i = 0; i < times; i++) {\n        arr.push(val);\n      }\n      return arr;\n    }\n    /**\n     * An operator acts on a text selection. It receives the list of selections\n     * as input. The corresponding CodeMirror selection is guaranteed to\n    * match the input selection.\n     */\n    var operators = {\n      change: function(cm, args, ranges) {\n        var finalHead, text;\n        var vim = cm.state.vim;\n        vimGlobalState.macroModeState.lastInsertModeChanges.inVisualBlock = vim.visualBlock;\n        if (!vim.visualMode) {\n          var anchor = ranges[0].anchor,\n              head = ranges[0].head;\n          text = cm.getRange(anchor, head);\n          var lastState = vim.lastEditInputState || {};\n          if (lastState.motion == \"moveByWords\" && !isWhiteSpaceString(text)) {\n            // Exclude trailing whitespace if the range is not all whitespace.\n            var match = (/\\s+$/).exec(text);\n            if (match && lastState.motionArgs && lastState.motionArgs.forward) {\n              head = offsetCursor(head, 0, - match[0].length);\n              text = text.slice(0, - match[0].length);\n            }\n          }\n          var prevLineEnd = new Pos(anchor.line - 1, Number.MAX_VALUE);\n          var wasLastLine = cm.firstLine() == cm.lastLine();\n          if (head.line > cm.lastLine() && args.linewise && !wasLastLine) {\n            cm.replaceRange('', prevLineEnd, head);\n          } else {\n            cm.replaceRange('', anchor, head);\n          }\n          if (args.linewise) {\n            // Push the next line back down, if there is a next line.\n            if (!wasLastLine) {\n              cm.setCursor(prevLineEnd);\n              CodeMirror.commands.newlineAndIndent(cm);\n            }\n            // make sure cursor ends up at the end of the line.\n            anchor.ch = Number.MAX_VALUE;\n          }\n          finalHead = anchor;\n        } else {\n          text = cm.getSelection();\n          var replacement = fillArray('', ranges.length);\n          cm.replaceSelections(replacement);\n          finalHead = cursorMin(ranges[0].head, ranges[0].anchor);\n        }\n        vimGlobalState.registerController.pushText(\n            args.registerName, 'change', text,\n            args.linewise, ranges.length > 1);\n        actions.enterInsertMode(cm, {head: finalHead}, cm.state.vim);\n      },\n      // delete is a javascript keyword.\n      'delete': function(cm, args, ranges) {\n        var finalHead, text;\n        var vim = cm.state.vim;\n        if (!vim.visualBlock) {\n          var anchor = ranges[0].anchor,\n              head = ranges[0].head;\n          if (args.linewise &&\n              head.line != cm.firstLine() &&\n              anchor.line == cm.lastLine() &&\n              anchor.line == head.line - 1) {\n            // Special case for dd on last line (and first line).\n            if (anchor.line == cm.firstLine()) {\n              anchor.ch = 0;\n            } else {\n              anchor = Pos(anchor.line - 1, lineLength(cm, anchor.line - 1));\n            }\n          }\n          text = cm.getRange(anchor, head);\n          cm.replaceRange('', anchor, head);\n          finalHead = anchor;\n          if (args.linewise) {\n            finalHead = motions.moveToFirstNonWhiteSpaceCharacter(cm, anchor);\n          }\n        } else {\n          text = cm.getSelection();\n          var replacement = fillArray('', ranges.length);\n          cm.replaceSelections(replacement);\n          finalHead = ranges[0].anchor;\n        }\n        vimGlobalState.registerController.pushText(\n            args.registerName, 'delete', text,\n            args.linewise, vim.visualBlock);\n        return clipCursorToContent(cm, finalHead);\n      },\n      indent: function(cm, args, ranges) {\n        var vim = cm.state.vim;\n        var startLine = ranges[0].anchor.line;\n        var endLine = vim.visualBlock ?\n          ranges[ranges.length - 1].anchor.line :\n          ranges[0].head.line;\n        // In visual mode, n> shifts the selection right n times, instead of\n        // shifting n lines right once.\n        var repeat = (vim.visualMode) ? args.repeat : 1;\n        if (args.linewise) {\n          // The only way to delete a newline is to delete until the start of\n          // the next line, so in linewise mode evalInput will include the next\n          // line. We don't want this in indent, so we go back a line.\n          endLine--;\n        }\n        for (var i = startLine; i <= endLine; i++) {\n          for (var j = 0; j < repeat; j++) {\n            cm.indentLine(i, args.indentRight);\n          }\n        }\n        return motions.moveToFirstNonWhiteSpaceCharacter(cm, ranges[0].anchor);\n      },\n      changeCase: function(cm, args, ranges, oldAnchor, newHead) {\n        var selections = cm.getSelections();\n        var swapped = [];\n        var toLower = args.toLower;\n        for (var j = 0; j < selections.length; j++) {\n          var toSwap = selections[j];\n          var text = '';\n          if (toLower === true) {\n            text = toSwap.toLowerCase();\n          } else if (toLower === false) {\n            text = toSwap.toUpperCase();\n          } else {\n            for (var i = 0; i < toSwap.length; i++) {\n              var character = toSwap.charAt(i);\n              text += isUpperCase(character) ? character.toLowerCase() :\n                  character.toUpperCase();\n            }\n          }\n          swapped.push(text);\n        }\n        cm.replaceSelections(swapped);\n        if (args.shouldMoveCursor){\n          return newHead;\n        } else if (!cm.state.vim.visualMode && args.linewise && ranges[0].anchor.line + 1 == ranges[0].head.line) {\n          return motions.moveToFirstNonWhiteSpaceCharacter(cm, oldAnchor);\n        } else if (args.linewise){\n          return oldAnchor;\n        } else {\n          return cursorMin(ranges[0].anchor, ranges[0].head);\n        }\n      },\n      yank: function(cm, args, ranges, oldAnchor) {\n        var vim = cm.state.vim;\n        var text = cm.getSelection();\n        var endPos = vim.visualMode\n          ? cursorMin(vim.sel.anchor, vim.sel.head, ranges[0].head, ranges[0].anchor)\n          : oldAnchor;\n        vimGlobalState.registerController.pushText(\n            args.registerName, 'yank',\n            text, args.linewise, vim.visualBlock);\n        return endPos;\n      }\n    };\n\n    function defineOperator(name, fn) {\n      operators[name] = fn;\n    }\n\n    var actions = {\n      jumpListWalk: function(cm, actionArgs, vim) {\n        if (vim.visualMode) {\n          return;\n        }\n        var repeat = actionArgs.repeat;\n        var forward = actionArgs.forward;\n        var jumpList = vimGlobalState.jumpList;\n\n        var mark = jumpList.move(cm, forward ? repeat : -repeat);\n        var markPos = mark ? mark.find() : undefined;\n        markPos = markPos ? markPos : cm.getCursor();\n        cm.setCursor(markPos);\n      },\n      scroll: function(cm, actionArgs, vim) {\n        if (vim.visualMode) {\n          return;\n        }\n        var repeat = actionArgs.repeat || 1;\n        var lineHeight = cm.defaultTextHeight();\n        var top = cm.getScrollInfo().top;\n        var delta = lineHeight * repeat;\n        var newPos = actionArgs.forward ? top + delta : top - delta;\n        var cursor = copyCursor(cm.getCursor());\n        var cursorCoords = cm.charCoords(cursor, 'local');\n        if (actionArgs.forward) {\n          if (newPos > cursorCoords.top) {\n             cursor.line += (newPos - cursorCoords.top) / lineHeight;\n             cursor.line = Math.ceil(cursor.line);\n             cm.setCursor(cursor);\n             cursorCoords = cm.charCoords(cursor, 'local');\n             cm.scrollTo(null, cursorCoords.top);\n          } else {\n             // Cursor stays within bounds.  Just reposition the scroll window.\n             cm.scrollTo(null, newPos);\n          }\n        } else {\n          var newBottom = newPos + cm.getScrollInfo().clientHeight;\n          if (newBottom < cursorCoords.bottom) {\n             cursor.line -= (cursorCoords.bottom - newBottom) / lineHeight;\n             cursor.line = Math.floor(cursor.line);\n             cm.setCursor(cursor);\n             cursorCoords = cm.charCoords(cursor, 'local');\n             cm.scrollTo(\n                 null, cursorCoords.bottom - cm.getScrollInfo().clientHeight);\n          } else {\n             // Cursor stays within bounds.  Just reposition the scroll window.\n             cm.scrollTo(null, newPos);\n          }\n        }\n      },\n      scrollToCursor: function(cm, actionArgs) {\n        var lineNum = cm.getCursor().line;\n        var charCoords = cm.charCoords(Pos(lineNum, 0), 'local');\n        var height = cm.getScrollInfo().clientHeight;\n        var y = charCoords.top;\n        var lineHeight = charCoords.bottom - y;\n        switch (actionArgs.position) {\n          case 'center': y = y - (height / 2) + lineHeight;\n            break;\n          case 'bottom': y = y - height + lineHeight;\n            break;\n        }\n        cm.scrollTo(null, y);\n      },\n      replayMacro: function(cm, actionArgs, vim) {\n        var registerName = actionArgs.selectedCharacter;\n        var repeat = actionArgs.repeat;\n        var macroModeState = vimGlobalState.macroModeState;\n        if (registerName == '@') {\n          registerName = macroModeState.latestRegister;\n        }\n        while(repeat--){\n          executeMacroRegister(cm, vim, macroModeState, registerName);\n        }\n      },\n      enterMacroRecordMode: function(cm, actionArgs) {\n        var macroModeState = vimGlobalState.macroModeState;\n        var registerName = actionArgs.selectedCharacter;\n        macroModeState.enterMacroRecordMode(cm, registerName);\n      },\n      toggleOverwrite: function(cm) {\n        if (!cm.state.overwrite) {\n          cm.toggleOverwrite(true);\n          cm.setOption('keyMap', 'vim-replace');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"replace\"});\n        } else {\n          cm.toggleOverwrite(false);\n          cm.setOption('keyMap', 'vim-insert');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"insert\"});\n        }\n      },\n      enterInsertMode: function(cm, actionArgs, vim) {\n        if (cm.getOption('readOnly')) { return; }\n        vim.insertMode = true;\n        vim.insertModeRepeat = actionArgs && actionArgs.repeat || 1;\n        var insertAt = (actionArgs) ? actionArgs.insertAt : null;\n        var sel = vim.sel;\n        var head = actionArgs.head || cm.getCursor('head');\n        var height = cm.listSelections().length;\n        if (insertAt == 'eol') {\n          head = Pos(head.line, lineLength(cm, head.line));\n        } else if (insertAt == 'charAfter') {\n          head = offsetCursor(head, 0, 1);\n        } else if (insertAt == 'firstNonBlank') {\n          head = motions.moveToFirstNonWhiteSpaceCharacter(cm, head);\n        } else if (insertAt == 'startOfSelectedArea') {\n          if (!vim.visualBlock) {\n            if (sel.head.line < sel.anchor.line) {\n              head = sel.head;\n            } else {\n              head = Pos(sel.anchor.line, 0);\n            }\n          } else {\n            head = Pos(\n                Math.min(sel.head.line, sel.anchor.line),\n                Math.min(sel.head.ch, sel.anchor.ch));\n            height = Math.abs(sel.head.line - sel.anchor.line) + 1;\n          }\n        } else if (insertAt == 'endOfSelectedArea') {\n          if (!vim.visualBlock) {\n            if (sel.head.line >= sel.anchor.line) {\n              head = offsetCursor(sel.head, 0, 1);\n            } else {\n              head = Pos(sel.anchor.line, 0);\n            }\n          } else {\n            head = Pos(\n                Math.min(sel.head.line, sel.anchor.line),\n                Math.max(sel.head.ch + 1, sel.anchor.ch));\n            height = Math.abs(sel.head.line - sel.anchor.line) + 1;\n          }\n        } else if (insertAt == 'inplace') {\n          if (vim.visualMode){\n            return;\n          }\n        }\n        cm.setOption('disableInput', false);\n        if (actionArgs && actionArgs.replace) {\n          // Handle Replace-mode as a special case of insert mode.\n          cm.toggleOverwrite(true);\n          cm.setOption('keyMap', 'vim-replace');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"replace\"});\n        } else {\n          cm.toggleOverwrite(false);\n          cm.setOption('keyMap', 'vim-insert');\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"insert\"});\n        }\n        if (!vimGlobalState.macroModeState.isPlaying) {\n          // Only record if not replaying.\n          cm.on('change', onChange);\n          CodeMirror.on(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n        }\n        if (vim.visualMode) {\n          exitVisualMode(cm);\n        }\n        selectForInsert(cm, head, height);\n      },\n      toggleVisualMode: function(cm, actionArgs, vim) {\n        var repeat = actionArgs.repeat;\n        var anchor = cm.getCursor();\n        var head;\n        // TODO: The repeat should actually select number of characters/lines\n        //     equal to the repeat times the size of the previous visual\n        //     operation.\n        if (!vim.visualMode) {\n          // Entering visual mode\n          vim.visualMode = true;\n          vim.visualLine = !!actionArgs.linewise;\n          vim.visualBlock = !!actionArgs.blockwise;\n          head = clipCursorToContent(\n              cm, Pos(anchor.line, anchor.ch + repeat - 1),\n              true /** includeLineBreak */);\n          vim.sel = {\n            anchor: anchor,\n            head: head\n          };\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : vim.visualBlock ? \"blockwise\" : \"\"});\n          updateCmSelection(cm);\n          updateMark(cm, vim, '<', cursorMin(anchor, head));\n          updateMark(cm, vim, '>', cursorMax(anchor, head));\n        } else if (vim.visualLine ^ actionArgs.linewise ||\n            vim.visualBlock ^ actionArgs.blockwise) {\n          // Toggling between modes\n          vim.visualLine = !!actionArgs.linewise;\n          vim.visualBlock = !!actionArgs.blockwise;\n          CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\", subMode: vim.visualLine ? \"linewise\" : vim.visualBlock ? \"blockwise\" : \"\"});\n          updateCmSelection(cm);\n        } else {\n          exitVisualMode(cm);\n        }\n      },\n      reselectLastSelection: function(cm, _actionArgs, vim) {\n        var lastSelection = vim.lastSelection;\n        if (vim.visualMode) {\n          updateLastSelection(cm, vim);\n        }\n        if (lastSelection) {\n          var anchor = lastSelection.anchorMark.find();\n          var head = lastSelection.headMark.find();\n          if (!anchor || !head) {\n            // If the marks have been destroyed due to edits, do nothing.\n            return;\n          }\n          vim.sel = {\n            anchor: anchor,\n            head: head\n          };\n          vim.visualMode = true;\n          vim.visualLine = lastSelection.visualLine;\n          vim.visualBlock = lastSelection.visualBlock;\n          updateCmSelection(cm);\n          updateMark(cm, vim, '<', cursorMin(anchor, head));\n          updateMark(cm, vim, '>', cursorMax(anchor, head));\n          CodeMirror.signal(cm, 'vim-mode-change', {\n            mode: 'visual',\n            subMode: vim.visualLine ? 'linewise' :\n                     vim.visualBlock ? 'blockwise' : ''});\n        }\n      },\n      joinLines: function(cm, actionArgs, vim) {\n        var curStart, curEnd;\n        if (vim.visualMode) {\n          curStart = cm.getCursor('anchor');\n          curEnd = cm.getCursor('head');\n          if (cursorIsBefore(curEnd, curStart)) {\n            var tmp = curEnd;\n            curEnd = curStart;\n            curStart = tmp;\n          }\n          curEnd.ch = lineLength(cm, curEnd.line) - 1;\n        } else {\n          // Repeat is the number of lines to join. Minimum 2 lines.\n          var repeat = Math.max(actionArgs.repeat, 2);\n          curStart = cm.getCursor();\n          curEnd = clipCursorToContent(cm, Pos(curStart.line + repeat - 1,\n                                               Infinity));\n        }\n        var finalCh = 0;\n        for (var i = curStart.line; i < curEnd.line; i++) {\n          finalCh = lineLength(cm, curStart.line);\n          var tmp = Pos(curStart.line + 1,\n                        lineLength(cm, curStart.line + 1));\n          var text = cm.getRange(curStart, tmp);\n          text = text.replace(/\\n\\s*/g, ' ');\n          cm.replaceRange(text, curStart, tmp);\n        }\n        var curFinalPos = Pos(curStart.line, finalCh);\n        if (vim.visualMode) {\n          exitVisualMode(cm, false);\n        }\n        cm.setCursor(curFinalPos);\n      },\n      newLineAndEnterInsertMode: function(cm, actionArgs, vim) {\n        vim.insertMode = true;\n        var insertAt = copyCursor(cm.getCursor());\n        if (insertAt.line === cm.firstLine() && !actionArgs.after) {\n          // Special case for inserting newline before start of document.\n          cm.replaceRange('\\n', Pos(cm.firstLine(), 0));\n          cm.setCursor(cm.firstLine(), 0);\n        } else {\n          insertAt.line = (actionArgs.after) ? insertAt.line :\n              insertAt.line - 1;\n          insertAt.ch = lineLength(cm, insertAt.line);\n          cm.setCursor(insertAt);\n          var newlineFn = CodeMirror.commands.newlineAndIndentContinueComment ||\n              CodeMirror.commands.newlineAndIndent;\n          newlineFn(cm);\n        }\n        this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim);\n      },\n      paste: function(cm, actionArgs, vim) {\n        var cur = copyCursor(cm.getCursor());\n        var register = vimGlobalState.registerController.getRegister(\n            actionArgs.registerName);\n        var text = register.toString();\n        if (!text) {\n          return;\n        }\n        if (actionArgs.matchIndent) {\n          var tabSize = cm.getOption(\"tabSize\");\n          // length that considers tabs and tabSize\n          var whitespaceLength = function(str) {\n            var tabs = (str.split(\"\\t\").length - 1);\n            var spaces = (str.split(\" \").length - 1);\n            return tabs * tabSize + spaces * 1;\n          };\n          var currentLine = cm.getLine(cm.getCursor().line);\n          var indent = whitespaceLength(currentLine.match(/^\\s*/)[0]);\n          // chomp last newline b/c don't want it to match /^\\s*/gm\n          var chompedText = text.replace(/\\n$/, '');\n          var wasChomped = text !== chompedText;\n          var firstIndent = whitespaceLength(text.match(/^\\s*/)[0]);\n          var text = chompedText.replace(/^\\s*/gm, function(wspace) {\n            var newIndent = indent + (whitespaceLength(wspace) - firstIndent);\n            if (newIndent < 0) {\n              return \"\";\n            }\n            else if (cm.getOption(\"indentWithTabs\")) {\n              var quotient = Math.floor(newIndent / tabSize);\n              return Array(quotient + 1).join('\\t');\n            }\n            else {\n              return Array(newIndent + 1).join(' ');\n            }\n          });\n          text += wasChomped ? \"\\n\" : \"\";\n        }\n        if (actionArgs.repeat > 1) {\n          var text = Array(actionArgs.repeat + 1).join(text);\n        }\n        var linewise = register.linewise;\n        var blockwise = register.blockwise;\n        if (linewise) {\n          if(vim.visualMode) {\n            text = vim.visualLine ? text.slice(0, -1) : '\\n' + text.slice(0, text.length - 1) + '\\n';\n          } else if (actionArgs.after) {\n            // Move the newline at the end to the start instead, and paste just\n            // before the newline character of the line we are on right now.\n            text = '\\n' + text.slice(0, text.length - 1);\n            cur.ch = lineLength(cm, cur.line);\n          } else {\n            cur.ch = 0;\n          }\n        } else {\n          if (blockwise) {\n            text = text.split('\\n');\n            for (var i = 0; i < text.length; i++) {\n              text[i] = (text[i] == '') ? ' ' : text[i];\n            }\n          }\n          cur.ch += actionArgs.after ? 1 : 0;\n        }\n        var curPosFinal;\n        var idx;\n        if (vim.visualMode) {\n          //  save the pasted text for reselection if the need arises\n          vim.lastPastedText = text;\n          var lastSelectionCurEnd;\n          var selectedArea = getSelectedAreaRange(cm, vim);\n          var selectionStart = selectedArea[0];\n          var selectionEnd = selectedArea[1];\n          var selectedText = cm.getSelection();\n          var selections = cm.listSelections();\n          var emptyStrings = new Array(selections.length).join('1').split('1');\n          // save the curEnd marker before it get cleared due to cm.replaceRange.\n          if (vim.lastSelection) {\n            lastSelectionCurEnd = vim.lastSelection.headMark.find();\n          }\n          // push the previously selected text to unnamed register\n          vimGlobalState.registerController.unnamedRegister.setText(selectedText);\n          if (blockwise) {\n            // first delete the selected text\n            cm.replaceSelections(emptyStrings);\n            // Set new selections as per the block length of the yanked text\n            selectionEnd = Pos(selectionStart.line + text.length-1, selectionStart.ch);\n            cm.setCursor(selectionStart);\n            selectBlock(cm, selectionEnd);\n            cm.replaceSelections(text);\n            curPosFinal = selectionStart;\n          } else if (vim.visualBlock) {\n            cm.replaceSelections(emptyStrings);\n            cm.setCursor(selectionStart);\n            cm.replaceRange(text, selectionStart, selectionStart);\n            curPosFinal = selectionStart;\n          } else {\n            cm.replaceRange(text, selectionStart, selectionEnd);\n            curPosFinal = cm.posFromIndex(cm.indexFromPos(selectionStart) + text.length - 1);\n          }\n          // restore the the curEnd marker\n          if(lastSelectionCurEnd) {\n            vim.lastSelection.headMark = cm.setBookmark(lastSelectionCurEnd);\n          }\n          if (linewise) {\n            curPosFinal.ch=0;\n          }\n        } else {\n          if (blockwise) {\n            cm.setCursor(cur);\n            for (var i = 0; i < text.length; i++) {\n              var line = cur.line+i;\n              if (line > cm.lastLine()) {\n                cm.replaceRange('\\n',  Pos(line, 0));\n              }\n              var lastCh = lineLength(cm, line);\n              if (lastCh < cur.ch) {\n                extendLineToColumn(cm, line, cur.ch);\n              }\n            }\n            cm.setCursor(cur);\n            selectBlock(cm, Pos(cur.line + text.length-1, cur.ch));\n            cm.replaceSelections(text);\n            curPosFinal = cur;\n          } else {\n            cm.replaceRange(text, cur);\n            // Now fine tune the cursor to where we want it.\n            if (linewise && actionArgs.after) {\n              curPosFinal = Pos(\n              cur.line + 1,\n              findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1)));\n            } else if (linewise && !actionArgs.after) {\n              curPosFinal = Pos(\n                cur.line,\n                findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line)));\n            } else if (!linewise && actionArgs.after) {\n              idx = cm.indexFromPos(cur);\n              curPosFinal = cm.posFromIndex(idx + text.length - 1);\n            } else {\n              idx = cm.indexFromPos(cur);\n              curPosFinal = cm.posFromIndex(idx + text.length);\n            }\n          }\n        }\n        if (vim.visualMode) {\n          exitVisualMode(cm, false);\n        }\n        cm.setCursor(curPosFinal);\n      },\n      undo: function(cm, actionArgs) {\n        cm.operation(function() {\n          repeatFn(cm, CodeMirror.commands.undo, actionArgs.repeat)();\n          cm.setCursor(cm.getCursor('anchor'));\n        });\n      },\n      redo: function(cm, actionArgs) {\n        repeatFn(cm, CodeMirror.commands.redo, actionArgs.repeat)();\n      },\n      setRegister: function(_cm, actionArgs, vim) {\n        vim.inputState.registerName = actionArgs.selectedCharacter;\n      },\n      setMark: function(cm, actionArgs, vim) {\n        var markName = actionArgs.selectedCharacter;\n        updateMark(cm, vim, markName, cm.getCursor());\n      },\n      replace: function(cm, actionArgs, vim) {\n        var replaceWith = actionArgs.selectedCharacter;\n        var curStart = cm.getCursor();\n        var replaceTo;\n        var curEnd;\n        var selections = cm.listSelections();\n        if (vim.visualMode) {\n          curStart = cm.getCursor('start');\n          curEnd = cm.getCursor('end');\n        } else {\n          var line = cm.getLine(curStart.line);\n          replaceTo = curStart.ch + actionArgs.repeat;\n          if (replaceTo > line.length) {\n            replaceTo=line.length;\n          }\n          curEnd = Pos(curStart.line, replaceTo);\n        }\n        if (replaceWith=='\\n') {\n          if (!vim.visualMode) cm.replaceRange('', curStart, curEnd);\n          // special case, where vim help says to replace by just one line-break\n          (CodeMirror.commands.newlineAndIndentContinueComment || CodeMirror.commands.newlineAndIndent)(cm);\n        } else {\n          var replaceWithStr = cm.getRange(curStart, curEnd);\n          //replace all characters in range by selected, but keep linebreaks\n          replaceWithStr = replaceWithStr.replace(/[^\\n]/g, replaceWith);\n          if (vim.visualBlock) {\n            // Tabs are split in visua block before replacing\n            var spaces = new Array(cm.getOption(\"tabSize\")+1).join(' ');\n            replaceWithStr = cm.getSelection();\n            replaceWithStr = replaceWithStr.replace(/\\t/g, spaces).replace(/[^\\n]/g, replaceWith).split('\\n');\n            cm.replaceSelections(replaceWithStr);\n          } else {\n            cm.replaceRange(replaceWithStr, curStart, curEnd);\n          }\n          if (vim.visualMode) {\n            curStart = cursorIsBefore(selections[0].anchor, selections[0].head) ?\n                         selections[0].anchor : selections[0].head;\n            cm.setCursor(curStart);\n            exitVisualMode(cm, false);\n          } else {\n            cm.setCursor(offsetCursor(curEnd, 0, -1));\n          }\n        }\n      },\n      incrementNumberToken: function(cm, actionArgs) {\n        var cur = cm.getCursor();\n        var lineStr = cm.getLine(cur.line);\n        var re = /-?\\d+/g;\n        var match;\n        var start;\n        var end;\n        var numberStr;\n        var token;\n        while ((match = re.exec(lineStr)) !== null) {\n          token = match[0];\n          start = match.index;\n          end = start + token.length;\n          if (cur.ch < end)break;\n        }\n        if (!actionArgs.backtrack && (end <= cur.ch))return;\n        if (token) {\n          var increment = actionArgs.increase ? 1 : -1;\n          var number = parseInt(token) + (increment * actionArgs.repeat);\n          var from = Pos(cur.line, start);\n          var to = Pos(cur.line, end);\n          numberStr = number.toString();\n          cm.replaceRange(numberStr, from, to);\n        } else {\n          return;\n        }\n        cm.setCursor(Pos(cur.line, start + numberStr.length - 1));\n      },\n      repeatLastEdit: function(cm, actionArgs, vim) {\n        var lastEditInputState = vim.lastEditInputState;\n        if (!lastEditInputState) { return; }\n        var repeat = actionArgs.repeat;\n        if (repeat && actionArgs.repeatIsExplicit) {\n          vim.lastEditInputState.repeatOverride = repeat;\n        } else {\n          repeat = vim.lastEditInputState.repeatOverride || repeat;\n        }\n        repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */);\n      },\n      indent: function(cm, actionArgs) {\n        cm.indentLine(cm.getCursor().line, actionArgs.indentRight);\n      },\n      exitInsertMode: exitInsertMode\n    };\n\n    function defineAction(name, fn) {\n      actions[name] = fn;\n    }\n\n    /*\n     * Below are miscellaneous utility functions used by vim.js\n     */\n\n    /**\n     * Clips cursor to ensure that line is within the buffer's range\n     * If includeLineBreak is true, then allow cur.ch == lineLength.\n     */\n    function clipCursorToContent(cm, cur, includeLineBreak) {\n      var line = Math.min(Math.max(cm.firstLine(), cur.line), cm.lastLine() );\n      var maxCh = lineLength(cm, line) - 1;\n      maxCh = (includeLineBreak) ? maxCh + 1 : maxCh;\n      var ch = Math.min(Math.max(0, cur.ch), maxCh);\n      return Pos(line, ch);\n    }\n    function copyArgs(args) {\n      var ret = {};\n      for (var prop in args) {\n        if (args.hasOwnProperty(prop)) {\n          ret[prop] = args[prop];\n        }\n      }\n      return ret;\n    }\n    function offsetCursor(cur, offsetLine, offsetCh) {\n      if (typeof offsetLine === 'object') {\n        offsetCh = offsetLine.ch;\n        offsetLine = offsetLine.line;\n      }\n      return Pos(cur.line + offsetLine, cur.ch + offsetCh);\n    }\n    function getOffset(anchor, head) {\n      return {\n        line: head.line - anchor.line,\n        ch: head.line - anchor.line\n      };\n    }\n    function commandMatches(keys, keyMap, context, inputState) {\n      // Partial matches are not applied. They inform the key handler\n      // that the current key sequence is a subsequence of a valid key\n      // sequence, so that the key buffer is not cleared.\n      var match, partial = [], full = [];\n      for (var i = 0; i < keyMap.length; i++) {\n        var command = keyMap[i];\n        if (context == 'insert' && command.context != 'insert' ||\n            command.context && command.context != context ||\n            inputState.operator && command.type == 'action' ||\n            !(match = commandMatch(keys, command.keys))) { continue; }\n        if (match == 'partial') { partial.push(command); }\n        if (match == 'full') { full.push(command); }\n      }\n      return {\n        partial: partial.length && partial,\n        full: full.length && full\n      };\n    }\n    function commandMatch(pressed, mapped) {\n      if (mapped.slice(-11) == '<character>') {\n        // Last character matches anything.\n        var prefixLen = mapped.length - 11;\n        var pressedPrefix = pressed.slice(0, prefixLen);\n        var mappedPrefix = mapped.slice(0, prefixLen);\n        return pressedPrefix == mappedPrefix && pressed.length > prefixLen ? 'full' :\n               mappedPrefix.indexOf(pressedPrefix) == 0 ? 'partial' : false;\n      } else {\n        return pressed == mapped ? 'full' :\n               mapped.indexOf(pressed) == 0 ? 'partial' : false;\n      }\n    }\n    function lastChar(keys) {\n      var match = /^.*(<[\\w\\-]+>)$/.exec(keys);\n      var selectedCharacter = match ? match[1] : keys.slice(-1);\n      if (selectedCharacter.length > 1){\n        switch(selectedCharacter){\n          case '<CR>':\n            selectedCharacter='\\n';\n            break;\n          case '<Space>':\n            selectedCharacter=' ';\n            break;\n          default:\n            break;\n        }\n      }\n      return selectedCharacter;\n    }\n    function repeatFn(cm, fn, repeat) {\n      return function() {\n        for (var i = 0; i < repeat; i++) {\n          fn(cm);\n        }\n      };\n    }\n    function copyCursor(cur) {\n      return Pos(cur.line, cur.ch);\n    }\n    function cursorEqual(cur1, cur2) {\n      return cur1.ch == cur2.ch && cur1.line == cur2.line;\n    }\n    function cursorIsBefore(cur1, cur2) {\n      if (cur1.line < cur2.line) {\n        return true;\n      }\n      if (cur1.line == cur2.line && cur1.ch < cur2.ch) {\n        return true;\n      }\n      return false;\n    }\n    function cursorMin(cur1, cur2) {\n      if (arguments.length > 2) {\n        cur2 = cursorMin.apply(undefined, Array.prototype.slice.call(arguments, 1));\n      }\n      return cursorIsBefore(cur1, cur2) ? cur1 : cur2;\n    }\n    function cursorMax(cur1, cur2) {\n      if (arguments.length > 2) {\n        cur2 = cursorMax.apply(undefined, Array.prototype.slice.call(arguments, 1));\n      }\n      return cursorIsBefore(cur1, cur2) ? cur2 : cur1;\n    }\n    function cursorIsBetween(cur1, cur2, cur3) {\n      // returns true if cur2 is between cur1 and cur3.\n      var cur1before2 = cursorIsBefore(cur1, cur2);\n      var cur2before3 = cursorIsBefore(cur2, cur3);\n      return cur1before2 && cur2before3;\n    }\n    function lineLength(cm, lineNum) {\n      return cm.getLine(lineNum).length;\n    }\n    function trim(s) {\n      if (s.trim) {\n        return s.trim();\n      }\n      return s.replace(/^\\s+|\\s+$/g, '');\n    }\n    function escapeRegex(s) {\n      return s.replace(/([.?*+$\\[\\]\\/\\\\(){}|\\-])/g, '\\\\$1');\n    }\n    function extendLineToColumn(cm, lineNum, column) {\n      var endCh = lineLength(cm, lineNum);\n      var spaces = new Array(column-endCh+1).join(' ');\n      cm.setCursor(Pos(lineNum, endCh));\n      cm.replaceRange(spaces, cm.getCursor());\n    }\n    // This functions selects a rectangular block\n    // of text with selectionEnd as any of its corner\n    // Height of block:\n    // Difference in selectionEnd.line and first/last selection.line\n    // Width of the block:\n    // Distance between selectionEnd.ch and any(first considered here) selection.ch\n    function selectBlock(cm, selectionEnd) {\n      var selections = [], ranges = cm.listSelections();\n      var head = copyCursor(cm.clipPos(selectionEnd));\n      var isClipped = !cursorEqual(selectionEnd, head);\n      var curHead = cm.getCursor('head');\n      var primIndex = getIndex(ranges, curHead);\n      var wasClipped = cursorEqual(ranges[primIndex].head, ranges[primIndex].anchor);\n      var max = ranges.length - 1;\n      var index = max - primIndex > primIndex ? max : 0;\n      var base = ranges[index].anchor;\n\n      var firstLine = Math.min(base.line, head.line);\n      var lastLine = Math.max(base.line, head.line);\n      var baseCh = base.ch, headCh = head.ch;\n\n      var dir = ranges[index].head.ch - baseCh;\n      var newDir = headCh - baseCh;\n      if (dir > 0 && newDir <= 0) {\n        baseCh++;\n        if (!isClipped) { headCh--; }\n      } else if (dir < 0 && newDir >= 0) {\n        baseCh--;\n        if (!wasClipped) { headCh++; }\n      } else if (dir < 0 && newDir == -1) {\n        baseCh--;\n        headCh++;\n      }\n      for (var line = firstLine; line <= lastLine; line++) {\n        var range = {anchor: new Pos(line, baseCh), head: new Pos(line, headCh)};\n        selections.push(range);\n      }\n      primIndex = head.line == lastLine ? selections.length - 1 : 0;\n      cm.setSelections(selections);\n      selectionEnd.ch = headCh;\n      base.ch = baseCh;\n      return base;\n    }\n    function selectForInsert(cm, head, height) {\n      var sel = [];\n      for (var i = 0; i < height; i++) {\n        var lineHead = offsetCursor(head, i, 0);\n        sel.push({anchor: lineHead, head: lineHead});\n      }\n      cm.setSelections(sel, 0);\n    }\n    // getIndex returns the index of the cursor in the selections.\n    function getIndex(ranges, cursor, end) {\n      for (var i = 0; i < ranges.length; i++) {\n        var atAnchor = end != 'head' && cursorEqual(ranges[i].anchor, cursor);\n        var atHead = end != 'anchor' && cursorEqual(ranges[i].head, cursor);\n        if (atAnchor || atHead) {\n          return i;\n        }\n      }\n      return -1;\n    }\n    function getSelectedAreaRange(cm, vim) {\n      var lastSelection = vim.lastSelection;\n      var getCurrentSelectedAreaRange = function() {\n        var selections = cm.listSelections();\n        var start =  selections[0];\n        var end = selections[selections.length-1];\n        var selectionStart = cursorIsBefore(start.anchor, start.head) ? start.anchor : start.head;\n        var selectionEnd = cursorIsBefore(end.anchor, end.head) ? end.head : end.anchor;\n        return [selectionStart, selectionEnd];\n      };\n      var getLastSelectedAreaRange = function() {\n        var selectionStart = cm.getCursor();\n        var selectionEnd = cm.getCursor();\n        var block = lastSelection.visualBlock;\n        if (block) {\n          var width = block.width;\n          var height = block.height;\n          selectionEnd = Pos(selectionStart.line + height, selectionStart.ch + width);\n          var selections = [];\n          // selectBlock creates a 'proper' rectangular block.\n          // We do not want that in all cases, so we manually set selections.\n          for (var i = selectionStart.line; i < selectionEnd.line; i++) {\n            var anchor = Pos(i, selectionStart.ch);\n            var head = Pos(i, selectionEnd.ch);\n            var range = {anchor: anchor, head: head};\n            selections.push(range);\n          }\n          cm.setSelections(selections);\n        } else {\n          var start = lastSelection.anchorMark.find();\n          var end = lastSelection.headMark.find();\n          var line = end.line - start.line;\n          var ch = end.ch - start.ch;\n          selectionEnd = {line: selectionEnd.line + line, ch: line ? selectionEnd.ch : ch + selectionEnd.ch};\n          if (lastSelection.visualLine) {\n            selectionStart = Pos(selectionStart.line, 0);\n            selectionEnd = Pos(selectionEnd.line, lineLength(cm, selectionEnd.line));\n          }\n          cm.setSelection(selectionStart, selectionEnd);\n        }\n        return [selectionStart, selectionEnd];\n      };\n      if (!vim.visualMode) {\n      // In case of replaying the action.\n        return getLastSelectedAreaRange();\n      } else {\n        return getCurrentSelectedAreaRange();\n      }\n    }\n    // Updates the previous selection with the current selection's values. This\n    // should only be called in visual mode.\n    function updateLastSelection(cm, vim) {\n      var anchor = vim.sel.anchor;\n      var head = vim.sel.head;\n      // To accommodate the effect of lastPastedText in the last selection\n      if (vim.lastPastedText) {\n        head = cm.posFromIndex(cm.indexFromPos(anchor) + vim.lastPastedText.length);\n        vim.lastPastedText = null;\n      }\n      vim.lastSelection = {'anchorMark': cm.setBookmark(anchor),\n                           'headMark': cm.setBookmark(head),\n                           'anchor': copyCursor(anchor),\n                           'head': copyCursor(head),\n                           'visualMode': vim.visualMode,\n                           'visualLine': vim.visualLine,\n                           'visualBlock': vim.visualBlock};\n    }\n    function expandSelection(cm, start, end) {\n      var sel = cm.state.vim.sel;\n      var head = sel.head;\n      var anchor = sel.anchor;\n      var tmp;\n      if (cursorIsBefore(end, start)) {\n        tmp = end;\n        end = start;\n        start = tmp;\n      }\n      if (cursorIsBefore(head, anchor)) {\n        head = cursorMin(start, head);\n        anchor = cursorMax(anchor, end);\n      } else {\n        anchor = cursorMin(start, anchor);\n        head = cursorMax(head, end);\n        head = offsetCursor(head, 0, -1);\n        if (head.ch == -1 && head.line != cm.firstLine()) {\n          head = Pos(head.line - 1, lineLength(cm, head.line - 1));\n        }\n      }\n      return [anchor, head];\n    }\n    /**\n     * Updates the CodeMirror selection to match the provided vim selection.\n     * If no arguments are given, it uses the current vim selection state.\n     */\n    function updateCmSelection(cm, sel, mode) {\n      var vim = cm.state.vim;\n      sel = sel || vim.sel;\n      var mode = mode ||\n        vim.visualLine ? 'line' : vim.visualBlock ? 'block' : 'char';\n      var cmSel = makeCmSelection(cm, sel, mode);\n      cm.setSelections(cmSel.ranges, cmSel.primary);\n      updateFakeCursor(cm);\n    }\n    function makeCmSelection(cm, sel, mode, exclusive) {\n      var head = copyCursor(sel.head);\n      var anchor = copyCursor(sel.anchor);\n      if (mode == 'char') {\n        var headOffset = !exclusive && !cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;\n        var anchorOffset = cursorIsBefore(sel.head, sel.anchor) ? 1 : 0;\n        head = offsetCursor(sel.head, 0, headOffset);\n        anchor = offsetCursor(sel.anchor, 0, anchorOffset);\n        return {\n          ranges: [{anchor: anchor, head: head}],\n          primary: 0\n        };\n      } else if (mode == 'line') {\n        if (!cursorIsBefore(sel.head, sel.anchor)) {\n          anchor.ch = 0;\n\n          var lastLine = cm.lastLine();\n          if (head.line > lastLine) {\n            head.line = lastLine;\n          }\n          head.ch = lineLength(cm, head.line);\n        } else {\n          head.ch = 0;\n          anchor.ch = lineLength(cm, anchor.line);\n        }\n        return {\n          ranges: [{anchor: anchor, head: head}],\n          primary: 0\n        };\n      } else if (mode == 'block') {\n        var top = Math.min(anchor.line, head.line),\n            left = Math.min(anchor.ch, head.ch),\n            bottom = Math.max(anchor.line, head.line),\n            right = Math.max(anchor.ch, head.ch) + 1;\n        var height = bottom - top + 1;\n        var primary = head.line == top ? 0 : height - 1;\n        var ranges = [];\n        for (var i = 0; i < height; i++) {\n          ranges.push({\n            anchor: Pos(top + i, left),\n            head: Pos(top + i, right)\n          });\n        }\n        return {\n          ranges: ranges,\n          primary: primary\n        };\n      }\n    }\n    function getHead(cm) {\n      var cur = cm.getCursor('head');\n      if (cm.getSelection().length == 1) {\n        // Small corner case when only 1 character is selected. The \"real\"\n        // head is the left of head and anchor.\n        cur = cursorMin(cur, cm.getCursor('anchor'));\n      }\n      return cur;\n    }\n\n    /**\n     * If moveHead is set to false, the CodeMirror selection will not be\n     * touched. The caller assumes the responsibility of putting the cursor\n    * in the right place.\n     */\n    function exitVisualMode(cm, moveHead) {\n      var vim = cm.state.vim;\n      if (moveHead !== false) {\n        cm.setCursor(clipCursorToContent(cm, vim.sel.head));\n      }\n      updateLastSelection(cm, vim);\n      vim.visualMode = false;\n      vim.visualLine = false;\n      vim.visualBlock = false;\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      if (vim.fakeCursor) {\n        vim.fakeCursor.clear();\n      }\n    }\n\n    // Remove any trailing newlines from the selection. For\n    // example, with the caret at the start of the last word on the line,\n    // 'dw' should word, but not the newline, while 'w' should advance the\n    // caret to the first character of the next line.\n    function clipToLine(cm, curStart, curEnd) {\n      var selection = cm.getRange(curStart, curEnd);\n      // Only clip if the selection ends with trailing newline + whitespace\n      if (/\\n\\s*$/.test(selection)) {\n        var lines = selection.split('\\n');\n        // We know this is all whitespace.\n        lines.pop();\n\n        // Cases:\n        // 1. Last word is an empty line - do not clip the trailing '\\n'\n        // 2. Last word is not an empty line - clip the trailing '\\n'\n        var line;\n        // Find the line containing the last word, and clip all whitespace up\n        // to it.\n        for (var line = lines.pop(); lines.length > 0 && line && isWhiteSpaceString(line); line = lines.pop()) {\n          curEnd.line--;\n          curEnd.ch = 0;\n        }\n        // If the last word is not an empty line, clip an additional newline\n        if (line) {\n          curEnd.line--;\n          curEnd.ch = lineLength(cm, curEnd.line);\n        } else {\n          curEnd.ch = 0;\n        }\n      }\n    }\n\n    // Expand the selection to line ends.\n    function expandSelectionToLine(_cm, curStart, curEnd) {\n      curStart.ch = 0;\n      curEnd.ch = 0;\n      curEnd.line++;\n    }\n\n    function findFirstNonWhiteSpaceCharacter(text) {\n      if (!text) {\n        return 0;\n      }\n      var firstNonWS = text.search(/\\S/);\n      return firstNonWS == -1 ? text.length : firstNonWS;\n    }\n\n    function expandWordUnderCursor(cm, inclusive, _forward, bigWord, noSymbol) {\n      var cur = getHead(cm);\n      var line = cm.getLine(cur.line);\n      var idx = cur.ch;\n\n      // Seek to first word or non-whitespace character, depending on if\n      // noSymbol is true.\n      var test = noSymbol ? wordCharTest[0] : bigWordCharTest [0];\n      while (!test(line.charAt(idx))) {\n        idx++;\n        if (idx >= line.length) { return null; }\n      }\n\n      if (bigWord) {\n        test = bigWordCharTest[0];\n      } else {\n        test = wordCharTest[0];\n        if (!test(line.charAt(idx))) {\n          test = wordCharTest[1];\n        }\n      }\n\n      var end = idx, start = idx;\n      while (test(line.charAt(end)) && end < line.length) { end++; }\n      while (test(line.charAt(start)) && start >= 0) { start--; }\n      start++;\n\n      if (inclusive) {\n        // If present, include all whitespace after word.\n        // Otherwise, include all whitespace before word, except indentation.\n        var wordEnd = end;\n        while (/\\s/.test(line.charAt(end)) && end < line.length) { end++; }\n        if (wordEnd == end) {\n          var wordStart = start;\n          while (/\\s/.test(line.charAt(start - 1)) && start > 0) { start--; }\n          if (!start) { start = wordStart; }\n        }\n      }\n      return { start: Pos(cur.line, start), end: Pos(cur.line, end) };\n    }\n\n    function recordJumpPosition(cm, oldCur, newCur) {\n      if (!cursorEqual(oldCur, newCur)) {\n        vimGlobalState.jumpList.add(cm, oldCur, newCur);\n      }\n    }\n\n    function recordLastCharacterSearch(increment, args) {\n        vimGlobalState.lastCharacterSearch.increment = increment;\n        vimGlobalState.lastCharacterSearch.forward = args.forward;\n        vimGlobalState.lastCharacterSearch.selectedCharacter = args.selectedCharacter;\n    }\n\n    var symbolToMode = {\n        '(': 'bracket', ')': 'bracket', '{': 'bracket', '}': 'bracket',\n        '[': 'section', ']': 'section',\n        '*': 'comment', '/': 'comment',\n        'm': 'method', 'M': 'method',\n        '#': 'preprocess'\n    };\n    var findSymbolModes = {\n      bracket: {\n        isComplete: function(state) {\n          if (state.nextCh === state.symb) {\n            state.depth++;\n            if (state.depth >= 1)return true;\n          } else if (state.nextCh === state.reverseSymb) {\n            state.depth--;\n          }\n          return false;\n        }\n      },\n      section: {\n        init: function(state) {\n          state.curMoveThrough = true;\n          state.symb = (state.forward ? ']' : '[') === state.symb ? '{' : '}';\n        },\n        isComplete: function(state) {\n          return state.index === 0 && state.nextCh === state.symb;\n        }\n      },\n      comment: {\n        isComplete: function(state) {\n          var found = state.lastCh === '*' && state.nextCh === '/';\n          state.lastCh = state.nextCh;\n          return found;\n        }\n      },\n      // TODO: The original Vim implementation only operates on level 1 and 2.\n      // The current implementation doesn't check for code block level and\n      // therefore it operates on any levels.\n      method: {\n        init: function(state) {\n          state.symb = (state.symb === 'm' ? '{' : '}');\n          state.reverseSymb = state.symb === '{' ? '}' : '{';\n        },\n        isComplete: function(state) {\n          if (state.nextCh === state.symb)return true;\n          return false;\n        }\n      },\n      preprocess: {\n        init: function(state) {\n          state.index = 0;\n        },\n        isComplete: function(state) {\n          if (state.nextCh === '#') {\n            var token = state.lineText.match(/#(\\w+)/)[1];\n            if (token === 'endif') {\n              if (state.forward && state.depth === 0) {\n                return true;\n              }\n              state.depth++;\n            } else if (token === 'if') {\n              if (!state.forward && state.depth === 0) {\n                return true;\n              }\n              state.depth--;\n            }\n            if (token === 'else' && state.depth === 0)return true;\n          }\n          return false;\n        }\n      }\n    };\n    function findSymbol(cm, repeat, forward, symb) {\n      var cur = copyCursor(cm.getCursor());\n      var increment = forward ? 1 : -1;\n      var endLine = forward ? cm.lineCount() : -1;\n      var curCh = cur.ch;\n      var line = cur.line;\n      var lineText = cm.getLine(line);\n      var state = {\n        lineText: lineText,\n        nextCh: lineText.charAt(curCh),\n        lastCh: null,\n        index: curCh,\n        symb: symb,\n        reverseSymb: (forward ?  { ')': '(', '}': '{' } : { '(': ')', '{': '}' })[symb],\n        forward: forward,\n        depth: 0,\n        curMoveThrough: false\n      };\n      var mode = symbolToMode[symb];\n      if (!mode)return cur;\n      var init = findSymbolModes[mode].init;\n      var isComplete = findSymbolModes[mode].isComplete;\n      if (init) { init(state); }\n      while (line !== endLine && repeat) {\n        state.index += increment;\n        state.nextCh = state.lineText.charAt(state.index);\n        if (!state.nextCh) {\n          line += increment;\n          state.lineText = cm.getLine(line) || '';\n          if (increment > 0) {\n            state.index = 0;\n          } else {\n            var lineLen = state.lineText.length;\n            state.index = (lineLen > 0) ? (lineLen-1) : 0;\n          }\n          state.nextCh = state.lineText.charAt(state.index);\n        }\n        if (isComplete(state)) {\n          cur.line = line;\n          cur.ch = state.index;\n          repeat--;\n        }\n      }\n      if (state.nextCh || state.curMoveThrough) {\n        return Pos(line, state.index);\n      }\n      return cur;\n    }\n\n    /**\n     * Returns the boundaries of the next word. If the cursor in the middle of\n     * the word, then returns the boundaries of the current word, starting at\n     * the cursor. If the cursor is at the start/end of a word, and we are going\n     * forward/backward, respectively, find the boundaries of the next word.\n     *\n     * @param {CodeMirror} cm CodeMirror object.\n     * @param {Cursor} cur The cursor position.\n     * @param {boolean} forward True to search forward. False to search\n     *     backward.\n     * @param {boolean} bigWord True if punctuation count as part of the word.\n     *     False if only [a-zA-Z0-9] characters count as part of the word.\n     * @param {boolean} emptyLineIsWord True if empty lines should be treated\n     *     as words.\n     * @return {Object{from:number, to:number, line: number}} The boundaries of\n     *     the word, or null if there are no more words.\n     */\n    function findWord(cm, cur, forward, bigWord, emptyLineIsWord) {\n      var lineNum = cur.line;\n      var pos = cur.ch;\n      var line = cm.getLine(lineNum);\n      var dir = forward ? 1 : -1;\n      var charTests = bigWord ? bigWordCharTest: wordCharTest;\n\n      if (emptyLineIsWord && line == '') {\n        lineNum += dir;\n        line = cm.getLine(lineNum);\n        if (!isLine(cm, lineNum)) {\n          return null;\n        }\n        pos = (forward) ? 0 : line.length;\n      }\n\n      while (true) {\n        if (emptyLineIsWord && line == '') {\n          return { from: 0, to: 0, line: lineNum };\n        }\n        var stop = (dir > 0) ? line.length : -1;\n        var wordStart = stop, wordEnd = stop;\n        // Find bounds of next word.\n        while (pos != stop) {\n          var foundWord = false;\n          for (var i = 0; i < charTests.length && !foundWord; ++i) {\n            if (charTests[i](line.charAt(pos))) {\n              wordStart = pos;\n              // Advance to end of word.\n              while (pos != stop && charTests[i](line.charAt(pos))) {\n                pos += dir;\n              }\n              wordEnd = pos;\n              foundWord = wordStart != wordEnd;\n              if (wordStart == cur.ch && lineNum == cur.line &&\n                  wordEnd == wordStart + dir) {\n                // We started at the end of a word. Find the next one.\n                continue;\n              } else {\n                return {\n                  from: Math.min(wordStart, wordEnd + 1),\n                  to: Math.max(wordStart, wordEnd),\n                  line: lineNum };\n              }\n            }\n          }\n          if (!foundWord) {\n            pos += dir;\n          }\n        }\n        // Advance to next/prev line.\n        lineNum += dir;\n        if (!isLine(cm, lineNum)) {\n          return null;\n        }\n        line = cm.getLine(lineNum);\n        pos = (dir > 0) ? 0 : line.length;\n      }\n    }\n\n    /**\n     * @param {CodeMirror} cm CodeMirror object.\n     * @param {Pos} cur The position to start from.\n     * @param {int} repeat Number of words to move past.\n     * @param {boolean} forward True to search forward. False to search\n     *     backward.\n     * @param {boolean} wordEnd True to move to end of word. False to move to\n     *     beginning of word.\n     * @param {boolean} bigWord True if punctuation count as part of the word.\n     *     False if only alphabet characters count as part of the word.\n     * @return {Cursor} The position the cursor should move to.\n     */\n    function moveToWord(cm, cur, repeat, forward, wordEnd, bigWord) {\n      var curStart = copyCursor(cur);\n      var words = [];\n      if (forward && !wordEnd || !forward && wordEnd) {\n        repeat++;\n      }\n      // For 'e', empty lines are not considered words, go figure.\n      var emptyLineIsWord = !(forward && wordEnd);\n      for (var i = 0; i < repeat; i++) {\n        var word = findWord(cm, cur, forward, bigWord, emptyLineIsWord);\n        if (!word) {\n          var eodCh = lineLength(cm, cm.lastLine());\n          words.push(forward\n              ? {line: cm.lastLine(), from: eodCh, to: eodCh}\n              : {line: 0, from: 0, to: 0});\n          break;\n        }\n        words.push(word);\n        cur = Pos(word.line, forward ? (word.to - 1) : word.from);\n      }\n      var shortCircuit = words.length != repeat;\n      var firstWord = words[0];\n      var lastWord = words.pop();\n      if (forward && !wordEnd) {\n        // w\n        if (!shortCircuit && (firstWord.from != curStart.ch || firstWord.line != curStart.line)) {\n          // We did not start in the middle of a word. Discard the extra word at the end.\n          lastWord = words.pop();\n        }\n        return Pos(lastWord.line, lastWord.from);\n      } else if (forward && wordEnd) {\n        return Pos(lastWord.line, lastWord.to - 1);\n      } else if (!forward && wordEnd) {\n        // ge\n        if (!shortCircuit && (firstWord.to != curStart.ch || firstWord.line != curStart.line)) {\n          // We did not start in the middle of a word. Discard the extra word at the end.\n          lastWord = words.pop();\n        }\n        return Pos(lastWord.line, lastWord.to);\n      } else {\n        // b\n        return Pos(lastWord.line, lastWord.from);\n      }\n    }\n\n    function moveToCharacter(cm, repeat, forward, character) {\n      var cur = cm.getCursor();\n      var start = cur.ch;\n      var idx;\n      for (var i = 0; i < repeat; i ++) {\n        var line = cm.getLine(cur.line);\n        idx = charIdxInLine(start, line, character, forward, true);\n        if (idx == -1) {\n          return null;\n        }\n        start = idx;\n      }\n      return Pos(cm.getCursor().line, idx);\n    }\n\n    function moveToColumn(cm, repeat) {\n      // repeat is always >= 1, so repeat - 1 always corresponds\n      // to the column we want to go to.\n      var line = cm.getCursor().line;\n      return clipCursorToContent(cm, Pos(line, repeat - 1));\n    }\n\n    function updateMark(cm, vim, markName, pos) {\n      if (!inArray(markName, validMarks)) {\n        return;\n      }\n      if (vim.marks[markName]) {\n        vim.marks[markName].clear();\n      }\n      vim.marks[markName] = cm.setBookmark(pos);\n    }\n\n    function charIdxInLine(start, line, character, forward, includeChar) {\n      // Search for char in line.\n      // motion_options: {forward, includeChar}\n      // If includeChar = true, include it too.\n      // If forward = true, search forward, else search backwards.\n      // If char is not found on this line, do nothing\n      var idx;\n      if (forward) {\n        idx = line.indexOf(character, start + 1);\n        if (idx != -1 && !includeChar) {\n          idx -= 1;\n        }\n      } else {\n        idx = line.lastIndexOf(character, start - 1);\n        if (idx != -1 && !includeChar) {\n          idx += 1;\n        }\n      }\n      return idx;\n    }\n\n    function findParagraph(cm, head, repeat, dir, inclusive) {\n      var line = head.line;\n      var min = cm.firstLine();\n      var max = cm.lastLine();\n      var start, end, i = line;\n      function isEmpty(i) { return !cm.getLine(i); }\n      function isBoundary(i, dir, any) {\n        if (any) { return isEmpty(i) != isEmpty(i + dir); }\n        return !isEmpty(i) && isEmpty(i + dir);\n      }\n      if (dir) {\n        while (min <= i && i <= max && repeat > 0) {\n          if (isBoundary(i, dir)) { repeat--; }\n          i += dir;\n        }\n        return new Pos(i, 0);\n      }\n\n      var vim = cm.state.vim;\n      if (vim.visualLine && isBoundary(line, 1, true)) {\n        var anchor = vim.sel.anchor;\n        if (isBoundary(anchor.line, -1, true)) {\n          if (!inclusive || anchor.line != line) {\n            line += 1;\n          }\n        }\n      }\n      var startState = isEmpty(line);\n      for (i = line; i <= max && repeat; i++) {\n        if (isBoundary(i, 1, true)) {\n          if (!inclusive || isEmpty(i) != startState) {\n            repeat--;\n          }\n        }\n      }\n      end = new Pos(i, 0);\n      // select boundary before paragraph for the last one\n      if (i > max && !startState) { startState = true; }\n      else { inclusive = false; }\n      for (i = line; i > min; i--) {\n        if (!inclusive || isEmpty(i) == startState || i == line) {\n          if (isBoundary(i, -1, true)) { break; }\n        }\n      }\n      start = new Pos(i, 0);\n      return { start: start, end: end };\n    }\n\n    // TODO: perhaps this finagling of start and end positions belonds\n    // in codemirror/replaceRange?\n    function selectCompanionObject(cm, head, symb, inclusive) {\n      var cur = head, start, end;\n\n      var bracketRegexp = ({\n        '(': /[()]/, ')': /[()]/,\n        '[': /[[\\]]/, ']': /[[\\]]/,\n        '{': /[{}]/, '}': /[{}]/})[symb];\n      var openSym = ({\n        '(': '(', ')': '(',\n        '[': '[', ']': '[',\n        '{': '{', '}': '{'})[symb];\n      var curChar = cm.getLine(cur.line).charAt(cur.ch);\n      // Due to the behavior of scanForBracket, we need to add an offset if the\n      // cursor is on a matching open bracket.\n      var offset = curChar === openSym ? 1 : 0;\n\n      start = cm.scanForBracket(Pos(cur.line, cur.ch + offset), -1, null, {'bracketRegex': bracketRegexp});\n      end = cm.scanForBracket(Pos(cur.line, cur.ch + offset), 1, null, {'bracketRegex': bracketRegexp});\n\n      if (!start || !end) {\n        return { start: cur, end: cur };\n      }\n\n      start = start.pos;\n      end = end.pos;\n\n      if ((start.line == end.line && start.ch > end.ch)\n          || (start.line > end.line)) {\n        var tmp = start;\n        start = end;\n        end = tmp;\n      }\n\n      if (inclusive) {\n        end.ch += 1;\n      } else {\n        start.ch += 1;\n      }\n\n      return { start: start, end: end };\n    }\n\n    // Takes in a symbol and a cursor and tries to simulate text objects that\n    // have identical opening and closing symbols\n    // TODO support across multiple lines\n    function findBeginningAndEnd(cm, head, symb, inclusive) {\n      var cur = copyCursor(head);\n      var line = cm.getLine(cur.line);\n      var chars = line.split('');\n      var start, end, i, len;\n      var firstIndex = chars.indexOf(symb);\n\n      // the decision tree is to always look backwards for the beginning first,\n      // but if the cursor is in front of the first instance of the symb,\n      // then move the cursor forward\n      if (cur.ch < firstIndex) {\n        cur.ch = firstIndex;\n        // Why is this line even here???\n        // cm.setCursor(cur.line, firstIndex+1);\n      }\n      // otherwise if the cursor is currently on the closing symbol\n      else if (firstIndex < cur.ch && chars[cur.ch] == symb) {\n        end = cur.ch; // assign end to the current cursor\n        --cur.ch; // make sure to look backwards\n      }\n\n      // if we're currently on the symbol, we've got a start\n      if (chars[cur.ch] == symb && !end) {\n        start = cur.ch + 1; // assign start to ahead of the cursor\n      } else {\n        // go backwards to find the start\n        for (i = cur.ch; i > -1 && !start; i--) {\n          if (chars[i] == symb) {\n            start = i + 1;\n          }\n        }\n      }\n\n      // look forwards for the end symbol\n      if (start && !end) {\n        for (i = start, len = chars.length; i < len && !end; i++) {\n          if (chars[i] == symb) {\n            end = i;\n          }\n        }\n      }\n\n      // nothing found\n      if (!start || !end) {\n        return { start: cur, end: cur };\n      }\n\n      // include the symbols\n      if (inclusive) {\n        --start; ++end;\n      }\n\n      return {\n        start: Pos(cur.line, start),\n        end: Pos(cur.line, end)\n      };\n    }\n\n    // Search functions\n    defineOption('pcre', true, 'boolean');\n    function SearchState() {}\n    SearchState.prototype = {\n      getQuery: function() {\n        return vimGlobalState.query;\n      },\n      setQuery: function(query) {\n        vimGlobalState.query = query;\n      },\n      getOverlay: function() {\n        return this.searchOverlay;\n      },\n      setOverlay: function(overlay) {\n        this.searchOverlay = overlay;\n      },\n      isReversed: function() {\n        return vimGlobalState.isReversed;\n      },\n      setReversed: function(reversed) {\n        vimGlobalState.isReversed = reversed;\n      },\n      getScrollbarAnnotate: function() {\n        return this.annotate;\n      },\n      setScrollbarAnnotate: function(annotate) {\n        this.annotate = annotate;\n      }\n    };\n    function getSearchState(cm) {\n      var vim = cm.state.vim;\n      return vim.searchState_ || (vim.searchState_ = new SearchState());\n    }\n    function dialog(cm, template, shortText, onClose, options) {\n      if (cm.openDialog) {\n        cm.openDialog(template, onClose, { bottom: true, value: options.value,\n            onKeyDown: options.onKeyDown, onKeyUp: options.onKeyUp,\n            selectValueOnOpen: false});\n      }\n      else {\n        onClose(prompt(shortText, ''));\n      }\n    }\n    function splitBySlash(argString) {\n      var slashes = findUnescapedSlashes(argString) || [];\n      if (!slashes.length) return [];\n      var tokens = [];\n      // in case of strings like foo/bar\n      if (slashes[0] !== 0) return;\n      for (var i = 0; i < slashes.length; i++) {\n        if (typeof slashes[i] == 'number')\n          tokens.push(argString.substring(slashes[i] + 1, slashes[i+1]));\n      }\n      return tokens;\n    }\n\n    function findUnescapedSlashes(str) {\n      var escapeNextChar = false;\n      var slashes = [];\n      for (var i = 0; i < str.length; i++) {\n        var c = str.charAt(i);\n        if (!escapeNextChar && c == '/') {\n          slashes.push(i);\n        }\n        escapeNextChar = !escapeNextChar && (c == '\\\\');\n      }\n      return slashes;\n    }\n\n    // Translates a search string from ex (vim) syntax into javascript form.\n    function translateRegex(str) {\n      // When these match, add a '\\' if unescaped or remove one if escaped.\n      var specials = '|(){';\n      // Remove, but never add, a '\\' for these.\n      var unescape = '}';\n      var escapeNextChar = false;\n      var out = [];\n      for (var i = -1; i < str.length; i++) {\n        var c = str.charAt(i) || '';\n        var n = str.charAt(i+1) || '';\n        var specialComesNext = (n && specials.indexOf(n) != -1);\n        if (escapeNextChar) {\n          if (c !== '\\\\' || !specialComesNext) {\n            out.push(c);\n          }\n          escapeNextChar = false;\n        } else {\n          if (c === '\\\\') {\n            escapeNextChar = true;\n            // Treat the unescape list as special for removing, but not adding '\\'.\n            if (n && unescape.indexOf(n) != -1) {\n              specialComesNext = true;\n            }\n            // Not passing this test means removing a '\\'.\n            if (!specialComesNext || n === '\\\\') {\n              out.push(c);\n            }\n          } else {\n            out.push(c);\n            if (specialComesNext && n !== '\\\\') {\n              out.push('\\\\');\n            }\n          }\n        }\n      }\n      return out.join('');\n    }\n\n    // Translates the replace part of a search and replace from ex (vim) syntax into\n    // javascript form.  Similar to translateRegex, but additionally fixes back references\n    // (translates '\\[0..9]' to '$[0..9]') and follows different rules for escaping '$'.\n    var charUnescapes = {'\\\\n': '\\n', '\\\\r': '\\r', '\\\\t': '\\t'};\n    function translateRegexReplace(str) {\n      var escapeNextChar = false;\n      var out = [];\n      for (var i = -1; i < str.length; i++) {\n        var c = str.charAt(i) || '';\n        var n = str.charAt(i+1) || '';\n        if (charUnescapes[c + n]) {\n          out.push(charUnescapes[c+n]);\n          i++;\n        } else if (escapeNextChar) {\n          // At any point in the loop, escapeNextChar is true if the previous\n          // character was a '\\' and was not escaped.\n          out.push(c);\n          escapeNextChar = false;\n        } else {\n          if (c === '\\\\') {\n            escapeNextChar = true;\n            if ((isNumber(n) || n === '$')) {\n              out.push('$');\n            } else if (n !== '/' && n !== '\\\\') {\n              out.push('\\\\');\n            }\n          } else {\n            if (c === '$') {\n              out.push('$');\n            }\n            out.push(c);\n            if (n === '/') {\n              out.push('\\\\');\n            }\n          }\n        }\n      }\n      return out.join('');\n    }\n\n    // Unescape \\ and / in the replace part, for PCRE mode.\n    var unescapes = {'\\\\/': '/', '\\\\\\\\': '\\\\', '\\\\n': '\\n', '\\\\r': '\\r', '\\\\t': '\\t'};\n    function unescapeRegexReplace(str) {\n      var stream = new CodeMirror.StringStream(str);\n      var output = [];\n      while (!stream.eol()) {\n        // Search for \\.\n        while (stream.peek() && stream.peek() != '\\\\') {\n          output.push(stream.next());\n        }\n        var matched = false;\n        for (var matcher in unescapes) {\n          if (stream.match(matcher, true)) {\n            matched = true;\n            output.push(unescapes[matcher]);\n            break;\n          }\n        }\n        if (!matched) {\n          // Don't change anything\n          output.push(stream.next());\n        }\n      }\n      return output.join('');\n    }\n\n    /**\n     * Extract the regular expression from the query and return a Regexp object.\n     * Returns null if the query is blank.\n     * If ignoreCase is passed in, the Regexp object will have the 'i' flag set.\n     * If smartCase is passed in, and the query contains upper case letters,\n     *   then ignoreCase is overridden, and the 'i' flag will not be set.\n     * If the query contains the /i in the flag part of the regular expression,\n     *   then both ignoreCase and smartCase are ignored, and 'i' will be passed\n     *   through to the Regex object.\n     */\n    function parseQuery(query, ignoreCase, smartCase) {\n      // First update the last search register\n      var lastSearchRegister = vimGlobalState.registerController.getRegister('/');\n      lastSearchRegister.setText(query);\n      // Check if the query is already a regex.\n      if (query instanceof RegExp) { return query; }\n      // First try to extract regex + flags from the input. If no flags found,\n      // extract just the regex. IE does not accept flags directly defined in\n      // the regex string in the form /regex/flags\n      var slashes = findUnescapedSlashes(query);\n      var regexPart;\n      var forceIgnoreCase;\n      if (!slashes.length) {\n        // Query looks like 'regexp'\n        regexPart = query;\n      } else {\n        // Query looks like 'regexp/...'\n        regexPart = query.substring(0, slashes[0]);\n        var flagsPart = query.substring(slashes[0]);\n        forceIgnoreCase = (flagsPart.indexOf('i') != -1);\n      }\n      if (!regexPart) {\n        return null;\n      }\n      if (!getOption('pcre')) {\n        regexPart = translateRegex(regexPart);\n      }\n      if (smartCase) {\n        ignoreCase = (/^[^A-Z]*$/).test(regexPart);\n      }\n      var regexp = new RegExp(regexPart,\n          (ignoreCase || forceIgnoreCase) ? 'i' : undefined);\n      return regexp;\n    }\n    function showConfirm(cm, text) {\n      if (cm.openNotification) {\n        cm.openNotification('<span style=\"color: red\">' + text + '</span>',\n                            {bottom: true, duration: 5000});\n      } else {\n        alert(text);\n      }\n    }\n    function makePrompt(prefix, desc) {\n      var raw = '<span style=\"font-family: monospace; white-space: pre\">' +\n          (prefix || \"\") + '<input type=\"text\"></span>';\n      if (desc)\n        raw += ' <span style=\"color: #888\">' + desc + '</span>';\n      return raw;\n    }\n    var searchPromptDesc = '(Javascript regexp)';\n    function showPrompt(cm, options) {\n      var shortText = (options.prefix || '') + ' ' + (options.desc || '');\n      var prompt = makePrompt(options.prefix, options.desc);\n      dialog(cm, prompt, shortText, options.onClose, options);\n    }\n    function regexEqual(r1, r2) {\n      if (r1 instanceof RegExp && r2 instanceof RegExp) {\n          var props = ['global', 'multiline', 'ignoreCase', 'source'];\n          for (var i = 0; i < props.length; i++) {\n              var prop = props[i];\n              if (r1[prop] !== r2[prop]) {\n                  return false;\n              }\n          }\n          return true;\n      }\n      return false;\n    }\n    // Returns true if the query is valid.\n    function updateSearchQuery(cm, rawQuery, ignoreCase, smartCase) {\n      if (!rawQuery) {\n        return;\n      }\n      var state = getSearchState(cm);\n      var query = parseQuery(rawQuery, !!ignoreCase, !!smartCase);\n      if (!query) {\n        return;\n      }\n      highlightSearchMatches(cm, query);\n      if (regexEqual(query, state.getQuery())) {\n        return query;\n      }\n      state.setQuery(query);\n      return query;\n    }\n    function searchOverlay(query) {\n      if (query.source.charAt(0) == '^') {\n        var matchSol = true;\n      }\n      return {\n        token: function(stream) {\n          if (matchSol && !stream.sol()) {\n            stream.skipToEnd();\n            return;\n          }\n          var match = stream.match(query, false);\n          if (match) {\n            if (match[0].length == 0) {\n              // Matched empty string, skip to next.\n              stream.next();\n              return 'searching';\n            }\n            if (!stream.sol()) {\n              // Backtrack 1 to match \\b\n              stream.backUp(1);\n              if (!query.exec(stream.next() + match[0])) {\n                stream.next();\n                return null;\n              }\n            }\n            stream.match(query);\n            return 'searching';\n          }\n          while (!stream.eol()) {\n            stream.next();\n            if (stream.match(query, false)) break;\n          }\n        },\n        query: query\n      };\n    }\n    function highlightSearchMatches(cm, query) {\n      var searchState = getSearchState(cm);\n      var overlay = searchState.getOverlay();\n      if (!overlay || query != overlay.query) {\n        if (overlay) {\n          cm.removeOverlay(overlay);\n        }\n        overlay = searchOverlay(query);\n        cm.addOverlay(overlay);\n        if (cm.showMatchesOnScrollbar) {\n          if (searchState.getScrollbarAnnotate()) {\n            searchState.getScrollbarAnnotate().clear();\n          }\n          searchState.setScrollbarAnnotate(cm.showMatchesOnScrollbar(query));\n        }\n        searchState.setOverlay(overlay);\n      }\n    }\n    function findNext(cm, prev, query, repeat) {\n      if (repeat === undefined) { repeat = 1; }\n      return cm.operation(function() {\n        var pos = cm.getCursor();\n        var cursor = cm.getSearchCursor(query, pos);\n        for (var i = 0; i < repeat; i++) {\n          var found = cursor.find(prev);\n          if (i == 0 && found && cursorEqual(cursor.from(), pos)) { found = cursor.find(prev); }\n          if (!found) {\n            // SearchCursor may have returned null because it hit EOF, wrap\n            // around and try again.\n            cursor = cm.getSearchCursor(query,\n                (prev) ? Pos(cm.lastLine()) : Pos(cm.firstLine(), 0) );\n            if (!cursor.find(prev)) {\n              return;\n            }\n          }\n        }\n        return cursor.from();\n      });\n    }\n    function clearSearchHighlight(cm) {\n      var state = getSearchState(cm);\n      cm.removeOverlay(getSearchState(cm).getOverlay());\n      state.setOverlay(null);\n      if (state.getScrollbarAnnotate()) {\n        state.getScrollbarAnnotate().clear();\n        state.setScrollbarAnnotate(null);\n      }\n    }\n    /**\n     * Check if pos is in the specified range, INCLUSIVE.\n     * Range can be specified with 1 or 2 arguments.\n     * If the first range argument is an array, treat it as an array of line\n     * numbers. Match pos against any of the lines.\n     * If the first range argument is a number,\n     *   if there is only 1 range argument, check if pos has the same line\n     *       number\n     *   if there are 2 range arguments, then check if pos is in between the two\n     *       range arguments.\n     */\n    function isInRange(pos, start, end) {\n      if (typeof pos != 'number') {\n        // Assume it is a cursor position. Get the line number.\n        pos = pos.line;\n      }\n      if (start instanceof Array) {\n        return inArray(pos, start);\n      } else {\n        if (end) {\n          return (pos >= start && pos <= end);\n        } else {\n          return pos == start;\n        }\n      }\n    }\n    function getUserVisibleLines(cm) {\n      var scrollInfo = cm.getScrollInfo();\n      var occludeToleranceTop = 6;\n      var occludeToleranceBottom = 10;\n      var from = cm.coordsChar({left:0, top: occludeToleranceTop + scrollInfo.top}, 'local');\n      var bottomY = scrollInfo.clientHeight - occludeToleranceBottom + scrollInfo.top;\n      var to = cm.coordsChar({left:0, top: bottomY}, 'local');\n      return {top: from.line, bottom: to.line};\n    }\n\n    function getMarkPos(cm, vim, markName) {\n      if (markName == '\\'') {\n        var history = cm.doc.history.done;\n        var event = history[history.length - 2];\n        return event && event.ranges && event.ranges[0].head;\n      }\n\n      var mark = vim.marks[markName];\n      return mark && mark.find();\n    }\n\n    var ExCommandDispatcher = function() {\n      this.buildCommandMap_();\n    };\n    ExCommandDispatcher.prototype = {\n      processCommand: function(cm, input, opt_params) {\n        var that = this;\n        cm.operation(function () {\n          cm.curOp.isVimOp = true;\n          that._processCommand(cm, input, opt_params);\n        });\n      },\n      _processCommand: function(cm, input, opt_params) {\n        var vim = cm.state.vim;\n        var commandHistoryRegister = vimGlobalState.registerController.getRegister(':');\n        var previousCommand = commandHistoryRegister.toString();\n        if (vim.visualMode) {\n          exitVisualMode(cm);\n        }\n        var inputStream = new CodeMirror.StringStream(input);\n        // update \": with the latest command whether valid or invalid\n        commandHistoryRegister.setText(input);\n        var params = opt_params || {};\n        params.input = input;\n        try {\n          this.parseInput_(cm, inputStream, params);\n        } catch(e) {\n          showConfirm(cm, e);\n          throw e;\n        }\n        var command;\n        var commandName;\n        if (!params.commandName) {\n          // If only a line range is defined, move to the line.\n          if (params.line !== undefined) {\n            commandName = 'move';\n          }\n        } else {\n          command = this.matchCommand_(params.commandName);\n          if (command) {\n            commandName = command.name;\n            if (command.excludeFromCommandHistory) {\n              commandHistoryRegister.setText(previousCommand);\n            }\n            this.parseCommandArgs_(inputStream, params, command);\n            if (command.type == 'exToKey') {\n              // Handle Ex to Key mapping.\n              for (var i = 0; i < command.toKeys.length; i++) {\n                CodeMirror.Vim.handleKey(cm, command.toKeys[i], 'mapping');\n              }\n              return;\n            } else if (command.type == 'exToEx') {\n              // Handle Ex to Ex mapping.\n              this.processCommand(cm, command.toInput);\n              return;\n            }\n          }\n        }\n        if (!commandName) {\n          showConfirm(cm, 'Not an editor command \":' + input + '\"');\n          return;\n        }\n        try {\n          exCommands[commandName](cm, params);\n          // Possibly asynchronous commands (e.g. substitute, which might have a\n          // user confirmation), are responsible for calling the callback when\n          // done. All others have it taken care of for them here.\n          if ((!command || !command.possiblyAsync) && params.callback) {\n            params.callback();\n          }\n        } catch(e) {\n          showConfirm(cm, e);\n          throw e;\n        }\n      },\n      parseInput_: function(cm, inputStream, result) {\n        inputStream.eatWhile(':');\n        // Parse range.\n        if (inputStream.eat('%')) {\n          result.line = cm.firstLine();\n          result.lineEnd = cm.lastLine();\n        } else {\n          result.line = this.parseLineSpec_(cm, inputStream);\n          if (result.line !== undefined && inputStream.eat(',')) {\n            result.lineEnd = this.parseLineSpec_(cm, inputStream);\n          }\n        }\n\n        // Parse command name.\n        var commandMatch = inputStream.match(/^(\\w+)/);\n        if (commandMatch) {\n          result.commandName = commandMatch[1];\n        } else {\n          result.commandName = inputStream.match(/.*/)[0];\n        }\n\n        return result;\n      },\n      parseLineSpec_: function(cm, inputStream) {\n        var numberMatch = inputStream.match(/^(\\d+)/);\n        if (numberMatch) {\n          return parseInt(numberMatch[1], 10) - 1;\n        }\n        switch (inputStream.next()) {\n          case '.':\n            return cm.getCursor().line;\n          case '$':\n            return cm.lastLine();\n          case '\\'':\n            var markName = inputStream.next();\n            var markPos = getMarkPos(cm, cm.state.vim, markName);\n            if (!markPos) throw new Error('Mark not set');\n            return markPos.line;\n          default:\n            inputStream.backUp(1);\n            return undefined;\n        }\n      },\n      parseCommandArgs_: function(inputStream, params, command) {\n        if (inputStream.eol()) {\n          return;\n        }\n        params.argString = inputStream.match(/.*/)[0];\n        // Parse command-line arguments\n        var delim = command.argDelimiter || /\\s+/;\n        var args = trim(params.argString).split(delim);\n        if (args.length && args[0]) {\n          params.args = args;\n        }\n      },\n      matchCommand_: function(commandName) {\n        // Return the command in the command map that matches the shortest\n        // prefix of the passed in command name. The match is guaranteed to be\n        // unambiguous if the defaultExCommandMap's shortNames are set up\n        // correctly. (see @code{defaultExCommandMap}).\n        for (var i = commandName.length; i > 0; i--) {\n          var prefix = commandName.substring(0, i);\n          if (this.commandMap_[prefix]) {\n            var command = this.commandMap_[prefix];\n            if (command.name.indexOf(commandName) === 0) {\n              return command;\n            }\n          }\n        }\n        return null;\n      },\n      buildCommandMap_: function() {\n        this.commandMap_ = {};\n        for (var i = 0; i < defaultExCommandMap.length; i++) {\n          var command = defaultExCommandMap[i];\n          var key = command.shortName || command.name;\n          this.commandMap_[key] = command;\n        }\n      },\n      map: function(lhs, rhs, ctx) {\n        if (lhs != ':' && lhs.charAt(0) == ':') {\n          if (ctx) { throw Error('Mode not supported for ex mappings'); }\n          var commandName = lhs.substring(1);\n          if (rhs != ':' && rhs.charAt(0) == ':') {\n            // Ex to Ex mapping\n            this.commandMap_[commandName] = {\n              name: commandName,\n              type: 'exToEx',\n              toInput: rhs.substring(1),\n              user: true\n            };\n          } else {\n            // Ex to key mapping\n            this.commandMap_[commandName] = {\n              name: commandName,\n              type: 'exToKey',\n              toKeys: rhs,\n              user: true\n            };\n          }\n        } else {\n          if (rhs != ':' && rhs.charAt(0) == ':') {\n            // Key to Ex mapping.\n            var mapping = {\n              keys: lhs,\n              type: 'keyToEx',\n              exArgs: { input: rhs.substring(1) }\n            };\n            if (ctx) { mapping.context = ctx; }\n            defaultKeymap.unshift(mapping);\n          } else {\n            // Key to key mapping\n            var mapping = {\n              keys: lhs,\n              type: 'keyToKey',\n              toKeys: rhs\n            };\n            if (ctx) { mapping.context = ctx; }\n            defaultKeymap.unshift(mapping);\n          }\n        }\n      },\n      unmap: function(lhs, ctx) {\n        if (lhs != ':' && lhs.charAt(0) == ':') {\n          // Ex to Ex or Ex to key mapping\n          if (ctx) { throw Error('Mode not supported for ex mappings'); }\n          var commandName = lhs.substring(1);\n          if (this.commandMap_[commandName] && this.commandMap_[commandName].user) {\n            delete this.commandMap_[commandName];\n            return;\n          }\n        } else {\n          // Key to Ex or key to key mapping\n          var keys = lhs;\n          for (var i = 0; i < defaultKeymap.length; i++) {\n            if (keys == defaultKeymap[i].keys\n                && defaultKeymap[i].context === ctx) {\n              defaultKeymap.splice(i, 1);\n              return;\n            }\n          }\n        }\n        throw Error('No such mapping.');\n      }\n    };\n\n    var exCommands = {\n      colorscheme: function(cm, params) {\n        if (!params.args || params.args.length < 1) {\n          showConfirm(cm, cm.getOption('theme'));\n          return;\n        }\n        cm.setOption('theme', params.args[0]);\n      },\n      map: function(cm, params, ctx) {\n        var mapArgs = params.args;\n        if (!mapArgs || mapArgs.length < 2) {\n          if (cm) {\n            showConfirm(cm, 'Invalid mapping: ' + params.input);\n          }\n          return;\n        }\n        exCommandDispatcher.map(mapArgs[0], mapArgs[1], ctx);\n      },\n      imap: function(cm, params) { this.map(cm, params, 'insert'); },\n      nmap: function(cm, params) { this.map(cm, params, 'normal'); },\n      vmap: function(cm, params) { this.map(cm, params, 'visual'); },\n      unmap: function(cm, params, ctx) {\n        var mapArgs = params.args;\n        if (!mapArgs || mapArgs.length < 1) {\n          if (cm) {\n            showConfirm(cm, 'No such mapping: ' + params.input);\n          }\n          return;\n        }\n        exCommandDispatcher.unmap(mapArgs[0], ctx);\n      },\n      move: function(cm, params) {\n        commandDispatcher.processCommand(cm, cm.state.vim, {\n            type: 'motion',\n            motion: 'moveToLineOrEdgeOfDocument',\n            motionArgs: { forward: false, explicitRepeat: true,\n              linewise: true },\n            repeatOverride: params.line+1});\n      },\n      set: function(cm, params) {\n        var setArgs = params.args;\n        // Options passed through to the setOption/getOption calls. May be passed in by the\n        // local/global versions of the set command\n        var setCfg = params.setCfg || {};\n        if (!setArgs || setArgs.length < 1) {\n          if (cm) {\n            showConfirm(cm, 'Invalid mapping: ' + params.input);\n          }\n          return;\n        }\n        var expr = setArgs[0].split('=');\n        var optionName = expr[0];\n        var value = expr[1];\n        var forceGet = false;\n\n        if (optionName.charAt(optionName.length - 1) == '?') {\n          // If post-fixed with ?, then the set is actually a get.\n          if (value) { throw Error('Trailing characters: ' + params.argString); }\n          optionName = optionName.substring(0, optionName.length - 1);\n          forceGet = true;\n        }\n        if (value === undefined && optionName.substring(0, 2) == 'no') {\n          // To set boolean options to false, the option name is prefixed with\n          // 'no'.\n          optionName = optionName.substring(2);\n          value = false;\n        }\n\n        var optionIsBoolean = options[optionName] && options[optionName].type == 'boolean';\n        if (optionIsBoolean && value == undefined) {\n          // Calling set with a boolean option sets it to true.\n          value = true;\n        }\n        // If no value is provided, then we assume this is a get.\n        if (!optionIsBoolean && value === undefined || forceGet) {\n          var oldValue = getOption(optionName, cm, setCfg);\n          if (oldValue === true || oldValue === false) {\n            showConfirm(cm, ' ' + (oldValue ? '' : 'no') + optionName);\n          } else {\n            showConfirm(cm, '  ' + optionName + '=' + oldValue);\n          }\n        } else {\n          setOption(optionName, value, cm, setCfg);\n        }\n      },\n      setlocal: function (cm, params) {\n        // setCfg is passed through to setOption\n        params.setCfg = {scope: 'local'};\n        this.set(cm, params);\n      },\n      setglobal: function (cm, params) {\n        // setCfg is passed through to setOption\n        params.setCfg = {scope: 'global'};\n        this.set(cm, params);\n      },\n      registers: function(cm, params) {\n        var regArgs = params.args;\n        var registers = vimGlobalState.registerController.registers;\n        var regInfo = '----------Registers----------<br><br>';\n        if (!regArgs) {\n          for (var registerName in registers) {\n            var text = registers[registerName].toString();\n            if (text.length) {\n              regInfo += '\"' + registerName + '    ' + text + '<br>';\n            }\n          }\n        } else {\n          var registerName;\n          regArgs = regArgs.join('');\n          for (var i = 0; i < regArgs.length; i++) {\n            registerName = regArgs.charAt(i);\n            if (!vimGlobalState.registerController.isValidRegister(registerName)) {\n              continue;\n            }\n            var register = registers[registerName] || new Register();\n            regInfo += '\"' + registerName + '    ' + register.toString() + '<br>';\n          }\n        }\n        showConfirm(cm, regInfo);\n      },\n      sort: function(cm, params) {\n        var reverse, ignoreCase, unique, number, pattern;\n        function parseArgs() {\n          if (params.argString) {\n            var args = new CodeMirror.StringStream(params.argString);\n            if (args.eat('!')) { reverse = true; }\n            if (args.eol()) { return; }\n            if (!args.eatSpace()) { return 'Invalid arguments'; }\n            var opts = args.match(/([dinuox]+)?\\s*(\\/.+\\/)?\\s*/);\n            if (!opts && !args.eol()) { return 'Invalid arguments'; }\n            if (opts[1]) {\n              ignoreCase = opts[1].indexOf('i') != -1;\n              unique = opts[1].indexOf('u') != -1;\n              var decimal = opts[1].indexOf('d') != -1 || opts[1].indexOf('n') != -1 && 1;\n              var hex = opts[1].indexOf('x') != -1 && 1;\n              var octal = opts[1].indexOf('o') != -1 && 1;\n              if (decimal + hex + octal > 1) { return 'Invalid arguments'; }\n              number = decimal && 'decimal' || hex && 'hex' || octal && 'octal';\n            }\n            if (opts[2]) {\n              pattern = new RegExp(opts[2].substr(1, opts[2].length - 2), ignoreCase ? 'i' : '');\n            }\n          }\n        }\n        var err = parseArgs();\n        if (err) {\n          showConfirm(cm, err + ': ' + params.argString);\n          return;\n        }\n        var lineStart = params.line || cm.firstLine();\n        var lineEnd = params.lineEnd || params.line || cm.lastLine();\n        if (lineStart == lineEnd) { return; }\n        var curStart = Pos(lineStart, 0);\n        var curEnd = Pos(lineEnd, lineLength(cm, lineEnd));\n        var text = cm.getRange(curStart, curEnd).split('\\n');\n        var numberRegex = pattern ? pattern :\n           (number == 'decimal') ? /(-?)([\\d]+)/ :\n           (number == 'hex') ? /(-?)(?:0x)?([0-9a-f]+)/i :\n           (number == 'octal') ? /([0-7]+)/ : null;\n        var radix = (number == 'decimal') ? 10 : (number == 'hex') ? 16 : (number == 'octal') ? 8 : null;\n        var numPart = [], textPart = [];\n        if (number || pattern) {\n          for (var i = 0; i < text.length; i++) {\n            var matchPart = pattern ? text[i].match(pattern) : null;\n            if (matchPart && matchPart[0] != '') {\n              numPart.push(matchPart);\n            } else if (!pattern && numberRegex.exec(text[i])) {\n              numPart.push(text[i]);\n            } else {\n              textPart.push(text[i]);\n            }\n          }\n        } else {\n          textPart = text;\n        }\n        function compareFn(a, b) {\n          if (reverse) { var tmp; tmp = a; a = b; b = tmp; }\n          if (ignoreCase) { a = a.toLowerCase(); b = b.toLowerCase(); }\n          var anum = number && numberRegex.exec(a);\n          var bnum = number && numberRegex.exec(b);\n          if (!anum) { return a < b ? -1 : 1; }\n          anum = parseInt((anum[1] + anum[2]).toLowerCase(), radix);\n          bnum = parseInt((bnum[1] + bnum[2]).toLowerCase(), radix);\n          return anum - bnum;\n        }\n        function comparePatternFn(a, b) {\n          if (reverse) { var tmp; tmp = a; a = b; b = tmp; }\n          if (ignoreCase) { a[0] = a[0].toLowerCase(); b[0] = b[0].toLowerCase(); }\n          return (a[0] < b[0]) ? -1 : 1;\n        }\n        numPart.sort(pattern ? comparePatternFn : compareFn);\n        if (pattern) {\n          for (var i = 0; i < numPart.length; i++) {\n            numPart[i] = numPart[i].input;\n          }\n        } else if (!number) { textPart.sort(compareFn); }\n        text = (!reverse) ? textPart.concat(numPart) : numPart.concat(textPart);\n        if (unique) { // Remove duplicate lines\n          var textOld = text;\n          var lastLine;\n          text = [];\n          for (var i = 0; i < textOld.length; i++) {\n            if (textOld[i] != lastLine) {\n              text.push(textOld[i]);\n            }\n            lastLine = textOld[i];\n          }\n        }\n        cm.replaceRange(text.join('\\n'), curStart, curEnd);\n      },\n      global: function(cm, params) {\n        // a global command is of the form\n        // :[range]g/pattern/[cmd]\n        // argString holds the string /pattern/[cmd]\n        var argString = params.argString;\n        if (!argString) {\n          showConfirm(cm, 'Regular Expression missing from global');\n          return;\n        }\n        // range is specified here\n        var lineStart = (params.line !== undefined) ? params.line : cm.firstLine();\n        var lineEnd = params.lineEnd || params.line || cm.lastLine();\n        // get the tokens from argString\n        var tokens = splitBySlash(argString);\n        var regexPart = argString, cmd;\n        if (tokens.length) {\n          regexPart = tokens[0];\n          cmd = tokens.slice(1, tokens.length).join('/');\n        }\n        if (regexPart) {\n          // If regex part is empty, then use the previous query. Otherwise\n          // use the regex part as the new query.\n          try {\n           updateSearchQuery(cm, regexPart, true /** ignoreCase */,\n             true /** smartCase */);\n          } catch (e) {\n           showConfirm(cm, 'Invalid regex: ' + regexPart);\n           return;\n          }\n        }\n        // now that we have the regexPart, search for regex matches in the\n        // specified range of lines\n        var query = getSearchState(cm).getQuery();\n        var matchedLines = [], content = '';\n        for (var i = lineStart; i <= lineEnd; i++) {\n          var matched = query.test(cm.getLine(i));\n          if (matched) {\n            matchedLines.push(i+1);\n            content+= cm.getLine(i) + '<br>';\n          }\n        }\n        // if there is no [cmd], just display the list of matched lines\n        if (!cmd) {\n          showConfirm(cm, content);\n          return;\n        }\n        var index = 0;\n        var nextCommand = function() {\n          if (index < matchedLines.length) {\n            var command = matchedLines[index] + cmd;\n            exCommandDispatcher.processCommand(cm, command, {\n              callback: nextCommand\n            });\n          }\n          index++;\n        };\n        nextCommand();\n      },\n      substitute: function(cm, params) {\n        if (!cm.getSearchCursor) {\n          throw new Error('Search feature not available. Requires searchcursor.js or ' +\n              'any other getSearchCursor implementation.');\n        }\n        var argString = params.argString;\n        var tokens = argString ? splitBySlash(argString) : [];\n        var regexPart, replacePart = '', trailing, flagsPart, count;\n        var confirm = false; // Whether to confirm each replace.\n        var global = false; // True to replace all instances on a line, false to replace only 1.\n        if (tokens.length) {\n          regexPart = tokens[0];\n          replacePart = tokens[1];\n          if (replacePart !== undefined) {\n            if (getOption('pcre')) {\n              replacePart = unescapeRegexReplace(replacePart);\n            } else {\n              replacePart = translateRegexReplace(replacePart);\n            }\n            vimGlobalState.lastSubstituteReplacePart = replacePart;\n          }\n          trailing = tokens[2] ? tokens[2].split(' ') : [];\n        } else {\n          // either the argString is empty or its of the form ' hello/world'\n          // actually splitBySlash returns a list of tokens\n          // only if the string starts with a '/'\n          if (argString && argString.length) {\n            showConfirm(cm, 'Substitutions should be of the form ' +\n                ':s/pattern/replace/');\n            return;\n          }\n        }\n        // After the 3rd slash, we can have flags followed by a space followed\n        // by count.\n        if (trailing) {\n          flagsPart = trailing[0];\n          count = parseInt(trailing[1]);\n          if (flagsPart) {\n            if (flagsPart.indexOf('c') != -1) {\n              confirm = true;\n              flagsPart.replace('c', '');\n            }\n            if (flagsPart.indexOf('g') != -1) {\n              global = true;\n              flagsPart.replace('g', '');\n            }\n            regexPart = regexPart + '/' + flagsPart;\n          }\n        }\n        if (regexPart) {\n          // If regex part is empty, then use the previous query. Otherwise use\n          // the regex part as the new query.\n          try {\n            updateSearchQuery(cm, regexPart, true /** ignoreCase */,\n              true /** smartCase */);\n          } catch (e) {\n            showConfirm(cm, 'Invalid regex: ' + regexPart);\n            return;\n          }\n        }\n        replacePart = replacePart || vimGlobalState.lastSubstituteReplacePart;\n        if (replacePart === undefined) {\n          showConfirm(cm, 'No previous substitute regular expression');\n          return;\n        }\n        var state = getSearchState(cm);\n        var query = state.getQuery();\n        var lineStart = (params.line !== undefined) ? params.line : cm.getCursor().line;\n        var lineEnd = params.lineEnd || lineStart;\n        if (lineStart == cm.firstLine() && lineEnd == cm.lastLine()) {\n          lineEnd = Infinity;\n        }\n        if (count) {\n          lineStart = lineEnd;\n          lineEnd = lineStart + count - 1;\n        }\n        var startPos = clipCursorToContent(cm, Pos(lineStart, 0));\n        var cursor = cm.getSearchCursor(query, startPos);\n        doReplace(cm, confirm, global, lineStart, lineEnd, cursor, query, replacePart, params.callback);\n      },\n      redo: CodeMirror.commands.redo,\n      undo: CodeMirror.commands.undo,\n      write: function(cm) {\n        if (CodeMirror.commands.save) {\n          // If a save command is defined, call it.\n          CodeMirror.commands.save(cm);\n        } else if (cm.save) {\n          // Saves to text area if no save command is defined and cm.save() is available.\n          cm.save();\n        }\n      },\n      nohlsearch: function(cm) {\n        clearSearchHighlight(cm);\n      },\n      yank: function (cm) {\n        var cur = copyCursor(cm.getCursor());\n        var line = cur.line;\n        var lineText = cm.getLine(line);\n        vimGlobalState.registerController.pushText(\n          '0', 'yank', lineText, true, true);\n      },\n      delmarks: function(cm, params) {\n        if (!params.argString || !trim(params.argString)) {\n          showConfirm(cm, 'Argument required');\n          return;\n        }\n\n        var state = cm.state.vim;\n        var stream = new CodeMirror.StringStream(trim(params.argString));\n        while (!stream.eol()) {\n          stream.eatSpace();\n\n          // Record the streams position at the beginning of the loop for use\n          // in error messages.\n          var count = stream.pos;\n\n          if (!stream.match(/[a-zA-Z]/, false)) {\n            showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n            return;\n          }\n\n          var sym = stream.next();\n          // Check if this symbol is part of a range\n          if (stream.match('-', true)) {\n            // This symbol is part of a range.\n\n            // The range must terminate at an alphabetic character.\n            if (!stream.match(/[a-zA-Z]/, false)) {\n              showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n              return;\n            }\n\n            var startMark = sym;\n            var finishMark = stream.next();\n            // The range must terminate at an alphabetic character which\n            // shares the same case as the start of the range.\n            if (isLowerCase(startMark) && isLowerCase(finishMark) ||\n                isUpperCase(startMark) && isUpperCase(finishMark)) {\n              var start = startMark.charCodeAt(0);\n              var finish = finishMark.charCodeAt(0);\n              if (start >= finish) {\n                showConfirm(cm, 'Invalid argument: ' + params.argString.substring(count));\n                return;\n              }\n\n              // Because marks are always ASCII values, and we have\n              // determined that they are the same case, we can use\n              // their char codes to iterate through the defined range.\n              for (var j = 0; j <= finish - start; j++) {\n                var mark = String.fromCharCode(start + j);\n                delete state.marks[mark];\n              }\n            } else {\n              showConfirm(cm, 'Invalid argument: ' + startMark + '-');\n              return;\n            }\n          } else {\n            // This symbol is a valid mark, and is not part of a range.\n            delete state.marks[sym];\n          }\n        }\n      }\n    };\n\n    var exCommandDispatcher = new ExCommandDispatcher();\n\n    /**\n    * @param {CodeMirror} cm CodeMirror instance we are in.\n    * @param {boolean} confirm Whether to confirm each replace.\n    * @param {Cursor} lineStart Line to start replacing from.\n    * @param {Cursor} lineEnd Line to stop replacing at.\n    * @param {RegExp} query Query for performing matches with.\n    * @param {string} replaceWith Text to replace matches with. May contain $1,\n    *     $2, etc for replacing captured groups using Javascript replace.\n    * @param {function()} callback A callback for when the replace is done.\n    */\n    function doReplace(cm, confirm, global, lineStart, lineEnd, searchCursor, query,\n        replaceWith, callback) {\n      // Set up all the functions.\n      cm.state.vim.exMode = true;\n      var done = false;\n      var lastPos = searchCursor.from();\n      function replaceAll() {\n        cm.operation(function() {\n          while (!done) {\n            replace();\n            next();\n          }\n          stop();\n        });\n      }\n      function replace() {\n        var text = cm.getRange(searchCursor.from(), searchCursor.to());\n        var newText = text.replace(query, replaceWith);\n        searchCursor.replace(newText);\n      }\n      function next() {\n        // The below only loops to skip over multiple occurrences on the same\n        // line when 'global' is not true.\n        while(searchCursor.findNext() &&\n              isInRange(searchCursor.from(), lineStart, lineEnd)) {\n          if (!global && lastPos && searchCursor.from().line == lastPos.line) {\n            continue;\n          }\n          cm.scrollIntoView(searchCursor.from(), 30);\n          cm.setSelection(searchCursor.from(), searchCursor.to());\n          lastPos = searchCursor.from();\n          done = false;\n          return;\n        }\n        done = true;\n      }\n      function stop(close) {\n        if (close) { close(); }\n        cm.focus();\n        if (lastPos) {\n          cm.setCursor(lastPos);\n          var vim = cm.state.vim;\n          vim.exMode = false;\n          vim.lastHPos = vim.lastHSPos = lastPos.ch;\n        }\n        if (callback) { callback(); }\n      }\n      function onPromptKeyDown(e, _value, close) {\n        // Swallow all keys.\n        CodeMirror.e_stop(e);\n        var keyName = CodeMirror.keyName(e);\n        switch (keyName) {\n          case 'Y':\n            replace(); next(); break;\n          case 'N':\n            next(); break;\n          case 'A':\n            // replaceAll contains a call to close of its own. We don't want it\n            // to fire too early or multiple times.\n            var savedCallback = callback;\n            callback = undefined;\n            cm.operation(replaceAll);\n            callback = savedCallback;\n            break;\n          case 'L':\n            replace();\n            // fall through and exit.\n          case 'Q':\n          case 'Esc':\n          case 'Ctrl-C':\n          case 'Ctrl-[':\n            stop(close);\n            break;\n        }\n        if (done) { stop(close); }\n        return true;\n      }\n\n      // Actually do replace.\n      next();\n      if (done) {\n        showConfirm(cm, 'No matches for ' + query.source);\n        return;\n      }\n      if (!confirm) {\n        replaceAll();\n        if (callback) { callback(); };\n        return;\n      }\n      showPrompt(cm, {\n        prefix: 'replace with <strong>' + replaceWith + '</strong> (y/n/a/q/l)',\n        onKeyDown: onPromptKeyDown\n      });\n    }\n\n    CodeMirror.keyMap.vim = {\n      attach: attachVimMap,\n      detach: detachVimMap,\n      call: cmKey\n    };\n\n    function exitInsertMode(cm) {\n      var vim = cm.state.vim;\n      var macroModeState = vimGlobalState.macroModeState;\n      var insertModeChangeRegister = vimGlobalState.registerController.getRegister('.');\n      var isPlaying = macroModeState.isPlaying;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      // In case of visual block, the insertModeChanges are not saved as a\n      // single word, so we convert them to a single word\n      // so as to update the \". register as expected in real vim.\n      var text = [];\n      if (!isPlaying) {\n        var selLength = lastChange.inVisualBlock ? vim.lastSelection.visualBlock.height : 1;\n        var changes = lastChange.changes;\n        var text = [];\n        var i = 0;\n        // In case of multiple selections in blockwise visual,\n        // the inserted text, for example: 'f<Backspace>oo', is stored as\n        // 'f', 'f', InsertModeKey 'o', 'o', 'o', 'o'. (if you have a block with 2 lines).\n        // We push the contents of the changes array as per the following:\n        // 1. In case of InsertModeKey, just increment by 1.\n        // 2. In case of a character, jump by selLength (2 in the example).\n        while (i < changes.length) {\n          // This loop will convert 'ff<bs>oooo' to 'f<bs>oo'.\n          text.push(changes[i]);\n          if (changes[i] instanceof InsertModeKey) {\n             i++;\n          } else {\n             i+= selLength;\n          }\n        }\n        lastChange.changes = text;\n        cm.off('change', onChange);\n        CodeMirror.off(cm.getInputField(), 'keydown', onKeyEventTargetKeyDown);\n      }\n      if (!isPlaying && vim.insertModeRepeat > 1) {\n        // Perform insert mode repeat for commands like 3,a and 3,o.\n        repeatLastEdit(cm, vim, vim.insertModeRepeat - 1,\n            true /** repeatForInsert */);\n        vim.lastEditInputState.repeatOverride = vim.insertModeRepeat;\n      }\n      delete vim.insertModeRepeat;\n      vim.insertMode = false;\n      cm.setCursor(cm.getCursor().line, cm.getCursor().ch-1);\n      cm.setOption('keyMap', 'vim');\n      cm.setOption('disableInput', true);\n      cm.toggleOverwrite(false); // exit replace mode if we were in it.\n      // update the \". register before exiting insert mode\n      insertModeChangeRegister.setText(lastChange.changes.join(''));\n      CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"normal\"});\n      if (macroModeState.isRecording) {\n        logInsertModeChange(macroModeState);\n      }\n    }\n\n    function _mapCommand(command) {\n      defaultKeymap.unshift(command);\n    }\n\n    function mapCommand(keys, type, name, args, extra) {\n      var command = {keys: keys, type: type};\n      command[type] = name;\n      command[type + \"Args\"] = args;\n      for (var key in extra)\n        command[key] = extra[key];\n      _mapCommand(command);\n    }\n\n    // The timeout in milliseconds for the two-character ESC keymap should be\n    // adjusted according to your typing speed to prevent false positives.\n    defineOption('insertModeEscKeysTimeout', 200, 'number');\n\n    CodeMirror.keyMap['vim-insert'] = {\n      // TODO: override navigation keys so that Esc will cancel automatic\n      // indentation from o, O, i_<CR>\n      fallthrough: ['default'],\n      attach: attachVimMap,\n      detach: detachVimMap,\n      call: cmKey\n    };\n\n    CodeMirror.keyMap['vim-replace'] = {\n      'Backspace': 'goCharLeft',\n      fallthrough: ['vim-insert'],\n      attach: attachVimMap,\n      detach: detachVimMap,\n      call: cmKey\n    };\n\n    function executeMacroRegister(cm, vim, macroModeState, registerName) {\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (registerName == ':') {\n        // Read-only register containing last Ex command.\n        if (register.keyBuffer[0]) {\n          exCommandDispatcher.processCommand(cm, register.keyBuffer[0]);\n        }\n        macroModeState.isPlaying = false;\n        return;\n      }\n      var keyBuffer = register.keyBuffer;\n      var imc = 0;\n      macroModeState.isPlaying = true;\n      macroModeState.replaySearchQueries = register.searchQueries.slice(0);\n      for (var i = 0; i < keyBuffer.length; i++) {\n        var text = keyBuffer[i];\n        var match, key;\n        while (text) {\n          // Pull off one command key, which is either a single character\n          // or a special sequence wrapped in '<' and '>', e.g. '<Space>'.\n          match = (/<\\w+-.+?>|<\\w+>|./).exec(text);\n          key = match[0];\n          text = text.substring(match.index + key.length);\n          CodeMirror.Vim.handleKey(cm, key, 'macro');\n          if (vim.insertMode) {\n            var changes = register.insertModeChanges[imc++].changes;\n            vimGlobalState.macroModeState.lastInsertModeChanges.changes =\n                changes;\n            repeatInsertModeChanges(cm, changes, 1);\n            exitInsertMode(cm);\n          }\n        }\n      };\n      macroModeState.isPlaying = false;\n    }\n\n    function logKey(macroModeState, key) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register) {\n        register.pushText(key);\n      }\n    }\n\n    function logInsertModeChange(macroModeState) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register && register.pushInsertModeChanges) {\n        register.pushInsertModeChanges(macroModeState.lastInsertModeChanges);\n      }\n    }\n\n    function logSearchQuery(macroModeState, query) {\n      if (macroModeState.isPlaying) { return; }\n      var registerName = macroModeState.latestRegister;\n      var register = vimGlobalState.registerController.getRegister(registerName);\n      if (register && register.pushSearchQuery) {\n        register.pushSearchQuery(query);\n      }\n    }\n\n    /**\n     * Listens for changes made in insert mode.\n     * Should only be active in insert mode.\n     */\n    function onChange(_cm, changeObj) {\n      var macroModeState = vimGlobalState.macroModeState;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      if (!macroModeState.isPlaying) {\n        while(changeObj) {\n          lastChange.expectCursorActivityForChange = true;\n          if (changeObj.origin == '+input' || changeObj.origin == 'paste'\n              || changeObj.origin === undefined /* only in testing */) {\n            var text = changeObj.text.join('\\n');\n            if (lastChange.maybeReset) {\n              lastChange.changes = [];\n              lastChange.maybeReset = false;\n            }\n            lastChange.changes.push(text);\n          }\n          // Change objects may be chained with next.\n          changeObj = changeObj.next;\n        }\n      }\n    }\n\n    /**\n    * Listens for any kind of cursor activity on CodeMirror.\n    */\n    function onCursorActivity(cm) {\n      var vim = cm.state.vim;\n      if (vim.insertMode) {\n        // Tracking cursor activity in insert mode (for macro support).\n        var macroModeState = vimGlobalState.macroModeState;\n        if (macroModeState.isPlaying) { return; }\n        var lastChange = macroModeState.lastInsertModeChanges;\n        if (lastChange.expectCursorActivityForChange) {\n          lastChange.expectCursorActivityForChange = false;\n        } else {\n          // Cursor moved outside the context of an edit. Reset the change.\n          lastChange.maybeReset = true;\n        }\n      } else if (!cm.curOp.isVimOp) {\n        handleExternalSelection(cm, vim);\n      }\n      if (vim.visualMode) {\n        updateFakeCursor(cm);\n      }\n    }\n    function updateFakeCursor(cm) {\n      var vim = cm.state.vim;\n      var from = clipCursorToContent(cm, copyCursor(vim.sel.head));\n      var to = offsetCursor(from, 0, 1);\n      if (vim.fakeCursor) {\n        vim.fakeCursor.clear();\n      }\n      vim.fakeCursor = cm.markText(from, to, {className: 'cm-animate-fat-cursor'});\n    }\n    function handleExternalSelection(cm, vim) {\n      var anchor = cm.getCursor('anchor');\n      var head = cm.getCursor('head');\n      // Enter or exit visual mode to match mouse selection.\n      if (vim.visualMode && !cm.somethingSelected()) {\n        exitVisualMode(cm, false);\n      } else if (!vim.visualMode && !vim.insertMode && cm.somethingSelected()) {\n        vim.visualMode = true;\n        vim.visualLine = false;\n        CodeMirror.signal(cm, \"vim-mode-change\", {mode: \"visual\"});\n      }\n      if (vim.visualMode) {\n        // Bind CodeMirror selection model to vim selection model.\n        // Mouse selections are considered visual characterwise.\n        var headOffset = !cursorIsBefore(head, anchor) ? -1 : 0;\n        var anchorOffset = cursorIsBefore(head, anchor) ? -1 : 0;\n        head = offsetCursor(head, 0, headOffset);\n        anchor = offsetCursor(anchor, 0, anchorOffset);\n        vim.sel = {\n          anchor: anchor,\n          head: head\n        };\n        updateMark(cm, vim, '<', cursorMin(head, anchor));\n        updateMark(cm, vim, '>', cursorMax(head, anchor));\n      } else if (!vim.insertMode) {\n        // Reset lastHPos if selection was modified by something outside of vim mode e.g. by mouse.\n        vim.lastHPos = cm.getCursor().ch;\n      }\n    }\n\n    /** Wrapper for special keys pressed in insert mode */\n    function InsertModeKey(keyName) {\n      this.keyName = keyName;\n    }\n\n    /**\n    * Handles raw key down events from the text area.\n    * - Should only be active in insert mode.\n    * - For recording deletes in insert mode.\n    */\n    function onKeyEventTargetKeyDown(e) {\n      var macroModeState = vimGlobalState.macroModeState;\n      var lastChange = macroModeState.lastInsertModeChanges;\n      var keyName = CodeMirror.keyName(e);\n      if (!keyName) { return; }\n      function onKeyFound() {\n        if (lastChange.maybeReset) {\n          lastChange.changes = [];\n          lastChange.maybeReset = false;\n        }\n        lastChange.changes.push(new InsertModeKey(keyName));\n        return true;\n      }\n      if (keyName.indexOf('Delete') != -1 || keyName.indexOf('Backspace') != -1) {\n        CodeMirror.lookupKey(keyName, 'vim-insert', onKeyFound);\n      }\n    }\n\n    /**\n     * Repeats the last edit, which includes exactly 1 command and at most 1\n     * insert. Operator and motion commands are read from lastEditInputState,\n     * while action commands are read from lastEditActionCommand.\n     *\n     * If repeatForInsert is true, then the function was called by\n     * exitInsertMode to repeat the insert mode changes the user just made. The\n     * corresponding enterInsertMode call was made with a count.\n     */\n    function repeatLastEdit(cm, vim, repeat, repeatForInsert) {\n      var macroModeState = vimGlobalState.macroModeState;\n      macroModeState.isPlaying = true;\n      var isAction = !!vim.lastEditActionCommand;\n      var cachedInputState = vim.inputState;\n      function repeatCommand() {\n        if (isAction) {\n          commandDispatcher.processAction(cm, vim, vim.lastEditActionCommand);\n        } else {\n          commandDispatcher.evalInput(cm, vim);\n        }\n      }\n      function repeatInsert(repeat) {\n        if (macroModeState.lastInsertModeChanges.changes.length > 0) {\n          // For some reason, repeat cw in desktop VIM does not repeat\n          // insert mode changes. Will conform to that behavior.\n          repeat = !vim.lastEditActionCommand ? 1 : repeat;\n          var changeObject = macroModeState.lastInsertModeChanges;\n          repeatInsertModeChanges(cm, changeObject.changes, repeat);\n        }\n      }\n      vim.inputState = vim.lastEditInputState;\n      if (isAction && vim.lastEditActionCommand.interlaceInsertRepeat) {\n        // o and O repeat have to be interlaced with insert repeats so that the\n        // insertions appear on separate lines instead of the last line.\n        for (var i = 0; i < repeat; i++) {\n          repeatCommand();\n          repeatInsert(1);\n        }\n      } else {\n        if (!repeatForInsert) {\n          // Hack to get the cursor to end up at the right place. If I is\n          // repeated in insert mode repeat, cursor will be 1 insert\n          // change set left of where it should be.\n          repeatCommand();\n        }\n        repeatInsert(repeat);\n      }\n      vim.inputState = cachedInputState;\n      if (vim.insertMode && !repeatForInsert) {\n        // Don't exit insert mode twice. If repeatForInsert is set, then we\n        // were called by an exitInsertMode call lower on the stack.\n        exitInsertMode(cm);\n      }\n      macroModeState.isPlaying = false;\n    };\n\n    function repeatInsertModeChanges(cm, changes, repeat) {\n      function keyHandler(binding) {\n        if (typeof binding == 'string') {\n          CodeMirror.commands[binding](cm);\n        } else {\n          binding(cm);\n        }\n        return true;\n      }\n      var head = cm.getCursor('head');\n      var inVisualBlock = vimGlobalState.macroModeState.lastInsertModeChanges.inVisualBlock;\n      if (inVisualBlock) {\n        // Set up block selection again for repeating the changes.\n        var vim = cm.state.vim;\n        var lastSel = vim.lastSelection;\n        var offset = getOffset(lastSel.anchor, lastSel.head);\n        selectForInsert(cm, head, offset.line + 1);\n        repeat = cm.listSelections().length;\n        cm.setCursor(head);\n      }\n      for (var i = 0; i < repeat; i++) {\n        if (inVisualBlock) {\n          cm.setCursor(offsetCursor(head, i, 0));\n        }\n        for (var j = 0; j < changes.length; j++) {\n          var change = changes[j];\n          if (change instanceof InsertModeKey) {\n            CodeMirror.lookupKey(change.keyName, 'vim-insert', keyHandler);\n          } else {\n            var cur = cm.getCursor();\n            cm.replaceRange(change, cur, cur);\n          }\n        }\n      }\n      if (inVisualBlock) {\n        cm.setCursor(offsetCursor(head, 0, 1));\n      }\n    }\n\n    resetVimGlobalState();\n    return vimApi;\n  };\n  // Initialize Vim and make it available as an API.\n  CodeMirror.Vim = Vim();\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/codemirror.css",
    "content": "/* BASICS */\n\n.CodeMirror {\n  /* Set height, width, borders, and global font properties here */\n  font-family: monospace;\n  height: 300px;\n  color: black;\n}\n\n/* PADDING */\n\n.CodeMirror-lines {\n  padding: 4px 0; /* Vertical padding around content */\n}\n.CodeMirror pre {\n  padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  background-color: white; /* The little square between H and V scrollbars */\n}\n\n/* GUTTER */\n\n.CodeMirror-gutters {\n  border-right: 1px solid #ddd;\n  background-color: #f7f7f7;\n  white-space: nowrap;\n}\n.CodeMirror-linenumbers {}\n.CodeMirror-linenumber {\n  padding: 0 3px 0 5px;\n  min-width: 20px;\n  text-align: right;\n  color: #999;\n  white-space: nowrap;\n}\n\n.CodeMirror-guttermarker { color: black; }\n.CodeMirror-guttermarker-subtle { color: #999; }\n\n/* CURSOR */\n\n.CodeMirror-cursor {\n  border-left: 1px solid black;\n  border-right: none;\n  width: 0;\n}\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n  border-left: 1px solid silver;\n}\n.cm-fat-cursor .CodeMirror-cursor {\n  width: auto;\n  border: 0 !important;\n  background: #7e7;\n}\n.cm-fat-cursor div.CodeMirror-cursors {\n  z-index: 1;\n}\n\n.cm-animate-fat-cursor {\n  width: auto;\n  border: 0;\n  -webkit-animation: blink 1.06s steps(1) infinite;\n  -moz-animation: blink 1.06s steps(1) infinite;\n  animation: blink 1.06s steps(1) infinite;\n  background-color: #7e7;\n}\n@-moz-keyframes blink {\n  0% {}\n  50% { background-color: transparent; }\n  100% {}\n}\n@-webkit-keyframes blink {\n  0% {}\n  50% { background-color: transparent; }\n  100% {}\n}\n@keyframes blink {\n  0% {}\n  50% { background-color: transparent; }\n  100% {}\n}\n\n/* Can style cursor different in overwrite (non-insert) mode */\n.CodeMirror-overwrite .CodeMirror-cursor {}\n\n.cm-tab { display: inline-block; text-decoration: inherit; }\n\n.CodeMirror-rulers {\n  position: absolute;\n  left: 0; right: 0; top: -50px; bottom: -20px;\n  overflow: hidden;\n}\n.CodeMirror-ruler {\n  border-left: 1px solid #ccc;\n  top: 0; bottom: 0;\n  position: absolute;\n}\n\n/* DEFAULT THEME */\n\n.cm-s-default .cm-header {color: blue;}\n.cm-s-default .cm-quote {color: #090;}\n.cm-negative {color: #d44;}\n.cm-positive {color: #292;}\n.cm-header, .cm-strong {font-weight: bold;}\n.cm-em {font-style: italic;}\n.cm-link {text-decoration: underline;}\n.cm-strikethrough {text-decoration: line-through;}\n\n.cm-s-default .cm-keyword {color: #708;}\n.cm-s-default .cm-atom {color: #219;}\n.cm-s-default .cm-number {color: #164;}\n.cm-s-default .cm-def {color: #00f;}\n.cm-s-default .cm-variable,\n.cm-s-default .cm-punctuation,\n.cm-s-default .cm-property,\n.cm-s-default .cm-operator {}\n.cm-s-default .cm-variable-2 {color: #05a;}\n.cm-s-default .cm-variable-3 {color: #085;}\n.cm-s-default .cm-comment {color: #a50;}\n.cm-s-default .cm-string {color: #a11;}\n.cm-s-default .cm-string-2 {color: #f50;}\n.cm-s-default .cm-meta {color: #555;}\n.cm-s-default .cm-qualifier {color: #555;}\n.cm-s-default .cm-builtin {color: #30a;}\n.cm-s-default .cm-bracket {color: #997;}\n.cm-s-default .cm-tag {color: #170;}\n.cm-s-default .cm-attribute {color: #00c;}\n.cm-s-default .cm-hr {color: #999;}\n.cm-s-default .cm-link {color: #00c;}\n\n.cm-s-default .cm-error {color: #f00;}\n.cm-invalidchar {color: #f00;}\n\n.CodeMirror-composing { border-bottom: 2px solid; }\n\n/* Default styles for common addons */\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}\n.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }\n.CodeMirror-activeline-background {background: #e8f2ff;}\n\n/* STOP */\n\n/* The rest of this file contains styles related to the mechanics of\n   the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n  position: relative;\n  overflow: hidden;\n  background: white;\n}\n\n.CodeMirror-scroll {\n  overflow: scroll !important; /* Things will break if this is overridden */\n  /* 30px is the magic margin used to hide the element's real scrollbars */\n  /* See overflow: hidden in .CodeMirror */\n  margin-bottom: -30px; margin-right: -30px;\n  padding-bottom: 30px;\n  height: 100%;\n  outline: none; /* Prevent dragging from highlighting the element */\n  position: relative;\n}\n.CodeMirror-sizer {\n  position: relative;\n  border-right: 30px solid transparent;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n   before actual scrolling happens, thus preventing shaking and\n   flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  position: absolute;\n  z-index: 6;\n  display: none;\n}\n.CodeMirror-vscrollbar {\n  right: 0; top: 0;\n  overflow-x: hidden;\n  overflow-y: scroll;\n}\n.CodeMirror-hscrollbar {\n  bottom: 0; left: 0;\n  overflow-y: hidden;\n  overflow-x: scroll;\n}\n.CodeMirror-scrollbar-filler {\n  right: 0; bottom: 0;\n}\n.CodeMirror-gutter-filler {\n  left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n  position: absolute; left: 0; top: 0;\n  min-height: 100%;\n  z-index: 3;\n}\n.CodeMirror-gutter {\n  white-space: normal;\n  height: 100%;\n  display: inline-block;\n  vertical-align: top;\n  margin-bottom: -30px;\n}\n.CodeMirror-gutter-wrapper {\n  position: absolute;\n  z-index: 4;\n  background: none !important;\n  border: none !important;\n}\n.CodeMirror-gutter-background {\n  position: absolute;\n  top: 0; bottom: 0;\n  z-index: 4;\n}\n.CodeMirror-gutter-elt {\n  position: absolute;\n  cursor: default;\n  z-index: 4;\n}\n.CodeMirror-gutter-wrapper ::selection { background-color: transparent }\n.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }\n\n.CodeMirror-lines {\n  cursor: text;\n  min-height: 1px; /* prevents collapsing before first draw */\n}\n.CodeMirror pre {\n  /* Reset some styles that the rest of the page might have set */\n  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n  border-width: 0;\n  background: transparent;\n  font-family: inherit;\n  font-size: inherit;\n  margin: 0;\n  white-space: pre;\n  word-wrap: normal;\n  line-height: inherit;\n  color: inherit;\n  z-index: 2;\n  position: relative;\n  overflow: visible;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-font-variant-ligatures: contextual;\n  font-variant-ligatures: contextual;\n}\n.CodeMirror-wrap pre {\n  word-wrap: break-word;\n  white-space: pre-wrap;\n  word-break: normal;\n}\n\n.CodeMirror-linebackground {\n  position: absolute;\n  left: 0; right: 0; top: 0; bottom: 0;\n  z-index: 0;\n}\n\n.CodeMirror-linewidget {\n  position: relative;\n  z-index: 2;\n  overflow: auto;\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-rtl pre { direction: rtl; }\n\n.CodeMirror-code {\n  outline: none;\n}\n\n/* Force content-box sizing for the elements where we expect it */\n.CodeMirror-scroll,\n.CodeMirror-sizer,\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n.CodeMirror-measure {\n  position: absolute;\n  width: 100%;\n  height: 0;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.CodeMirror-cursor {\n  position: absolute;\n  pointer-events: none;\n}\n.CodeMirror-measure pre { position: static; }\n\ndiv.CodeMirror-cursors {\n  visibility: hidden;\n  position: relative;\n  z-index: 3;\n}\ndiv.CodeMirror-dragcursors {\n  visibility: visible;\n}\n\n.CodeMirror-focused div.CodeMirror-cursors {\n  visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n.CodeMirror-crosshair { cursor: crosshair; }\n.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }\n.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }\n\n.cm-searching {\n  background: #ffa;\n  background: rgba(255, 255, 0, .4);\n}\n\n/* Used to force a border model for a node */\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n  /* Hide the cursor when printing */\n  .CodeMirror div.CodeMirror-cursors {\n    visibility: hidden;\n  }\n}\n\n/* See issue #2901 */\n.cm-tab-wrap-hack:after { content: ''; }\n\n/* Help users use markselection to safely style text background */\nspan.CodeMirror-selectedtext { background: none; }\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/codemirror.js",
    "content": "import { CodeMirror } from \"./edit/main\"\n\nglobal.CodeMirror = CodeMirror\n\nexport default CodeMirror\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/Display.js",
    "content": "import { gecko, ie, ie_version, mobile, webkit } from \"../util/browser\"\nimport { elt, eltP } from \"../util/dom\"\nimport { scrollerGap } from \"../util/misc\"\n\n// The display handles the DOM integration, both for input reading\n// and content drawing. It holds references to DOM nodes and\n// display-related state.\n\nexport function Display(place, doc, input) {\n  let d = this\n  this.input = input\n\n  // Covers bottom-right square when both scrollbars are present.\n  d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\")\n  d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\")\n  // Covers bottom of gutter when coverGutterNextToScrollbar is on\n  // and h scrollbar is present.\n  d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\")\n  d.gutterFiller.setAttribute(\"cm-not-content\", \"true\")\n  // Will contain the actual code, positioned to cover the viewport.\n  d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\")\n  // Elements are added to these to represent selection and cursors.\n  d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\")\n  d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\")\n  // A visibility: hidden element used to find the size of things.\n  d.measure = elt(\"div\", null, \"CodeMirror-measure\")\n  // When lines outside of the viewport are measured, they are drawn in this.\n  d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\")\n  // Wraps everything that needs to exist inside the vertically-padded coordinate system\n  d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n                    null, \"position: relative; outline: none\")\n  let lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\")\n  // Moved around its parent to cover visible view.\n  d.mover = elt(\"div\", [lines], null, \"position: relative\")\n  // Set to the height of the document, allowing scrolling.\n  d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\")\n  d.sizerWidth = null\n  // Behavior of elts with overflow: auto and padding is\n  // inconsistent across browsers. This is used to ensure the\n  // scrollable area is big enough.\n  d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\")\n  // Will contain the gutters, if any.\n  d.gutters = elt(\"div\", null, \"CodeMirror-gutters\")\n  d.lineGutter = null\n  // Actual scrollable element.\n  d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\")\n  d.scroller.setAttribute(\"tabIndex\", \"-1\")\n  // The element in which the editor lives.\n  d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\")\n\n  // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n  if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0 }\n  if (!webkit && !(gecko && mobile)) d.scroller.draggable = true\n\n  if (place) {\n    if (place.appendChild) place.appendChild(d.wrapper)\n    else place(d.wrapper)\n  }\n\n  // Current rendered range (may be bigger than the view window).\n  d.viewFrom = d.viewTo = doc.first\n  d.reportedViewFrom = d.reportedViewTo = doc.first\n  // Information about the rendered lines.\n  d.view = []\n  d.renderedView = null\n  // Holds info about a single rendered line when it was rendered\n  // for measurement, while not in view.\n  d.externalMeasured = null\n  // Empty space (in pixels) above the view\n  d.viewOffset = 0\n  d.lastWrapHeight = d.lastWrapWidth = 0\n  d.updateLineNumbers = null\n\n  d.nativeBarWidth = d.barHeight = d.barWidth = 0\n  d.scrollbarsClipped = false\n\n  // Used to only resize the line number gutter when necessary (when\n  // the amount of lines crosses a boundary that makes its width change)\n  d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null\n  // Set to true when a non-horizontal-scrolling line widget is\n  // added. As an optimization, line widget aligning is skipped when\n  // this is false.\n  d.alignWidgets = false\n\n  d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null\n\n  // Tracks the maximum line length so that the horizontal scrollbar\n  // can be kept static when scrolling.\n  d.maxLine = null\n  d.maxLineLength = 0\n  d.maxLineChanged = false\n\n  // Used for measuring wheel scrolling granularity\n  d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null\n\n  // True when shift is held down.\n  d.shift = false\n\n  // Used to track whether anything happened since the context menu\n  // was opened.\n  d.selForContextMenu = null\n\n  d.activeTouch = null\n\n  input.init(d)\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/focus.js",
    "content": "import { restartBlink } from \"./selection\"\nimport { webkit } from \"../util/browser\"\nimport { addClass, rmClass } from \"../util/dom\"\nimport { signal } from \"../util/event\"\n\nexport function ensureFocus(cm) {\n  if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm) }\n}\n\nexport function delayBlurEvent(cm) {\n  cm.state.delayingBlurEvent = true\n  setTimeout(() => { if (cm.state.delayingBlurEvent) {\n    cm.state.delayingBlurEvent = false\n    onBlur(cm)\n  } }, 100)\n}\n\nexport function onFocus(cm, e) {\n  if (cm.state.delayingBlurEvent) cm.state.delayingBlurEvent = false\n\n  if (cm.options.readOnly == \"nocursor\") return\n  if (!cm.state.focused) {\n    signal(cm, \"focus\", cm, e)\n    cm.state.focused = true\n    addClass(cm.display.wrapper, \"CodeMirror-focused\")\n    // This test prevents this from firing when a context\n    // menu is closed (since the input reset would kill the\n    // select-all detection hack)\n    if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n      cm.display.input.reset()\n      if (webkit) setTimeout(() => cm.display.input.reset(true), 20) // Issue #1730\n    }\n    cm.display.input.receivedFocus()\n  }\n  restartBlink(cm)\n}\nexport function onBlur(cm, e) {\n  if (cm.state.delayingBlurEvent) return\n\n  if (cm.state.focused) {\n    signal(cm, \"blur\", cm, e)\n    cm.state.focused = false\n    rmClass(cm.display.wrapper, \"CodeMirror-focused\")\n  }\n  clearInterval(cm.display.blinker)\n  setTimeout(() => { if (!cm.state.focused) cm.display.shift = false }, 150)\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/gutters.js",
    "content": "import { elt, removeChildren } from \"../util/dom\"\nimport { indexOf } from \"../util/misc\"\n\nimport { updateGutterSpace } from \"./update_display\"\n\n// Rebuild the gutter elements, ensure the margin to the left of the\n// code matches their width.\nexport function updateGutters(cm) {\n  let gutters = cm.display.gutters, specs = cm.options.gutters\n  removeChildren(gutters)\n  let i = 0\n  for (; i < specs.length; ++i) {\n    let gutterClass = specs[i]\n    let gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + gutterClass))\n    if (gutterClass == \"CodeMirror-linenumbers\") {\n      cm.display.lineGutter = gElt\n      gElt.style.width = (cm.display.lineNumWidth || 1) + \"px\"\n    }\n  }\n  gutters.style.display = i ? \"\" : \"none\"\n  updateGutterSpace(cm)\n}\n\n// Make sure the gutters options contains the element\n// \"CodeMirror-linenumbers\" when the lineNumbers option is true.\nexport function setGuttersForLineNumbers(options) {\n  let found = indexOf(options.gutters, \"CodeMirror-linenumbers\")\n  if (found == -1 && options.lineNumbers) {\n    options.gutters = options.gutters.concat([\"CodeMirror-linenumbers\"])\n  } else if (found > -1 && !options.lineNumbers) {\n    options.gutters = options.gutters.slice(0)\n    options.gutters.splice(found, 1)\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/highlight_worker.js",
    "content": "import { getStateBefore, highlightLine, processLine } from \"../line/highlight\"\nimport { copyState } from \"../modes\"\nimport { bind } from \"../util/misc\"\n\nimport { runInOp } from \"./operations\"\nimport { regLineChange } from \"./view_tracking\"\n\n// HIGHLIGHT WORKER\n\nexport function startWorker(cm, time) {\n  if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo)\n    cm.state.highlight.set(time, bind(highlightWorker, cm))\n}\n\nfunction highlightWorker(cm) {\n  let doc = cm.doc\n  if (doc.frontier < doc.first) doc.frontier = doc.first\n  if (doc.frontier >= cm.display.viewTo) return\n  let end = +new Date + cm.options.workTime\n  let state = copyState(doc.mode, getStateBefore(cm, doc.frontier))\n  let changedLines = []\n\n  doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), line => {\n    if (doc.frontier >= cm.display.viewFrom) { // Visible\n      let oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength\n      let highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true)\n      line.styles = highlighted.styles\n      let oldCls = line.styleClasses, newCls = highlighted.classes\n      if (newCls) line.styleClasses = newCls\n      else if (oldCls) line.styleClasses = null\n      let ischange = !oldStyles || oldStyles.length != line.styles.length ||\n        oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass)\n      for (let i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i]\n      if (ischange) changedLines.push(doc.frontier)\n      line.stateAfter = tooLong ? state : copyState(doc.mode, state)\n    } else {\n      if (line.text.length <= cm.options.maxHighlightLength)\n        processLine(cm, line.text, state)\n      line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null\n    }\n    ++doc.frontier\n    if (+new Date > end) {\n      startWorker(cm, cm.options.workDelay)\n      return true\n    }\n  })\n  if (changedLines.length) runInOp(cm, () => {\n    for (let i = 0; i < changedLines.length; i++)\n      regLineChange(cm, changedLines[i], \"text\")\n  })\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/line_numbers.js",
    "content": "import { lineNumberFor } from \"../line/utils_line\"\nimport { compensateForHScroll } from \"../measurement/position_measurement\"\nimport { elt } from \"../util/dom\"\n\nimport { updateGutterSpace } from \"./update_display\"\n\n// Re-align line numbers and gutter marks to compensate for\n// horizontal scrolling.\nexport function alignHorizontally(cm) {\n  let display = cm.display, view = display.view\n  if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) return\n  let comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft\n  let gutterW = display.gutters.offsetWidth, left = comp + \"px\"\n  for (let i = 0; i < view.length; i++) if (!view[i].hidden) {\n    if (cm.options.fixedGutter) {\n      if (view[i].gutter)\n        view[i].gutter.style.left = left\n      if (view[i].gutterBackground)\n        view[i].gutterBackground.style.left = left\n    }\n    let align = view[i].alignable\n    if (align) for (let j = 0; j < align.length; j++)\n      align[j].style.left = left\n  }\n  if (cm.options.fixedGutter)\n    display.gutters.style.left = (comp + gutterW) + \"px\"\n}\n\n// Used to ensure that the line number gutter is still the right\n// size for the current document size. Returns true when an update\n// is needed.\nexport function maybeUpdateLineNumberWidth(cm) {\n  if (!cm.options.lineNumbers) return false\n  let doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display\n  if (last.length != display.lineNumChars) {\n    let test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n                                               \"CodeMirror-linenumber CodeMirror-gutter-elt\"))\n    let innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW\n    display.lineGutter.style.width = \"\"\n    display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1\n    display.lineNumWidth = display.lineNumInnerWidth + padding\n    display.lineNumChars = display.lineNumInnerWidth ? last.length : -1\n    display.lineGutter.style.width = display.lineNumWidth + \"px\"\n    updateGutterSpace(cm)\n    return true\n  }\n  return false\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/mode_state.js",
    "content": "import { getMode } from \"../modes\"\n\nimport { startWorker } from \"./highlight_worker\"\nimport { regChange } from \"./view_tracking\"\n\n// Used to get the editor into a consistent state again when options change.\n\nexport function loadMode(cm) {\n  cm.doc.mode = getMode(cm.options, cm.doc.modeOption)\n  resetModeState(cm)\n}\n\nexport function resetModeState(cm) {\n  cm.doc.iter(line => {\n    if (line.stateAfter) line.stateAfter = null\n    if (line.styles) line.styles = null\n  })\n  cm.doc.frontier = cm.doc.first\n  startWorker(cm, 100)\n  cm.state.modeGen++\n  if (cm.curOp) regChange(cm)\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/operations.js",
    "content": "import { clipPos } from \"../line/pos\"\nimport { findMaxLine } from \"../line/spans\"\nimport { displayWidth, measureChar, scrollGap } from \"../measurement/position_measurement\"\nimport { signal } from \"../util/event\"\nimport { activeElt } from \"../util/dom\"\nimport { finishOperation, pushOperation } from \"../util/operation_group\"\n\nimport { ensureFocus } from \"./focus\"\nimport { measureForScrollbars, updateScrollbars } from \"./scrollbars\"\nimport { setScrollLeft } from \"./scroll_events\"\nimport { restartBlink } from \"./selection\"\nimport { maybeScrollWindow, scrollPosIntoView } from \"./scrolling\"\nimport { DisplayUpdate, maybeClipScrollbars, postUpdateDisplay, setDocumentHeight, updateDisplayIfNeeded } from \"./update_display\"\nimport { updateHeightsInViewport } from \"./update_lines\"\n\n// Operations are used to wrap a series of changes to the editor\n// state in such a way that each change won't have to update the\n// cursor and display (which would be awkward, slow, and\n// error-prone). Instead, display updates are batched and then all\n// combined and executed at once.\n\nlet nextOpId = 0\n// Start a new operation.\nexport function startOperation(cm) {\n  cm.curOp = {\n    cm: cm,\n    viewChanged: false,      // Flag that indicates that lines might need to be redrawn\n    startHeight: cm.doc.height, // Used to detect need to update scrollbar\n    forceUpdate: false,      // Used to force a redraw\n    updateInput: null,       // Whether to reset the input textarea\n    typing: false,           // Whether this reset should be careful to leave existing text (for compositing)\n    changeObjs: null,        // Accumulated changes, for firing change events\n    cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n    cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n    selectionChanged: false, // Whether the selection needs to be redrawn\n    updateMaxLine: false,    // Set when the widest line needs to be determined anew\n    scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n    scrollToPos: null,       // Used to scroll to a specific position\n    focus: false,\n    id: ++nextOpId           // Unique ID\n  }\n  pushOperation(cm.curOp)\n}\n\n// Finish an operation, updating the display and signalling delayed events\nexport function endOperation(cm) {\n  let op = cm.curOp\n  finishOperation(op, group => {\n    for (let i = 0; i < group.ops.length; i++)\n      group.ops[i].cm.curOp = null\n    endOperations(group)\n  })\n}\n\n// The DOM updates done when an operation finishes are batched so\n// that the minimum number of relayouts are required.\nfunction endOperations(group) {\n  let ops = group.ops\n  for (let i = 0; i < ops.length; i++) // Read DOM\n    endOperation_R1(ops[i])\n  for (let i = 0; i < ops.length; i++) // Write DOM (maybe)\n    endOperation_W1(ops[i])\n  for (let i = 0; i < ops.length; i++) // Read DOM\n    endOperation_R2(ops[i])\n  for (let i = 0; i < ops.length; i++) // Write DOM (maybe)\n    endOperation_W2(ops[i])\n  for (let i = 0; i < ops.length; i++) // Read DOM\n    endOperation_finish(ops[i])\n}\n\nfunction endOperation_R1(op) {\n  let cm = op.cm, display = cm.display\n  maybeClipScrollbars(cm)\n  if (op.updateMaxLine) findMaxLine(cm)\n\n  op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n    op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n                       op.scrollToPos.to.line >= display.viewTo) ||\n    display.maxLineChanged && cm.options.lineWrapping\n  op.update = op.mustUpdate &&\n    new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate)\n}\n\nfunction endOperation_W1(op) {\n  op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update)\n}\n\nfunction endOperation_R2(op) {\n  let cm = op.cm, display = cm.display\n  if (op.updatedDisplay) updateHeightsInViewport(cm)\n\n  op.barMeasure = measureForScrollbars(cm)\n\n  // If the max line changed since it was last measured, measure it,\n  // and ensure the document's width matches it.\n  // updateDisplay_W2 will use these properties to do the actual resizing\n  if (display.maxLineChanged && !cm.options.lineWrapping) {\n    op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3\n    cm.display.sizerWidth = op.adjustWidthTo\n    op.barMeasure.scrollWidth =\n      Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth)\n    op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm))\n  }\n\n  if (op.updatedDisplay || op.selectionChanged)\n    op.preparedSelection = display.input.prepareSelection(op.focus)\n}\n\nfunction endOperation_W2(op) {\n  let cm = op.cm\n\n  if (op.adjustWidthTo != null) {\n    cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\"\n    if (op.maxScrollLeft < cm.doc.scrollLeft)\n      setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true)\n    cm.display.maxLineChanged = false\n  }\n\n  let takeFocus = op.focus && op.focus == activeElt() && (!document.hasFocus || document.hasFocus())\n  if (op.preparedSelection)\n    cm.display.input.showSelection(op.preparedSelection, takeFocus)\n  if (op.updatedDisplay || op.startHeight != cm.doc.height)\n    updateScrollbars(cm, op.barMeasure)\n  if (op.updatedDisplay)\n    setDocumentHeight(cm, op.barMeasure)\n\n  if (op.selectionChanged) restartBlink(cm)\n\n  if (cm.state.focused && op.updateInput)\n    cm.display.input.reset(op.typing)\n  if (takeFocus) ensureFocus(op.cm)\n}\n\nfunction endOperation_finish(op) {\n  let cm = op.cm, display = cm.display, doc = cm.doc\n\n  if (op.updatedDisplay) postUpdateDisplay(cm, op.update)\n\n  // Abort mouse wheel delta measurement, when scrolling explicitly\n  if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n    display.wheelStartX = display.wheelStartY = null\n\n  // Propagate the scroll position to the actual DOM scroller\n  if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) {\n    doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop))\n    display.scrollbars.setScrollTop(doc.scrollTop)\n    display.scroller.scrollTop = doc.scrollTop\n  }\n  if (op.scrollLeft != null) setScrollLeft(cm, op.scrollLeft, true, true)\n  // If we need to scroll a specific position into view, do so.\n  if (op.scrollToPos) {\n    let rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n                                 clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin)\n    maybeScrollWindow(cm, rect)\n  }\n\n  // Fire events for markers that are hidden/unidden by editing or\n  // undoing\n  let hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers\n  if (hidden) for (let i = 0; i < hidden.length; ++i)\n    if (!hidden[i].lines.length) signal(hidden[i], \"hide\")\n  if (unhidden) for (let i = 0; i < unhidden.length; ++i)\n    if (unhidden[i].lines.length) signal(unhidden[i], \"unhide\")\n\n  if (display.wrapper.offsetHeight)\n    doc.scrollTop = cm.display.scroller.scrollTop\n\n  // Fire change events, and delayed event handlers\n  if (op.changeObjs)\n    signal(cm, \"changes\", cm, op.changeObjs)\n  if (op.update)\n    op.update.finish()\n}\n\n// Run the given function in an operation\nexport function runInOp(cm, f) {\n  if (cm.curOp) return f()\n  startOperation(cm)\n  try { return f() }\n  finally { endOperation(cm) }\n}\n// Wraps a function in an operation. Returns the wrapped function.\nexport function operation(cm, f) {\n  return function() {\n    if (cm.curOp) return f.apply(cm, arguments)\n    startOperation(cm)\n    try { return f.apply(cm, arguments) }\n    finally { endOperation(cm) }\n  }\n}\n// Used to add methods to editor and doc instances, wrapping them in\n// operations.\nexport function methodOp(f) {\n  return function() {\n    if (this.curOp) return f.apply(this, arguments)\n    startOperation(this)\n    try { return f.apply(this, arguments) }\n    finally { endOperation(this) }\n  }\n}\nexport function docMethodOp(f) {\n  return function() {\n    let cm = this.cm\n    if (!cm || cm.curOp) return f.apply(this, arguments)\n    startOperation(cm)\n    try { return f.apply(this, arguments) }\n    finally { endOperation(cm) }\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/scroll_events.js",
    "content": "import { chrome, gecko, ie, mac, presto, safari, webkit } from \"../util/browser\"\nimport { e_preventDefault } from \"../util/event\"\n\nimport { startWorker } from \"./highlight_worker\"\nimport { alignHorizontally } from \"./line_numbers\"\nimport { updateDisplaySimple} from \"./update_display\"\n\n// Sync the scrollable area and scrollbars, ensure the viewport\n// covers the visible area.\nexport function setScrollTop(cm, val) {\n  if (Math.abs(cm.doc.scrollTop - val) < 2) return\n  cm.doc.scrollTop = val\n  if (!gecko) updateDisplaySimple(cm, {top: val})\n  if (cm.display.scroller.scrollTop != val) cm.display.scroller.scrollTop = val\n  cm.display.scrollbars.setScrollTop(val)\n  if (gecko) updateDisplaySimple(cm)\n  startWorker(cm, 100)\n}\n// Sync scroller and scrollbar, ensure the gutter elements are\n// aligned.\nexport function setScrollLeft(cm, val, isScroller, forceScroll) {\n  if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) return\n  val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)\n  cm.doc.scrollLeft = val\n  alignHorizontally(cm)\n  if (cm.display.scroller.scrollLeft != val) cm.display.scroller.scrollLeft = val\n  cm.display.scrollbars.setScrollLeft(val)\n}\n\n// Since the delta values reported on mouse wheel events are\n// unstandardized between browsers and even browser versions, and\n// generally horribly unpredictable, this code starts by measuring\n// the scroll effect that the first few mouse wheel events have,\n// and, from that, detects the way it can convert deltas to pixel\n// offsets afterwards.\n//\n// The reason we want to know the amount a wheel event will scroll\n// is that it gives us a chance to update the display before the\n// actual scrolling happens, reducing flickering.\n\nlet wheelSamples = 0, wheelPixelsPerUnit = null\n// Fill in a browser-detected starting value on browsers where we\n// know one. These don't have to be accurate -- the result of them\n// being wrong would just be a slight flicker on the first wheel\n// scroll (if it is large enough).\nif (ie) wheelPixelsPerUnit = -.53\nelse if (gecko) wheelPixelsPerUnit = 15\nelse if (chrome) wheelPixelsPerUnit = -.7\nelse if (safari) wheelPixelsPerUnit = -1/3\n\nfunction wheelEventDelta(e) {\n  let dx = e.wheelDeltaX, dy = e.wheelDeltaY\n  if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) dx = e.detail\n  if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) dy = e.detail\n  else if (dy == null) dy = e.wheelDelta\n  return {x: dx, y: dy}\n}\nexport function wheelEventPixels(e) {\n  let delta = wheelEventDelta(e)\n  delta.x *= wheelPixelsPerUnit\n  delta.y *= wheelPixelsPerUnit\n  return delta\n}\n\nexport function onScrollWheel(cm, e) {\n  let delta = wheelEventDelta(e), dx = delta.x, dy = delta.y\n\n  let display = cm.display, scroll = display.scroller\n  // Quit if there's nothing to scroll here\n  let canScrollX = scroll.scrollWidth > scroll.clientWidth\n  let canScrollY = scroll.scrollHeight > scroll.clientHeight\n  if (!(dx && canScrollX || dy && canScrollY)) return\n\n  // Webkit browsers on OS X abort momentum scrolls when the target\n  // of the scroll event is removed from the scrollable element.\n  // This hack (see related code in patchDisplay) makes sure the\n  // element is kept around.\n  if (dy && mac && webkit) {\n    outer: for (let cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n      for (let i = 0; i < view.length; i++) {\n        if (view[i].node == cur) {\n          cm.display.currentWheelTarget = cur\n          break outer\n        }\n      }\n    }\n  }\n\n  // On some browsers, horizontal scrolling will cause redraws to\n  // happen before the gutter has been realigned, causing it to\n  // wriggle around in a most unseemly way. When we have an\n  // estimated pixels/delta value, we just handle horizontal\n  // scrolling entirely here. It'll be slightly off from native, but\n  // better than glitching out.\n  if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n    if (dy && canScrollY)\n      setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight)))\n    setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth)))\n    // Only prevent default scrolling if vertical scrolling is\n    // actually possible. Otherwise, it causes vertical scroll\n    // jitter on OSX trackpads when deltaX is small and deltaY\n    // is large (issue #3579)\n    if (!dy || (dy && canScrollY))\n      e_preventDefault(e)\n    display.wheelStartX = null // Abort measurement, if in progress\n    return\n  }\n\n  // 'Project' the visible viewport to cover the area that is being\n  // scrolled into view (if we know enough to estimate it).\n  if (dy && wheelPixelsPerUnit != null) {\n    let pixels = dy * wheelPixelsPerUnit\n    let top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight\n    if (pixels < 0) top = Math.max(0, top + pixels - 50)\n    else bot = Math.min(cm.doc.height, bot + pixels + 50)\n    updateDisplaySimple(cm, {top: top, bottom: bot})\n  }\n\n  if (wheelSamples < 20) {\n    if (display.wheelStartX == null) {\n      display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop\n      display.wheelDX = dx; display.wheelDY = dy\n      setTimeout(() => {\n        if (display.wheelStartX == null) return\n        let movedX = scroll.scrollLeft - display.wheelStartX\n        let movedY = scroll.scrollTop - display.wheelStartY\n        let sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n          (movedX && display.wheelDX && movedX / display.wheelDX)\n        display.wheelStartX = display.wheelStartY = null\n        if (!sample) return\n        wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1)\n        ++wheelSamples\n      }, 200)\n    } else {\n      display.wheelDX += dx; display.wheelDY += dy\n    }\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/scrollbars.js",
    "content": "import { addClass, elt, rmClass } from \"../util/dom\"\nimport { on } from \"../util/event\"\nimport { scrollGap, paddingVert } from \"../measurement/position_measurement\"\nimport { ie, ie_version, mac, mac_geMountainLion } from \"../util/browser\"\nimport { updateHeightsInViewport } from \"./update_lines\"\nimport { Delayed } from \"../util/misc\"\n\nimport { setScrollLeft, setScrollTop } from \"./scroll_events\"\n\n// SCROLLBARS\n\n// Prepare DOM reads needed to update the scrollbars. Done in one\n// shot to minimize update/measure roundtrips.\nexport function measureForScrollbars(cm) {\n  let d = cm.display, gutterW = d.gutters.offsetWidth\n  let docH = Math.round(cm.doc.height + paddingVert(cm.display))\n  return {\n    clientHeight: d.scroller.clientHeight,\n    viewHeight: d.wrapper.clientHeight,\n    scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n    viewWidth: d.wrapper.clientWidth,\n    barLeft: cm.options.fixedGutter ? gutterW : 0,\n    docHeight: docH,\n    scrollHeight: docH + scrollGap(cm) + d.barHeight,\n    nativeBarWidth: d.nativeBarWidth,\n    gutterWidth: gutterW\n  }\n}\n\nclass NativeScrollbars {\n  constructor(place, scroll, cm) {\n    this.cm = cm\n    let vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\")\n    let horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\")\n    place(vert); place(horiz)\n\n    on(vert, \"scroll\", () => {\n      if (vert.clientHeight) scroll(vert.scrollTop, \"vertical\")\n    })\n    on(horiz, \"scroll\", () => {\n      if (horiz.clientWidth) scroll(horiz.scrollLeft, \"horizontal\")\n    })\n\n    this.checkedZeroWidth = false\n    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n    if (ie && ie_version < 8) this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"\n  }\n\n  update(measure) {\n    let needsH = measure.scrollWidth > measure.clientWidth + 1\n    let needsV = measure.scrollHeight > measure.clientHeight + 1\n    let sWidth = measure.nativeBarWidth\n\n    if (needsV) {\n      this.vert.style.display = \"block\"\n      this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\"\n      let totalHeight = measure.viewHeight - (needsH ? sWidth : 0)\n      // A bug in IE8 can cause this value to be negative, so guard it.\n      this.vert.firstChild.style.height =\n        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\"\n    } else {\n      this.vert.style.display = \"\"\n      this.vert.firstChild.style.height = \"0\"\n    }\n\n    if (needsH) {\n      this.horiz.style.display = \"block\"\n      this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\"\n      this.horiz.style.left = measure.barLeft + \"px\"\n      let totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0)\n      this.horiz.firstChild.style.width =\n        Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\"\n    } else {\n      this.horiz.style.display = \"\"\n      this.horiz.firstChild.style.width = \"0\"\n    }\n\n    if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n      if (sWidth == 0) this.zeroWidthHack()\n      this.checkedZeroWidth = true\n    }\n\n    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n  }\n\n  setScrollLeft(pos) {\n    if (this.horiz.scrollLeft != pos) this.horiz.scrollLeft = pos\n    if (this.disableHoriz) this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\")\n  }\n\n  setScrollTop(pos) {\n    if (this.vert.scrollTop != pos) this.vert.scrollTop = pos\n    if (this.disableVert) this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\")\n  }\n\n  zeroWidthHack() {\n    let w = mac && !mac_geMountainLion ? \"12px\" : \"18px\"\n    this.horiz.style.height = this.vert.style.width = w\n    this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\"\n    this.disableHoriz = new Delayed\n    this.disableVert = new Delayed\n  }\n\n  enableZeroWidthBar(bar, delay, type) {\n    bar.style.pointerEvents = \"auto\"\n    function maybeDisable() {\n      // To find out whether the scrollbar is still visible, we\n      // check whether the element under the pixel in the bottom\n      // right corner of the scrollbar box is the scrollbar box\n      // itself (when the bar is still visible) or its filler child\n      // (when the bar is hidden). If it is still visible, we keep\n      // it enabled, if it's hidden, we disable pointer events.\n      let box = bar.getBoundingClientRect()\n      let elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1)\n      if (elt != bar) bar.style.pointerEvents = \"none\"\n      else delay.set(1000, maybeDisable)\n    }\n    delay.set(1000, maybeDisable)\n  }\n\n  clear() {\n    let parent = this.horiz.parentNode\n    parent.removeChild(this.horiz)\n    parent.removeChild(this.vert)\n  }\n}\n\nclass NullScrollbars {\n  update() { return {bottom: 0, right: 0} }\n  setScrollLeft() {}\n  setScrollTop() {}\n  clear() {}\n}\n\nexport function updateScrollbars(cm, measure) {\n  if (!measure) measure = measureForScrollbars(cm)\n  let startWidth = cm.display.barWidth, startHeight = cm.display.barHeight\n  updateScrollbarsInner(cm, measure)\n  for (let i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n    if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n      updateHeightsInViewport(cm)\n    updateScrollbarsInner(cm, measureForScrollbars(cm))\n    startWidth = cm.display.barWidth; startHeight = cm.display.barHeight\n  }\n}\n\n// Re-synchronize the fake scrollbars with the actual size of the\n// content.\nfunction updateScrollbarsInner(cm, measure) {\n  let d = cm.display\n  let sizes = d.scrollbars.update(measure)\n\n  d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\"\n  d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\"\n  d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\"\n\n  if (sizes.right && sizes.bottom) {\n    d.scrollbarFiller.style.display = \"block\"\n    d.scrollbarFiller.style.height = sizes.bottom + \"px\"\n    d.scrollbarFiller.style.width = sizes.right + \"px\"\n  } else d.scrollbarFiller.style.display = \"\"\n  if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n    d.gutterFiller.style.display = \"block\"\n    d.gutterFiller.style.height = sizes.bottom + \"px\"\n    d.gutterFiller.style.width = measure.gutterWidth + \"px\"\n  } else d.gutterFiller.style.display = \"\"\n}\n\nexport let scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars}\n\nexport function initScrollbars(cm) {\n  if (cm.display.scrollbars) {\n    cm.display.scrollbars.clear()\n    if (cm.display.scrollbars.addClass)\n      rmClass(cm.display.wrapper, cm.display.scrollbars.addClass)\n  }\n\n  cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](node => {\n    cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller)\n    // Prevent clicks in the scrollbars from killing focus\n    on(node, \"mousedown\", () => {\n      if (cm.state.focused) setTimeout(() => cm.display.input.focus(), 0)\n    })\n    node.setAttribute(\"cm-not-content\", \"true\")\n  }, (pos, axis) => {\n    if (axis == \"horizontal\") setScrollLeft(cm, pos)\n    else setScrollTop(cm, pos)\n  }, cm)\n  if (cm.display.scrollbars.addClass)\n    addClass(cm.display.wrapper, cm.display.scrollbars.addClass)\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/scrolling.js",
    "content": "import { Pos } from \"../line/pos\"\nimport { cursorCoords, displayHeight, displayWidth, estimateCoords, paddingTop, paddingVert, scrollGap, textHeight } from \"../measurement/position_measurement\"\nimport { phantom } from \"../util/browser\"\nimport { elt } from \"../util/dom\"\nimport { signalDOMEvent } from \"../util/event\"\n\nimport { setScrollLeft, setScrollTop } from \"./scroll_events\"\n\n// SCROLLING THINGS INTO VIEW\n\n// If an editor sits on the top or bottom of the window, partially\n// scrolled out of view, this ensures that the cursor is visible.\nexport function maybeScrollWindow(cm, rect) {\n  if (signalDOMEvent(cm, \"scrollCursorIntoView\")) return\n\n  let display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null\n  if (rect.top + box.top < 0) doScroll = true\n  else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) doScroll = false\n  if (doScroll != null && !phantom) {\n    let scrollNode = elt(\"div\", \"\\u200b\", null, `position: absolute;\n                         top: ${rect.top - display.viewOffset - paddingTop(cm.display)}px;\n                         height: ${rect.bottom - rect.top + scrollGap(cm) + display.barHeight}px;\n                         left: ${rect.left}px; width: ${Math.max(2, rect.right - rect.left)}px;`)\n    cm.display.lineSpace.appendChild(scrollNode)\n    scrollNode.scrollIntoView(doScroll)\n    cm.display.lineSpace.removeChild(scrollNode)\n  }\n}\n\n// Scroll a given position into view (immediately), verifying that\n// it actually became visible (as line heights are accurately\n// measured, the position of something may 'drift' during drawing).\nexport function scrollPosIntoView(cm, pos, end, margin) {\n  if (margin == null) margin = 0\n  let rect\n  for (let limit = 0; limit < 5; limit++) {\n    let changed = false\n    let coords = cursorCoords(cm, pos)\n    let endCoords = !end || end == pos ? coords : cursorCoords(cm, end)\n    rect = {left: Math.min(coords.left, endCoords.left),\n            top: Math.min(coords.top, endCoords.top) - margin,\n            right: Math.max(coords.left, endCoords.left),\n            bottom: Math.max(coords.bottom, endCoords.bottom) + margin}\n    let scrollPos = calculateScrollPos(cm, rect)\n    let startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft\n    if (scrollPos.scrollTop != null) {\n      setScrollTop(cm, scrollPos.scrollTop)\n      if (Math.abs(cm.doc.scrollTop - startTop) > 1) changed = true\n    }\n    if (scrollPos.scrollLeft != null) {\n      setScrollLeft(cm, scrollPos.scrollLeft)\n      if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) changed = true\n    }\n    if (!changed) break\n  }\n  return rect\n}\n\n// Scroll a given set of coordinates into view (immediately).\nexport function scrollIntoView(cm, rect) {\n  let scrollPos = calculateScrollPos(cm, rect)\n  if (scrollPos.scrollTop != null) setScrollTop(cm, scrollPos.scrollTop)\n  if (scrollPos.scrollLeft != null) setScrollLeft(cm, scrollPos.scrollLeft)\n}\n\n// Calculate a new scroll position needed to scroll the given\n// rectangle into view. Returns an object with scrollTop and\n// scrollLeft properties. When these are undefined, the\n// vertical/horizontal position does not need to be adjusted.\nexport function calculateScrollPos(cm, rect) {\n  let display = cm.display, snapMargin = textHeight(cm.display)\n  if (rect.top < 0) rect.top = 0\n  let screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop\n  let screen = displayHeight(cm), result = {}\n  if (rect.bottom - rect.top > screen) rect.bottom = rect.top + screen\n  let docBottom = cm.doc.height + paddingVert(display)\n  let atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin\n  if (rect.top < screentop) {\n    result.scrollTop = atTop ? 0 : rect.top\n  } else if (rect.bottom > screentop + screen) {\n    let newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen)\n    if (newTop != screentop) result.scrollTop = newTop\n  }\n\n  let screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft\n  let screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0)\n  let tooWide = rect.right - rect.left > screenw\n  if (tooWide) rect.right = rect.left + screenw\n  if (rect.left < 10)\n    result.scrollLeft = 0\n  else if (rect.left < screenleft)\n    result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10))\n  else if (rect.right > screenw + screenleft - 3)\n    result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw\n  return result\n}\n\n// Store a relative adjustment to the scroll position in the current\n// operation (to be applied when the operation finishes).\nexport function addToScrollPos(cm, left, top) {\n  if (left != null || top != null) resolveScrollToPos(cm)\n  if (left != null)\n    cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left\n  if (top != null)\n    cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top\n}\n\n// Make sure that at the end of the operation the current cursor is\n// shown.\nexport function ensureCursorVisible(cm) {\n  resolveScrollToPos(cm)\n  let cur = cm.getCursor(), from = cur, to = cur\n  if (!cm.options.lineWrapping) {\n    from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur\n    to = Pos(cur.line, cur.ch + 1)\n  }\n  cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin}\n}\n\n// When an operation has its scrollToPos property set, and another\n// scroll action is applied before the end of the operation, this\n// 'simulates' scrolling that position into view in a cheap way, so\n// that the effect of intermediate scroll commands is not ignored.\nexport function resolveScrollToPos(cm) {\n  let range = cm.curOp.scrollToPos\n  if (range) {\n    cm.curOp.scrollToPos = null\n    let from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to)\n    let sPos = calculateScrollPos(cm, {\n      left: Math.min(from.left, to.left),\n      top: Math.min(from.top, to.top) - range.margin,\n      right: Math.max(from.right, to.right),\n      bottom: Math.max(from.bottom, to.bottom) + range.margin\n    })\n    cm.scrollTo(sPos.scrollLeft, sPos.scrollTop)\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/selection.js",
    "content": "import { Pos } from \"../line/pos\"\nimport { visualLine } from \"../line/spans\"\nimport { getLine } from \"../line/utils_line\"\nimport { charCoords, cursorCoords, displayWidth, paddingH } from \"../measurement/position_measurement\"\nimport { getOrder, iterateBidiSections } from \"../util/bidi\"\nimport { elt } from \"../util/dom\"\n\nexport function updateSelection(cm) {\n  cm.display.input.showSelection(cm.display.input.prepareSelection())\n}\n\nexport function prepareSelection(cm, primary) {\n  let doc = cm.doc, result = {}\n  let curFragment = result.cursors = document.createDocumentFragment()\n  let selFragment = result.selection = document.createDocumentFragment()\n\n  for (let i = 0; i < doc.sel.ranges.length; i++) {\n    if (primary === false && i == doc.sel.primIndex) continue\n    let range = doc.sel.ranges[i]\n    if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) continue\n    let collapsed = range.empty()\n    if (collapsed || cm.options.showCursorWhenSelecting)\n      drawSelectionCursor(cm, range.head, curFragment)\n    if (!collapsed)\n      drawSelectionRange(cm, range, selFragment)\n  }\n  return result\n}\n\n// Draws a cursor for the given range\nexport function drawSelectionCursor(cm, head, output) {\n  let pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine)\n\n  let cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"))\n  cursor.style.left = pos.left + \"px\"\n  cursor.style.top = pos.top + \"px\"\n  cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\"\n\n  if (pos.other) {\n    // Secondary cursor, shown when on a 'jump' in bi-directional text\n    let otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"))\n    otherCursor.style.display = \"\"\n    otherCursor.style.left = pos.other.left + \"px\"\n    otherCursor.style.top = pos.other.top + \"px\"\n    otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\"\n  }\n}\n\n// Draws the given range as a highlighted selection\nfunction drawSelectionRange(cm, range, output) {\n  let display = cm.display, doc = cm.doc\n  let fragment = document.createDocumentFragment()\n  let padding = paddingH(cm.display), leftSide = padding.left\n  let rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right\n\n  function add(left, top, width, bottom) {\n    if (top < 0) top = 0\n    top = Math.round(top)\n    bottom = Math.round(bottom)\n    fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", `position: absolute; left: ${left}px;\n                             top: ${top}px; width: ${width == null ? rightSide - left : width}px;\n                             height: ${bottom - top}px`))\n  }\n\n  function drawForLine(line, fromArg, toArg) {\n    let lineObj = getLine(doc, line)\n    let lineLen = lineObj.text.length\n    let start, end\n    function coords(ch, bias) {\n      return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n    }\n\n    iterateBidiSections(getOrder(lineObj, doc.direction), fromArg || 0, toArg == null ? lineLen : toArg, (from, to, dir) => {\n      let leftPos = coords(from, \"left\"), rightPos, left, right\n      if (from == to) {\n        rightPos = leftPos\n        left = right = leftPos.left\n      } else {\n        rightPos = coords(to - 1, \"right\")\n        if (dir == \"rtl\") { let tmp = leftPos; leftPos = rightPos; rightPos = tmp }\n        left = leftPos.left\n        right = rightPos.right\n      }\n      if (fromArg == null && from == 0) left = leftSide\n      if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part\n        add(left, leftPos.top, null, leftPos.bottom)\n        left = leftSide\n        if (leftPos.bottom < rightPos.top) add(left, leftPos.bottom, null, rightPos.top)\n      }\n      if (toArg == null && to == lineLen) right = rightSide\n      if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left)\n        start = leftPos\n      if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right)\n        end = rightPos\n      if (left < leftSide + 1) left = leftSide\n      add(left, rightPos.top, right - left, rightPos.bottom)\n    })\n    return {start: start, end: end}\n  }\n\n  let sFrom = range.from(), sTo = range.to()\n  if (sFrom.line == sTo.line) {\n    drawForLine(sFrom.line, sFrom.ch, sTo.ch)\n  } else {\n    let fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line)\n    let singleVLine = visualLine(fromLine) == visualLine(toLine)\n    let leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end\n    let rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start\n    if (singleVLine) {\n      if (leftEnd.top < rightStart.top - 2) {\n        add(leftEnd.right, leftEnd.top, null, leftEnd.bottom)\n        add(leftSide, rightStart.top, rightStart.left, rightStart.bottom)\n      } else {\n        add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom)\n      }\n    }\n    if (leftEnd.bottom < rightStart.top)\n      add(leftSide, leftEnd.bottom, null, rightStart.top)\n  }\n\n  output.appendChild(fragment)\n}\n\n// Cursor-blinking\nexport function restartBlink(cm) {\n  if (!cm.state.focused) return\n  let display = cm.display\n  clearInterval(display.blinker)\n  let on = true\n  display.cursorDiv.style.visibility = \"\"\n  if (cm.options.cursorBlinkRate > 0)\n    display.blinker = setInterval(() => display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\",\n      cm.options.cursorBlinkRate)\n  else if (cm.options.cursorBlinkRate < 0)\n    display.cursorDiv.style.visibility = \"hidden\"\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/update_display.js",
    "content": "import { sawCollapsedSpans } from \"../line/saw_special_spans\"\nimport { heightAtLine, visualLineEndNo, visualLineNo } from \"../line/spans\"\nimport { getLine, lineNumberFor } from \"../line/utils_line\"\nimport { displayHeight, displayWidth, getDimensions, paddingVert, scrollGap } from \"../measurement/position_measurement\"\nimport { mac, webkit } from \"../util/browser\"\nimport { activeElt, removeChildren } from \"../util/dom\"\nimport { hasHandler, signal } from \"../util/event\"\nimport { indexOf } from \"../util/misc\"\n\nimport { buildLineElement, updateLineForChanges } from \"./update_line\"\nimport { startWorker } from \"./highlight_worker\"\nimport { maybeUpdateLineNumberWidth } from \"./line_numbers\"\nimport { measureForScrollbars, updateScrollbars } from \"./scrollbars\"\nimport { updateSelection } from \"./selection\"\nimport { updateHeightsInViewport, visibleLines } from \"./update_lines\"\nimport { adjustView, countDirtyView, resetView } from \"./view_tracking\"\n\n// DISPLAY DRAWING\n\nexport class DisplayUpdate {\n  constructor(cm, viewport, force) {\n    let display = cm.display\n\n    this.viewport = viewport\n    // Store some values that we'll need later (but don't want to force a relayout for)\n    this.visible = visibleLines(display, cm.doc, viewport)\n    this.editorIsHidden = !display.wrapper.offsetWidth\n    this.wrapperHeight = display.wrapper.clientHeight\n    this.wrapperWidth = display.wrapper.clientWidth\n    this.oldDisplayWidth = displayWidth(cm)\n    this.force = force\n    this.dims = getDimensions(cm)\n    this.events = []\n  }\n\n  signal(emitter, type) {\n    if (hasHandler(emitter, type))\n      this.events.push(arguments)\n  }\n  finish() {\n    for (let i = 0; i < this.events.length; i++)\n      signal.apply(null, this.events[i])\n  }\n}\n\nexport function maybeClipScrollbars(cm) {\n  let display = cm.display\n  if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n    display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth\n    display.heightForcer.style.height = scrollGap(cm) + \"px\"\n    display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\"\n    display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\"\n    display.scrollbarsClipped = true\n  }\n}\n\n// Does the actual updating of the line display. Bails out\n// (returning false) when there is nothing to be done and forced is\n// false.\nexport function updateDisplayIfNeeded(cm, update) {\n  let display = cm.display, doc = cm.doc\n\n  if (update.editorIsHidden) {\n    resetView(cm)\n    return false\n  }\n\n  // Bail out if the visible area is already rendered and nothing changed.\n  if (!update.force &&\n      update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n      (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n      display.renderedView == display.view && countDirtyView(cm) == 0)\n    return false\n\n  if (maybeUpdateLineNumberWidth(cm)) {\n    resetView(cm)\n    update.dims = getDimensions(cm)\n  }\n\n  // Compute a suitable new viewport (from & to)\n  let end = doc.first + doc.size\n  let from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first)\n  let to = Math.min(end, update.visible.to + cm.options.viewportMargin)\n  if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom)\n  if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo)\n  if (sawCollapsedSpans) {\n    from = visualLineNo(cm.doc, from)\n    to = visualLineEndNo(cm.doc, to)\n  }\n\n  let different = from != display.viewFrom || to != display.viewTo ||\n    display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth\n  adjustView(cm, from, to)\n\n  display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom))\n  // Position the mover div to align with the current scroll position\n  cm.display.mover.style.top = display.viewOffset + \"px\"\n\n  let toUpdate = countDirtyView(cm)\n  if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n      (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n    return false\n\n  // For big changes, we hide the enclosing element during the\n  // update, since that speeds up the operations on most browsers.\n  let focused = activeElt()\n  if (toUpdate > 4) display.lineDiv.style.display = \"none\"\n  patchDisplay(cm, display.updateLineNumbers, update.dims)\n  if (toUpdate > 4) display.lineDiv.style.display = \"\"\n  display.renderedView = display.view\n  // There might have been a widget with a focused element that got\n  // hidden or updated, if so re-focus it.\n  if (focused && activeElt() != focused && focused.offsetHeight) focused.focus()\n\n  // Prevent selection and cursors from interfering with the scroll\n  // width and height.\n  removeChildren(display.cursorDiv)\n  removeChildren(display.selectionDiv)\n  display.gutters.style.height = display.sizer.style.minHeight = 0\n\n  if (different) {\n    display.lastWrapHeight = update.wrapperHeight\n    display.lastWrapWidth = update.wrapperWidth\n    startWorker(cm, 400)\n  }\n\n  display.updateLineNumbers = null\n\n  return true\n}\n\nexport function postUpdateDisplay(cm, update) {\n  let viewport = update.viewport\n\n  for (let first = true;; first = false) {\n    if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n      // Clip forced viewport to actual scrollable area.\n      if (viewport && viewport.top != null)\n        viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}\n      // Updated line heights might result in the drawn area not\n      // actually covering the viewport. Keep looping until it does.\n      update.visible = visibleLines(cm.display, cm.doc, viewport)\n      if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n        break\n    }\n    if (!updateDisplayIfNeeded(cm, update)) break\n    updateHeightsInViewport(cm)\n    let barMeasure = measureForScrollbars(cm)\n    updateSelection(cm)\n    updateScrollbars(cm, barMeasure)\n    setDocumentHeight(cm, barMeasure)\n  }\n\n  update.signal(cm, \"update\", cm)\n  if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n    update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo)\n    cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo\n  }\n}\n\nexport function updateDisplaySimple(cm, viewport) {\n  let update = new DisplayUpdate(cm, viewport)\n  if (updateDisplayIfNeeded(cm, update)) {\n    updateHeightsInViewport(cm)\n    postUpdateDisplay(cm, update)\n    let barMeasure = measureForScrollbars(cm)\n    updateSelection(cm)\n    updateScrollbars(cm, barMeasure)\n    setDocumentHeight(cm, barMeasure)\n    update.finish()\n  }\n}\n\n// Sync the actual display DOM structure with display.view, removing\n// nodes for lines that are no longer in view, and creating the ones\n// that are not there yet, and updating the ones that are out of\n// date.\nfunction patchDisplay(cm, updateNumbersFrom, dims) {\n  let display = cm.display, lineNumbers = cm.options.lineNumbers\n  let container = display.lineDiv, cur = container.firstChild\n\n  function rm(node) {\n    let next = node.nextSibling\n    // Works around a throw-scroll bug in OS X Webkit\n    if (webkit && mac && cm.display.currentWheelTarget == node)\n      node.style.display = \"none\"\n    else\n      node.parentNode.removeChild(node)\n    return next\n  }\n\n  let view = display.view, lineN = display.viewFrom\n  // Loop over the elements in the view, syncing cur (the DOM nodes\n  // in display.lineDiv) with the view as we go.\n  for (let i = 0; i < view.length; i++) {\n    let lineView = view[i]\n    if (lineView.hidden) {\n    } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n      let node = buildLineElement(cm, lineView, lineN, dims)\n      container.insertBefore(node, cur)\n    } else { // Already drawn\n      while (cur != lineView.node) cur = rm(cur)\n      let updateNumber = lineNumbers && updateNumbersFrom != null &&\n        updateNumbersFrom <= lineN && lineView.lineNumber\n      if (lineView.changes) {\n        if (indexOf(lineView.changes, \"gutter\") > -1) updateNumber = false\n        updateLineForChanges(cm, lineView, lineN, dims)\n      }\n      if (updateNumber) {\n        removeChildren(lineView.lineNumber)\n        lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)))\n      }\n      cur = lineView.node.nextSibling\n    }\n    lineN += lineView.size\n  }\n  while (cur) cur = rm(cur)\n}\n\nexport function updateGutterSpace(cm) {\n  let width = cm.display.gutters.offsetWidth\n  cm.display.sizer.style.marginLeft = width + \"px\"\n}\n\nexport function setDocumentHeight(cm, measure) {\n  cm.display.sizer.style.minHeight = measure.docHeight + \"px\"\n  cm.display.heightForcer.style.top = measure.docHeight + \"px\"\n  cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\"\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/update_line.js",
    "content": "import { buildLineContent } from \"../line/line_data\"\nimport { lineNumberFor } from \"../line/utils_line\"\nimport { ie, ie_version } from \"../util/browser\"\nimport { elt } from \"../util/dom\"\nimport { signalLater } from \"../util/operation_group\"\n\n// When an aspect of a line changes, a string is added to\n// lineView.changes. This updates the relevant part of the line's\n// DOM structure.\nexport function updateLineForChanges(cm, lineView, lineN, dims) {\n  for (let j = 0; j < lineView.changes.length; j++) {\n    let type = lineView.changes[j]\n    if (type == \"text\") updateLineText(cm, lineView)\n    else if (type == \"gutter\") updateLineGutter(cm, lineView, lineN, dims)\n    else if (type == \"class\") updateLineClasses(cm, lineView)\n    else if (type == \"widget\") updateLineWidgets(cm, lineView, dims)\n  }\n  lineView.changes = null\n}\n\n// Lines with gutter elements, widgets or a background class need to\n// be wrapped, and have the extra elements added to the wrapper div\nfunction ensureLineWrapped(lineView) {\n  if (lineView.node == lineView.text) {\n    lineView.node = elt(\"div\", null, null, \"position: relative\")\n    if (lineView.text.parentNode)\n      lineView.text.parentNode.replaceChild(lineView.node, lineView.text)\n    lineView.node.appendChild(lineView.text)\n    if (ie && ie_version < 8) lineView.node.style.zIndex = 2\n  }\n  return lineView.node\n}\n\nfunction updateLineBackground(cm, lineView) {\n  let cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass\n  if (cls) cls += \" CodeMirror-linebackground\"\n  if (lineView.background) {\n    if (cls) lineView.background.className = cls\n    else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null }\n  } else if (cls) {\n    let wrap = ensureLineWrapped(lineView)\n    lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild)\n    cm.display.input.setUneditable(lineView.background)\n  }\n}\n\n// Wrapper around buildLineContent which will reuse the structure\n// in display.externalMeasured when possible.\nfunction getLineContent(cm, lineView) {\n  let ext = cm.display.externalMeasured\n  if (ext && ext.line == lineView.line) {\n    cm.display.externalMeasured = null\n    lineView.measure = ext.measure\n    return ext.built\n  }\n  return buildLineContent(cm, lineView)\n}\n\n// Redraw the line's text. Interacts with the background and text\n// classes because the mode may output tokens that influence these\n// classes.\nfunction updateLineText(cm, lineView) {\n  let cls = lineView.text.className\n  let built = getLineContent(cm, lineView)\n  if (lineView.text == lineView.node) lineView.node = built.pre\n  lineView.text.parentNode.replaceChild(built.pre, lineView.text)\n  lineView.text = built.pre\n  if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n    lineView.bgClass = built.bgClass\n    lineView.textClass = built.textClass\n    updateLineClasses(cm, lineView)\n  } else if (cls) {\n    lineView.text.className = cls\n  }\n}\n\nfunction updateLineClasses(cm, lineView) {\n  updateLineBackground(cm, lineView)\n  if (lineView.line.wrapClass)\n    ensureLineWrapped(lineView).className = lineView.line.wrapClass\n  else if (lineView.node != lineView.text)\n    lineView.node.className = \"\"\n  let textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass\n  lineView.text.className = textClass || \"\"\n}\n\nfunction updateLineGutter(cm, lineView, lineN, dims) {\n  if (lineView.gutter) {\n    lineView.node.removeChild(lineView.gutter)\n    lineView.gutter = null\n  }\n  if (lineView.gutterBackground) {\n    lineView.node.removeChild(lineView.gutterBackground)\n    lineView.gutterBackground = null\n  }\n  if (lineView.line.gutterClass) {\n    let wrap = ensureLineWrapped(lineView)\n    lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n                                    `left: ${cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth}px; width: ${dims.gutterTotalWidth}px`)\n    cm.display.input.setUneditable(lineView.gutterBackground)\n    wrap.insertBefore(lineView.gutterBackground, lineView.text)\n  }\n  let markers = lineView.line.gutterMarkers\n  if (cm.options.lineNumbers || markers) {\n    let wrap = ensureLineWrapped(lineView)\n    let gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", `left: ${cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth}px`)\n    cm.display.input.setUneditable(gutterWrap)\n    wrap.insertBefore(gutterWrap, lineView.text)\n    if (lineView.line.gutterClass)\n      gutterWrap.className += \" \" + lineView.line.gutterClass\n    if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n      lineView.lineNumber = gutterWrap.appendChild(\n        elt(\"div\", lineNumberFor(cm.options, lineN),\n            \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n            `left: ${dims.gutterLeft[\"CodeMirror-linenumbers\"]}px; width: ${cm.display.lineNumInnerWidth}px`))\n    if (markers) for (let k = 0; k < cm.options.gutters.length; ++k) {\n      let id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id]\n      if (found)\n        gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n                                   `left: ${dims.gutterLeft[id]}px; width: ${dims.gutterWidth[id]}px`))\n    }\n  }\n}\n\nfunction updateLineWidgets(cm, lineView, dims) {\n  if (lineView.alignable) lineView.alignable = null\n  for (let node = lineView.node.firstChild, next; node; node = next) {\n    next = node.nextSibling\n    if (node.className == \"CodeMirror-linewidget\")\n      lineView.node.removeChild(node)\n  }\n  insertLineWidgets(cm, lineView, dims)\n}\n\n// Build a line's DOM representation from scratch\nexport function buildLineElement(cm, lineView, lineN, dims) {\n  let built = getLineContent(cm, lineView)\n  lineView.text = lineView.node = built.pre\n  if (built.bgClass) lineView.bgClass = built.bgClass\n  if (built.textClass) lineView.textClass = built.textClass\n\n  updateLineClasses(cm, lineView)\n  updateLineGutter(cm, lineView, lineN, dims)\n  insertLineWidgets(cm, lineView, dims)\n  return lineView.node\n}\n\n// A lineView may contain multiple logical lines (when merged by\n// collapsed spans). The widgets for all of them need to be drawn.\nfunction insertLineWidgets(cm, lineView, dims) {\n  insertLineWidgetsFor(cm, lineView.line, lineView, dims, true)\n  if (lineView.rest) for (let i = 0; i < lineView.rest.length; i++)\n    insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false)\n}\n\nfunction insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n  if (!line.widgets) return\n  let wrap = ensureLineWrapped(lineView)\n  for (let i = 0, ws = line.widgets; i < ws.length; ++i) {\n    let widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\")\n    if (!widget.handleMouseEvents) node.setAttribute(\"cm-ignore-events\", \"true\")\n    positionLineWidget(widget, node, lineView, dims)\n    cm.display.input.setUneditable(node)\n    if (allowAbove && widget.above)\n      wrap.insertBefore(node, lineView.gutter || lineView.text)\n    else\n      wrap.appendChild(node)\n    signalLater(widget, \"redraw\")\n  }\n}\n\nfunction positionLineWidget(widget, node, lineView, dims) {\n  if (widget.noHScroll) {\n    ;(lineView.alignable || (lineView.alignable = [])).push(node)\n    let width = dims.wrapperWidth\n    node.style.left = dims.fixedPos + \"px\"\n    if (!widget.coverGutter) {\n      width -= dims.gutterTotalWidth\n      node.style.paddingLeft = dims.gutterTotalWidth + \"px\"\n    }\n    node.style.width = width + \"px\"\n  }\n  if (widget.coverGutter) {\n    node.style.zIndex = 5\n    node.style.position = \"relative\"\n    if (!widget.noHScroll) node.style.marginLeft = -dims.gutterTotalWidth + \"px\"\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/update_lines.js",
    "content": "import { heightAtLine } from \"../line/spans\"\nimport { getLine, lineAtHeight, updateLineHeight } from \"../line/utils_line\"\nimport { paddingTop, textHeight } from \"../measurement/position_measurement\"\nimport { ie, ie_version } from \"../util/browser\"\n\n// Read the actual heights of the rendered lines, and update their\n// stored heights to match.\nexport function updateHeightsInViewport(cm) {\n  let display = cm.display\n  let prevBottom = display.lineDiv.offsetTop\n  for (let i = 0; i < display.view.length; i++) {\n    let cur = display.view[i], height\n    if (cur.hidden) continue\n    if (ie && ie_version < 8) {\n      let bot = cur.node.offsetTop + cur.node.offsetHeight\n      height = bot - prevBottom\n      prevBottom = bot\n    } else {\n      let box = cur.node.getBoundingClientRect()\n      height = box.bottom - box.top\n    }\n    let diff = cur.line.height - height\n    if (height < 2) height = textHeight(display)\n    if (diff > .001 || diff < -.001) {\n      updateLineHeight(cur.line, height)\n      updateWidgetHeight(cur.line)\n      if (cur.rest) for (let j = 0; j < cur.rest.length; j++)\n        updateWidgetHeight(cur.rest[j])\n    }\n  }\n}\n\n// Read and store the height of line widgets associated with the\n// given line.\nfunction updateWidgetHeight(line) {\n  if (line.widgets) for (let i = 0; i < line.widgets.length; ++i)\n    line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight\n}\n\n// Compute the lines that are visible in a given viewport (defaults\n// the the current scroll position). viewport may contain top,\n// height, and ensure (see op.scrollToPos) properties.\nexport function visibleLines(display, doc, viewport) {\n  let top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop\n  top = Math.floor(top - paddingTop(display))\n  let bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight\n\n  let from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom)\n  // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n  // forces those lines into the viewport (if possible).\n  if (viewport && viewport.ensure) {\n    let ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line\n    if (ensureFrom < from) {\n      from = ensureFrom\n      to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight)\n    } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n      from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight)\n      to = ensureTo\n    }\n  }\n  return {from: from, to: Math.max(to, from + 1)}\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/display/view_tracking.js",
    "content": "import { buildViewArray } from \"../line/line_data\"\nimport { sawCollapsedSpans } from \"../line/saw_special_spans\"\nimport { visualLineEndNo, visualLineNo } from \"../line/spans\"\nimport { findViewIndex } from \"../measurement/position_measurement\"\nimport { indexOf } from \"../util/misc\"\n\n// Updates the display.view data structure for a given change to the\n// document. From and to are in pre-change coordinates. Lendiff is\n// the amount of lines added or subtracted by the change. This is\n// used for changes that span multiple lines, or change the way\n// lines are divided into visual lines. regLineChange (below)\n// registers single-line changes.\nexport function regChange(cm, from, to, lendiff) {\n  if (from == null) from = cm.doc.first\n  if (to == null) to = cm.doc.first + cm.doc.size\n  if (!lendiff) lendiff = 0\n\n  let display = cm.display\n  if (lendiff && to < display.viewTo &&\n      (display.updateLineNumbers == null || display.updateLineNumbers > from))\n    display.updateLineNumbers = from\n\n  cm.curOp.viewChanged = true\n\n  if (from >= display.viewTo) { // Change after\n    if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n      resetView(cm)\n  } else if (to <= display.viewFrom) { // Change before\n    if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n      resetView(cm)\n    } else {\n      display.viewFrom += lendiff\n      display.viewTo += lendiff\n    }\n  } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n    resetView(cm)\n  } else if (from <= display.viewFrom) { // Top overlap\n    let cut = viewCuttingPoint(cm, to, to + lendiff, 1)\n    if (cut) {\n      display.view = display.view.slice(cut.index)\n      display.viewFrom = cut.lineN\n      display.viewTo += lendiff\n    } else {\n      resetView(cm)\n    }\n  } else if (to >= display.viewTo) { // Bottom overlap\n    let cut = viewCuttingPoint(cm, from, from, -1)\n    if (cut) {\n      display.view = display.view.slice(0, cut.index)\n      display.viewTo = cut.lineN\n    } else {\n      resetView(cm)\n    }\n  } else { // Gap in the middle\n    let cutTop = viewCuttingPoint(cm, from, from, -1)\n    let cutBot = viewCuttingPoint(cm, to, to + lendiff, 1)\n    if (cutTop && cutBot) {\n      display.view = display.view.slice(0, cutTop.index)\n        .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n        .concat(display.view.slice(cutBot.index))\n      display.viewTo += lendiff\n    } else {\n      resetView(cm)\n    }\n  }\n\n  let ext = display.externalMeasured\n  if (ext) {\n    if (to < ext.lineN)\n      ext.lineN += lendiff\n    else if (from < ext.lineN + ext.size)\n      display.externalMeasured = null\n  }\n}\n\n// Register a change to a single line. Type must be one of \"text\",\n// \"gutter\", \"class\", \"widget\"\nexport function regLineChange(cm, line, type) {\n  cm.curOp.viewChanged = true\n  let display = cm.display, ext = cm.display.externalMeasured\n  if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n    display.externalMeasured = null\n\n  if (line < display.viewFrom || line >= display.viewTo) return\n  let lineView = display.view[findViewIndex(cm, line)]\n  if (lineView.node == null) return\n  let arr = lineView.changes || (lineView.changes = [])\n  if (indexOf(arr, type) == -1) arr.push(type)\n}\n\n// Clear the view.\nexport function resetView(cm) {\n  cm.display.viewFrom = cm.display.viewTo = cm.doc.first\n  cm.display.view = []\n  cm.display.viewOffset = 0\n}\n\nfunction viewCuttingPoint(cm, oldN, newN, dir) {\n  let index = findViewIndex(cm, oldN), diff, view = cm.display.view\n  if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n    return {index: index, lineN: newN}\n  let n = cm.display.viewFrom\n  for (let i = 0; i < index; i++)\n    n += view[i].size\n  if (n != oldN) {\n    if (dir > 0) {\n      if (index == view.length - 1) return null\n      diff = (n + view[index].size) - oldN\n      index++\n    } else {\n      diff = n - oldN\n    }\n    oldN += diff; newN += diff\n  }\n  while (visualLineNo(cm.doc, newN) != newN) {\n    if (index == (dir < 0 ? 0 : view.length - 1)) return null\n    newN += dir * view[index - (dir < 0 ? 1 : 0)].size\n    index += dir\n  }\n  return {index: index, lineN: newN}\n}\n\n// Force the view to cover a given range, adding empty view element\n// or clipping off existing ones as needed.\nexport function adjustView(cm, from, to) {\n  let display = cm.display, view = display.view\n  if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n    display.view = buildViewArray(cm, from, to)\n    display.viewFrom = from\n  } else {\n    if (display.viewFrom > from)\n      display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view)\n    else if (display.viewFrom < from)\n      display.view = display.view.slice(findViewIndex(cm, from))\n    display.viewFrom = from\n    if (display.viewTo < to)\n      display.view = display.view.concat(buildViewArray(cm, display.viewTo, to))\n    else if (display.viewTo > to)\n      display.view = display.view.slice(0, findViewIndex(cm, to))\n  }\n  display.viewTo = to\n}\n\n// Count the number of lines in the view whose DOM representation is\n// out of date (or nonexistent).\nexport function countDirtyView(cm) {\n  let view = cm.display.view, dirty = 0\n  for (let i = 0; i < view.length; i++) {\n    let lineView = view[i]\n    if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty\n  }\n  return dirty\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/CodeMirror.js",
    "content": "import { Display } from \"../display/Display\"\nimport { onFocus, onBlur } from \"../display/focus\"\nimport { setGuttersForLineNumbers, updateGutters } from \"../display/gutters\"\nimport { maybeUpdateLineNumberWidth } from \"../display/line_numbers\"\nimport { endOperation, operation, startOperation } from \"../display/operations\"\nimport { initScrollbars } from \"../display/scrollbars\"\nimport { onScrollWheel, setScrollLeft, setScrollTop } from \"../display/scroll_events\"\nimport { clipPos, Pos } from \"../line/pos\"\nimport { posFromMouse } from \"../measurement/position_measurement\"\nimport { eventInWidget } from \"../measurement/widgets\"\nimport Doc from \"../model/Doc\"\nimport { attachDoc } from \"../model/document_data\"\nimport { Range } from \"../model/selection\"\nimport { extendSelection } from \"../model/selection_updates\"\nimport { captureRightClick, ie, ie_version, mobile, webkit } from \"../util/browser\"\nimport { e_preventDefault, e_stop, on, signal, signalDOMEvent } from \"../util/event\"\nimport { bind, copyObj, Delayed } from \"../util/misc\"\n\nimport { clearDragCursor, onDragOver, onDragStart, onDrop } from \"./drop_events\"\nimport { ensureGlobalHandlers } from \"./global_events\"\nimport { onKeyDown, onKeyPress, onKeyUp } from \"./key_events\"\nimport { clickInGutter, onContextMenu, onMouseDown } from \"./mouse_events\"\nimport { themeChanged } from \"./utils\"\nimport { defaults, optionHandlers, Init } from \"./options\"\n\n// A CodeMirror instance represents an editor. This is the object\n// that user code is usually dealing with.\n\nexport function CodeMirror(place, options) {\n  if (!(this instanceof CodeMirror)) return new CodeMirror(place, options)\n\n  this.options = options = options ? copyObj(options) : {}\n  // Determine effective options based on given values and defaults.\n  copyObj(defaults, options, false)\n  setGuttersForLineNumbers(options)\n\n  let doc = options.value\n  if (typeof doc == \"string\") doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction)\n  this.doc = doc\n\n  let input = new CodeMirror.inputStyles[options.inputStyle](this)\n  let display = this.display = new Display(place, doc, input)\n  display.wrapper.CodeMirror = this\n  updateGutters(this)\n  themeChanged(this)\n  if (options.lineWrapping)\n    this.display.wrapper.className += \" CodeMirror-wrap\"\n  initScrollbars(this)\n\n  this.state = {\n    keyMaps: [],  // stores maps added by addKeyMap\n    overlays: [], // highlighting overlays, as added by addOverlay\n    modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info\n    overwrite: false,\n    delayingBlurEvent: false,\n    focused: false,\n    suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n    pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll\n    selectingText: false,\n    draggingText: false,\n    highlight: new Delayed(), // stores highlight worker timeout\n    keySeq: null,  // Unfinished key sequence\n    specialChars: null\n  }\n\n  if (options.autofocus && !mobile) display.input.focus()\n\n  // Override magic textarea content restore that IE sometimes does\n  // on our hidden textarea on reload\n  if (ie && ie_version < 11) setTimeout(() => this.display.input.reset(true), 20)\n\n  registerEventHandlers(this)\n  ensureGlobalHandlers()\n\n  startOperation(this)\n  this.curOp.forceUpdate = true\n  attachDoc(this, doc)\n\n  if ((options.autofocus && !mobile) || this.hasFocus())\n    setTimeout(bind(onFocus, this), 20)\n  else\n    onBlur(this)\n\n  for (let opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt))\n    optionHandlers[opt](this, options[opt], Init)\n  maybeUpdateLineNumberWidth(this)\n  if (options.finishInit) options.finishInit(this)\n  for (let i = 0; i < initHooks.length; ++i) initHooks[i](this)\n  endOperation(this)\n  // Suppress optimizelegibility in Webkit, since it breaks text\n  // measuring on line wrapping boundaries.\n  if (webkit && options.lineWrapping &&\n      getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n    display.lineDiv.style.textRendering = \"auto\"\n}\n\n// The default configuration options.\nCodeMirror.defaults = defaults\n// Functions to run when options are changed.\nCodeMirror.optionHandlers = optionHandlers\n\nexport default CodeMirror\n\n// Attach the necessary event handlers when initializing the editor\nfunction registerEventHandlers(cm) {\n  let d = cm.display\n  on(d.scroller, \"mousedown\", operation(cm, onMouseDown))\n  // Older IE's will not fire a second mousedown for a double click\n  if (ie && ie_version < 11)\n    on(d.scroller, \"dblclick\", operation(cm, e => {\n      if (signalDOMEvent(cm, e)) return\n      let pos = posFromMouse(cm, e)\n      if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) return\n      e_preventDefault(e)\n      let word = cm.findWordAt(pos)\n      extendSelection(cm.doc, word.anchor, word.head)\n    }))\n  else\n    on(d.scroller, \"dblclick\", e => signalDOMEvent(cm, e) || e_preventDefault(e))\n  // Some browsers fire contextmenu *after* opening the menu, at\n  // which point we can't mess with it anymore. Context menu is\n  // handled in onMouseDown for these browsers.\n  if (!captureRightClick) on(d.scroller, \"contextmenu\", e => onContextMenu(cm, e))\n\n  // Used to suppress mouse event handling when a touch happens\n  let touchFinished, prevTouch = {end: 0}\n  function finishTouch() {\n    if (d.activeTouch) {\n      touchFinished = setTimeout(() => d.activeTouch = null, 1000)\n      prevTouch = d.activeTouch\n      prevTouch.end = +new Date\n    }\n  }\n  function isMouseLikeTouchEvent(e) {\n    if (e.touches.length != 1) return false\n    let touch = e.touches[0]\n    return touch.radiusX <= 1 && touch.radiusY <= 1\n  }\n  function farAway(touch, other) {\n    if (other.left == null) return true\n    let dx = other.left - touch.left, dy = other.top - touch.top\n    return dx * dx + dy * dy > 20 * 20\n  }\n  on(d.scroller, \"touchstart\", e => {\n    if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) {\n      d.input.ensurePolled()\n      clearTimeout(touchFinished)\n      let now = +new Date\n      d.activeTouch = {start: now, moved: false,\n                       prev: now - prevTouch.end <= 300 ? prevTouch : null}\n      if (e.touches.length == 1) {\n        d.activeTouch.left = e.touches[0].pageX\n        d.activeTouch.top = e.touches[0].pageY\n      }\n    }\n  })\n  on(d.scroller, \"touchmove\", () => {\n    if (d.activeTouch) d.activeTouch.moved = true\n  })\n  on(d.scroller, \"touchend\", e => {\n    let touch = d.activeTouch\n    if (touch && !eventInWidget(d, e) && touch.left != null &&\n        !touch.moved && new Date - touch.start < 300) {\n      let pos = cm.coordsChar(d.activeTouch, \"page\"), range\n      if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n        range = new Range(pos, pos)\n      else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n        range = cm.findWordAt(pos)\n      else // Triple tap\n        range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0)))\n      cm.setSelection(range.anchor, range.head)\n      cm.focus()\n      e_preventDefault(e)\n    }\n    finishTouch()\n  })\n  on(d.scroller, \"touchcancel\", finishTouch)\n\n  // Sync scrolling between fake scrollbars and real scrollable\n  // area, ensure viewport is updated when scrolling.\n  on(d.scroller, \"scroll\", () => {\n    if (d.scroller.clientHeight) {\n      setScrollTop(cm, d.scroller.scrollTop)\n      setScrollLeft(cm, d.scroller.scrollLeft, true)\n      signal(cm, \"scroll\", cm)\n    }\n  })\n\n  // Listen to wheel events in order to try and update the viewport on time.\n  on(d.scroller, \"mousewheel\", e => onScrollWheel(cm, e))\n  on(d.scroller, \"DOMMouseScroll\", e => onScrollWheel(cm, e))\n\n  // Prevent wrapper from ever scrolling\n  on(d.wrapper, \"scroll\", () => d.wrapper.scrollTop = d.wrapper.scrollLeft = 0)\n\n  d.dragFunctions = {\n    enter: e => {if (!signalDOMEvent(cm, e)) e_stop(e)},\n    over: e => {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e) }},\n    start: e => onDragStart(cm, e),\n    drop: operation(cm, onDrop),\n    leave: e => {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm) }}\n  }\n\n  let inp = d.input.getField()\n  on(inp, \"keyup\", e => onKeyUp.call(cm, e))\n  on(inp, \"keydown\", operation(cm, onKeyDown))\n  on(inp, \"keypress\", operation(cm, onKeyPress))\n  on(inp, \"focus\", e => onFocus(cm, e))\n  on(inp, \"blur\", e => onBlur(cm, e))\n}\n\nlet initHooks = []\nCodeMirror.defineInitHook = f => initHooks.push(f)\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/commands.js",
    "content": "import { deleteNearSelection } from \"./deleteNearSelection\"\nimport { runInOp } from \"../display/operations\"\nimport { ensureCursorVisible } from \"../display/scrolling\"\nimport { endOfLine } from \"../input/movement\"\nimport { clipPos, Pos } from \"../line/pos\"\nimport { visualLine, visualLineEnd } from \"../line/spans\"\nimport { getLine, lineNo } from \"../line/utils_line\"\nimport { Range } from \"../model/selection\"\nimport { selectAll } from \"../model/selection_updates\"\nimport { countColumn, sel_dontScroll, sel_move, spaceStr } from \"../util/misc\"\nimport { getOrder } from \"../util/bidi\"\n\n// Commands are parameter-less actions that can be performed on an\n// editor, mostly used for keybindings.\nexport let commands = {\n  selectAll: selectAll,\n  singleSelection: cm => cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll),\n  killLine: cm => deleteNearSelection(cm, range => {\n    if (range.empty()) {\n      let len = getLine(cm.doc, range.head.line).text.length\n      if (range.head.ch == len && range.head.line < cm.lastLine())\n        return {from: range.head, to: Pos(range.head.line + 1, 0)}\n      else\n        return {from: range.head, to: Pos(range.head.line, len)}\n    } else {\n      return {from: range.from(), to: range.to()}\n    }\n  }),\n  deleteLine: cm => deleteNearSelection(cm, range => ({\n    from: Pos(range.from().line, 0),\n    to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n  })),\n  delLineLeft: cm => deleteNearSelection(cm, range => ({\n    from: Pos(range.from().line, 0), to: range.from()\n  })),\n  delWrappedLineLeft: cm => deleteNearSelection(cm, range => {\n    let top = cm.charCoords(range.head, \"div\").top + 5\n    let leftPos = cm.coordsChar({left: 0, top: top}, \"div\")\n    return {from: leftPos, to: range.from()}\n  }),\n  delWrappedLineRight: cm => deleteNearSelection(cm, range => {\n    let top = cm.charCoords(range.head, \"div\").top + 5\n    let rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n    return {from: range.from(), to: rightPos }\n  }),\n  undo: cm => cm.undo(),\n  redo: cm => cm.redo(),\n  undoSelection: cm => cm.undoSelection(),\n  redoSelection: cm => cm.redoSelection(),\n  goDocStart: cm => cm.extendSelection(Pos(cm.firstLine(), 0)),\n  goDocEnd: cm => cm.extendSelection(Pos(cm.lastLine())),\n  goLineStart: cm => cm.extendSelectionsBy(range => lineStart(cm, range.head.line),\n    {origin: \"+move\", bias: 1}\n  ),\n  goLineStartSmart: cm => cm.extendSelectionsBy(range => lineStartSmart(cm, range.head),\n    {origin: \"+move\", bias: 1}\n  ),\n  goLineEnd: cm => cm.extendSelectionsBy(range => lineEnd(cm, range.head.line),\n    {origin: \"+move\", bias: -1}\n  ),\n  goLineRight: cm => cm.extendSelectionsBy(range => {\n    let top = cm.charCoords(range.head, \"div\").top + 5\n    return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n  }, sel_move),\n  goLineLeft: cm => cm.extendSelectionsBy(range => {\n    let top = cm.charCoords(range.head, \"div\").top + 5\n    return cm.coordsChar({left: 0, top: top}, \"div\")\n  }, sel_move),\n  goLineLeftSmart: cm => cm.extendSelectionsBy(range => {\n    let top = cm.charCoords(range.head, \"div\").top + 5\n    let pos = cm.coordsChar({left: 0, top: top}, \"div\")\n    if (pos.ch < cm.getLine(pos.line).search(/\\S/)) return lineStartSmart(cm, range.head)\n    return pos\n  }, sel_move),\n  goLineUp: cm => cm.moveV(-1, \"line\"),\n  goLineDown: cm => cm.moveV(1, \"line\"),\n  goPageUp: cm => cm.moveV(-1, \"page\"),\n  goPageDown: cm => cm.moveV(1, \"page\"),\n  goCharLeft: cm => cm.moveH(-1, \"char\"),\n  goCharRight: cm => cm.moveH(1, \"char\"),\n  goColumnLeft: cm => cm.moveH(-1, \"column\"),\n  goColumnRight: cm => cm.moveH(1, \"column\"),\n  goWordLeft: cm => cm.moveH(-1, \"word\"),\n  goGroupRight: cm => cm.moveH(1, \"group\"),\n  goGroupLeft: cm => cm.moveH(-1, \"group\"),\n  goWordRight: cm => cm.moveH(1, \"word\"),\n  delCharBefore: cm => cm.deleteH(-1, \"char\"),\n  delCharAfter: cm => cm.deleteH(1, \"char\"),\n  delWordBefore: cm => cm.deleteH(-1, \"word\"),\n  delWordAfter: cm => cm.deleteH(1, \"word\"),\n  delGroupBefore: cm => cm.deleteH(-1, \"group\"),\n  delGroupAfter: cm => cm.deleteH(1, \"group\"),\n  indentAuto: cm => cm.indentSelection(\"smart\"),\n  indentMore: cm => cm.indentSelection(\"add\"),\n  indentLess: cm => cm.indentSelection(\"subtract\"),\n  insertTab: cm => cm.replaceSelection(\"\\t\"),\n  insertSoftTab: cm => {\n    let spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize\n    for (let i = 0; i < ranges.length; i++) {\n      let pos = ranges[i].from()\n      let col = countColumn(cm.getLine(pos.line), pos.ch, tabSize)\n      spaces.push(spaceStr(tabSize - col % tabSize))\n    }\n    cm.replaceSelections(spaces)\n  },\n  defaultTab: cm => {\n    if (cm.somethingSelected()) cm.indentSelection(\"add\")\n    else cm.execCommand(\"insertTab\")\n  },\n  // Swap the two chars left and right of each selection's head.\n  // Move cursor behind the two swapped characters afterwards.\n  //\n  // Doesn't consider line feeds a character.\n  // Doesn't scan more than one line above to find a character.\n  // Doesn't do anything on an empty line.\n  // Doesn't do anything with non-empty selections.\n  transposeChars: cm => runInOp(cm, () => {\n    let ranges = cm.listSelections(), newSel = []\n    for (let i = 0; i < ranges.length; i++) {\n      if (!ranges[i].empty()) continue\n      let cur = ranges[i].head, line = getLine(cm.doc, cur.line).text\n      if (line) {\n        if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1)\n        if (cur.ch > 0) {\n          cur = new Pos(cur.line, cur.ch + 1)\n          cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n                          Pos(cur.line, cur.ch - 2), cur, \"+transpose\")\n        } else if (cur.line > cm.doc.first) {\n          let prev = getLine(cm.doc, cur.line - 1).text\n          if (prev) {\n            cur = new Pos(cur.line, 1)\n            cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n                            prev.charAt(prev.length - 1),\n                            Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\")\n          }\n        }\n      }\n      newSel.push(new Range(cur, cur))\n    }\n    cm.setSelections(newSel)\n  }),\n  newlineAndIndent: cm => runInOp(cm, () => {\n    let sels = cm.listSelections()\n    for (let i = sels.length - 1; i >= 0; i--)\n      cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\")\n    sels = cm.listSelections()\n    for (let i = 0; i < sels.length; i++)\n      cm.indentLine(sels[i].from().line, null, true)\n    ensureCursorVisible(cm)\n  }),\n  openLine: cm => cm.replaceSelection(\"\\n\", \"start\"),\n  toggleOverwrite: cm => cm.toggleOverwrite()\n}\n\n\nfunction lineStart(cm, lineN) {\n  let line = getLine(cm.doc, lineN)\n  let visual = visualLine(line)\n  if (visual != line) lineN = lineNo(visual)\n  return endOfLine(true, cm, visual, lineN, 1)\n}\nfunction lineEnd(cm, lineN) {\n  let line = getLine(cm.doc, lineN)\n  let visual = visualLineEnd(line)\n  if (visual != line) lineN = lineNo(visual)\n  return endOfLine(true, cm, line, lineN, -1)\n}\nfunction lineStartSmart(cm, pos) {\n  let start = lineStart(cm, pos.line)\n  let line = getLine(cm.doc, start.line)\n  let order = getOrder(line, cm.doc.direction)\n  if (!order || order[0].level == 0) {\n    let firstNonWS = Math.max(0, line.text.search(/\\S/))\n    let inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch\n    return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n  }\n  return start\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/deleteNearSelection.js",
    "content": "import { runInOp } from \"../display/operations\"\nimport { ensureCursorVisible } from \"../display/scrolling\"\nimport { cmp } from \"../line/pos\"\nimport { replaceRange } from \"../model/changes\"\nimport { lst } from \"../util/misc\"\n\n// Helper for deleting text near the selection(s), used to implement\n// backspace, delete, and similar functionality.\nexport function deleteNearSelection(cm, compute) {\n  let ranges = cm.doc.sel.ranges, kill = []\n  // Build up a set of ranges to kill first, merging overlapping\n  // ranges.\n  for (let i = 0; i < ranges.length; i++) {\n    let toKill = compute(ranges[i])\n    while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n      let replaced = kill.pop()\n      if (cmp(replaced.from, toKill.from) < 0) {\n        toKill.from = replaced.from\n        break\n      }\n    }\n    kill.push(toKill)\n  }\n  // Next, remove those actual ranges.\n  runInOp(cm, () => {\n    for (let i = kill.length - 1; i >= 0; i--)\n      replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\")\n    ensureCursorVisible(cm)\n  })\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/drop_events.js",
    "content": "import { drawSelectionCursor } from \"../display/selection\"\nimport { operation } from \"../display/operations\"\nimport { clipPos } from \"../line/pos\"\nimport { posFromMouse } from \"../measurement/position_measurement\"\nimport { eventInWidget } from \"../measurement/widgets\"\nimport { makeChange, replaceRange } from \"../model/changes\"\nimport { changeEnd } from \"../model/change_measurement\"\nimport { simpleSelection } from \"../model/selection\"\nimport { setSelectionNoUndo, setSelectionReplaceHistory } from \"../model/selection_updates\"\nimport { ie, presto, safari } from \"../util/browser\"\nimport { elt, removeChildrenAndAdd } from \"../util/dom\"\nimport { e_preventDefault, e_stop, signalDOMEvent } from \"../util/event\"\nimport { indexOf } from \"../util/misc\"\n\n// Kludge to work around strange IE behavior where it'll sometimes\n// re-fire a series of drag-related events right after the drop (#1551)\nlet lastDrop = 0\n\nexport function onDrop(e) {\n  let cm = this\n  clearDragCursor(cm)\n  if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n    return\n  e_preventDefault(e)\n  if (ie) lastDrop = +new Date\n  let pos = posFromMouse(cm, e, true), files = e.dataTransfer.files\n  if (!pos || cm.isReadOnly()) return\n  // Might be a file drop, in which case we simply extract the text\n  // and insert it.\n  if (files && files.length && window.FileReader && window.File) {\n    let n = files.length, text = Array(n), read = 0\n    let loadFile = (file, i) => {\n      if (cm.options.allowDropFileTypes &&\n          indexOf(cm.options.allowDropFileTypes, file.type) == -1)\n        return\n\n      let reader = new FileReader\n      reader.onload = operation(cm, () => {\n        let content = reader.result\n        if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) content = \"\"\n        text[i] = content\n        if (++read == n) {\n          pos = clipPos(cm.doc, pos)\n          let change = {from: pos, to: pos,\n                        text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),\n                        origin: \"paste\"}\n          makeChange(cm.doc, change)\n          setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)))\n        }\n      })\n      reader.readAsText(file)\n    }\n    for (let i = 0; i < n; ++i) loadFile(files[i], i)\n  } else { // Normal drop\n    // Don't do a replace if the drop happened inside of the selected text.\n    if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n      cm.state.draggingText(e)\n      // Ensure the editor is re-focused\n      setTimeout(() => cm.display.input.focus(), 20)\n      return\n    }\n    try {\n      let text = e.dataTransfer.getData(\"Text\")\n      if (text) {\n        let selected\n        if (cm.state.draggingText && !cm.state.draggingText.copy)\n          selected = cm.listSelections()\n        setSelectionNoUndo(cm.doc, simpleSelection(pos, pos))\n        if (selected) for (let i = 0; i < selected.length; ++i)\n          replaceRange(cm.doc, \"\", selected[i].anchor, selected[i].head, \"drag\")\n        cm.replaceSelection(text, \"around\", \"paste\")\n        cm.display.input.focus()\n      }\n    }\n    catch(e){}\n  }\n}\n\nexport function onDragStart(cm, e) {\n  if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n  if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) return\n\n  e.dataTransfer.setData(\"Text\", cm.getSelection())\n  e.dataTransfer.effectAllowed = \"copyMove\"\n\n  // Use dummy image instead of default browsers image.\n  // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n  if (e.dataTransfer.setDragImage && !safari) {\n    let img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\")\n    img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\"\n    if (presto) {\n      img.width = img.height = 1\n      cm.display.wrapper.appendChild(img)\n      // Force a relayout, or Opera won't use our image for some obscure reason\n      img._top = img.offsetTop\n    }\n    e.dataTransfer.setDragImage(img, 0, 0)\n    if (presto) img.parentNode.removeChild(img)\n  }\n}\n\nexport function onDragOver(cm, e) {\n  let pos = posFromMouse(cm, e)\n  if (!pos) return\n  let frag = document.createDocumentFragment()\n  drawSelectionCursor(cm, pos, frag)\n  if (!cm.display.dragCursor) {\n    cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\")\n    cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv)\n  }\n  removeChildrenAndAdd(cm.display.dragCursor, frag)\n}\n\nexport function clearDragCursor(cm) {\n  if (cm.display.dragCursor) {\n    cm.display.lineSpace.removeChild(cm.display.dragCursor)\n    cm.display.dragCursor = null\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/fromTextArea.js",
    "content": "import { CodeMirror } from \"./CodeMirror\"\nimport { activeElt } from \"../util/dom\"\nimport { off, on } from \"../util/event\"\nimport { copyObj } from \"../util/misc\"\n\nexport function fromTextArea(textarea, options) {\n  options = options ? copyObj(options) : {}\n  options.value = textarea.value\n  if (!options.tabindex && textarea.tabIndex)\n    options.tabindex = textarea.tabIndex\n  if (!options.placeholder && textarea.placeholder)\n    options.placeholder = textarea.placeholder\n  // Set autofocus to true if this textarea is focused, or if it has\n  // autofocus and no other element is focused.\n  if (options.autofocus == null) {\n    let hasFocus = activeElt()\n    options.autofocus = hasFocus == textarea ||\n      textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body\n  }\n\n  function save() {textarea.value = cm.getValue()}\n\n  let realSubmit\n  if (textarea.form) {\n    on(textarea.form, \"submit\", save)\n    // Deplorable hack to make the submit method do the right thing.\n    if (!options.leaveSubmitMethodAlone) {\n      let form = textarea.form\n      realSubmit = form.submit\n      try {\n        let wrappedSubmit = form.submit = () => {\n          save()\n          form.submit = realSubmit\n          form.submit()\n          form.submit = wrappedSubmit\n        }\n      } catch(e) {}\n    }\n  }\n\n  options.finishInit = cm => {\n    cm.save = save\n    cm.getTextArea = () => textarea\n    cm.toTextArea = () => {\n      cm.toTextArea = isNaN // Prevent this from being ran twice\n      save()\n      textarea.parentNode.removeChild(cm.getWrapperElement())\n      textarea.style.display = \"\"\n      if (textarea.form) {\n        off(textarea.form, \"submit\", save)\n        if (typeof textarea.form.submit == \"function\")\n          textarea.form.submit = realSubmit\n      }\n    }\n  }\n\n  textarea.style.display = \"none\"\n  let cm = CodeMirror(node => textarea.parentNode.insertBefore(node, textarea.nextSibling),\n    options)\n  return cm\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/global_events.js",
    "content": "import { onBlur } from \"../display/focus\"\nimport { on } from \"../util/event\"\n\n// These must be handled carefully, because naively registering a\n// handler for each editor will cause the editors to never be\n// garbage collected.\n\nfunction forEachCodeMirror(f) {\n  if (!document.body.getElementsByClassName) return\n  let byClass = document.body.getElementsByClassName(\"CodeMirror\")\n  for (let i = 0; i < byClass.length; i++) {\n    let cm = byClass[i].CodeMirror\n    if (cm) f(cm)\n  }\n}\n\nlet globalsRegistered = false\nexport function ensureGlobalHandlers() {\n  if (globalsRegistered) return\n  registerGlobalHandlers()\n  globalsRegistered = true\n}\nfunction registerGlobalHandlers() {\n  // When the window resizes, we need to refresh active editors.\n  let resizeTimer\n  on(window, \"resize\", () => {\n    if (resizeTimer == null) resizeTimer = setTimeout(() => {\n      resizeTimer = null\n      forEachCodeMirror(onResize)\n    }, 100)\n  })\n  // When the window loses focus, we want to show the editor as blurred\n  on(window, \"blur\", () => forEachCodeMirror(onBlur))\n}\n// Called when the window resizes\nfunction onResize(cm) {\n  let d = cm.display\n  if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth)\n    return\n  // Might be a text scaling operation, clear size caches.\n  d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null\n  d.scrollbarsClipped = false\n  cm.setSize()\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/key_events.js",
    "content": "import { signalLater } from \"../util/operation_group\"\nimport { restartBlink } from \"../display/selection\"\nimport { isModifierKey, keyName, lookupKey } from \"../input/keymap\"\nimport { eventInWidget } from \"../measurement/widgets\"\nimport { ie, ie_version, mac, presto } from \"../util/browser\"\nimport { activeElt, addClass, rmClass } from \"../util/dom\"\nimport { e_preventDefault, off, on, signalDOMEvent } from \"../util/event\"\nimport { hasCopyEvent } from \"../util/feature_detection\"\nimport { Delayed, Pass } from \"../util/misc\"\n\nimport { commands } from \"./commands\"\n\n// Run a handler that was bound to a key.\nfunction doHandleBinding(cm, bound, dropShift) {\n  if (typeof bound == \"string\") {\n    bound = commands[bound]\n    if (!bound) return false\n  }\n  // Ensure previous input has been read, so that the handler sees a\n  // consistent view of the document\n  cm.display.input.ensurePolled()\n  let prevShift = cm.display.shift, done = false\n  try {\n    if (cm.isReadOnly()) cm.state.suppressEdits = true\n    if (dropShift) cm.display.shift = false\n    done = bound(cm) != Pass\n  } finally {\n    cm.display.shift = prevShift\n    cm.state.suppressEdits = false\n  }\n  return done\n}\n\nfunction lookupKeyForEditor(cm, name, handle) {\n  for (let i = 0; i < cm.state.keyMaps.length; i++) {\n    let result = lookupKey(name, cm.state.keyMaps[i], handle, cm)\n    if (result) return result\n  }\n  return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n    || lookupKey(name, cm.options.keyMap, handle, cm)\n}\n\nlet stopSeq = new Delayed\nfunction dispatchKey(cm, name, e, handle) {\n  let seq = cm.state.keySeq\n  if (seq) {\n    if (isModifierKey(name)) return \"handled\"\n    stopSeq.set(50, () => {\n      if (cm.state.keySeq == seq) {\n        cm.state.keySeq = null\n        cm.display.input.reset()\n      }\n    })\n    name = seq + \" \" + name\n  }\n  let result = lookupKeyForEditor(cm, name, handle)\n\n  if (result == \"multi\")\n    cm.state.keySeq = name\n  if (result == \"handled\")\n    signalLater(cm, \"keyHandled\", cm, name, e)\n\n  if (result == \"handled\" || result == \"multi\") {\n    e_preventDefault(e)\n    restartBlink(cm)\n  }\n\n  if (seq && !result && /\\'$/.test(name)) {\n    e_preventDefault(e)\n    return true\n  }\n  return !!result\n}\n\n// Handle a key from the keydown event.\nfunction handleKeyBinding(cm, e) {\n  let name = keyName(e, true)\n  if (!name) return false\n\n  if (e.shiftKey && !cm.state.keySeq) {\n    // First try to resolve full name (including 'Shift-'). Failing\n    // that, see if there is a cursor-motion command (starting with\n    // 'go') bound to the keyname without 'Shift-'.\n    return dispatchKey(cm, \"Shift-\" + name, e, b => doHandleBinding(cm, b, true))\n        || dispatchKey(cm, name, e, b => {\n             if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n               return doHandleBinding(cm, b)\n           })\n  } else {\n    return dispatchKey(cm, name, e, b => doHandleBinding(cm, b))\n  }\n}\n\n// Handle a key from the keypress event\nfunction handleCharBinding(cm, e, ch) {\n  return dispatchKey(cm, \"'\" + ch + \"'\", e, b => doHandleBinding(cm, b, true))\n}\n\nlet lastStoppedKey = null\nexport function onKeyDown(e) {\n  let cm = this\n  cm.curOp.focus = activeElt()\n  if (signalDOMEvent(cm, e)) return\n  // IE does strange things with escape.\n  if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false\n  let code = e.keyCode\n  cm.display.shift = code == 16 || e.shiftKey\n  let handled = handleKeyBinding(cm, e)\n  if (presto) {\n    lastStoppedKey = handled ? code : null\n    // Opera has no cut event... we try to at least catch the key combo\n    if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n      cm.replaceSelection(\"\", null, \"cut\")\n  }\n\n  // Turn mouse into crosshair when Alt is held on Mac.\n  if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n    showCrossHair(cm)\n}\n\nfunction showCrossHair(cm) {\n  let lineDiv = cm.display.lineDiv\n  addClass(lineDiv, \"CodeMirror-crosshair\")\n\n  function up(e) {\n    if (e.keyCode == 18 || !e.altKey) {\n      rmClass(lineDiv, \"CodeMirror-crosshair\")\n      off(document, \"keyup\", up)\n      off(document, \"mouseover\", up)\n    }\n  }\n  on(document, \"keyup\", up)\n  on(document, \"mouseover\", up)\n}\n\nexport function onKeyUp(e) {\n  if (e.keyCode == 16) this.doc.sel.shift = false\n  signalDOMEvent(this, e)\n}\n\nexport function onKeyPress(e) {\n  let cm = this\n  if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return\n  let keyCode = e.keyCode, charCode = e.charCode\n  if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n  if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) return\n  let ch = String.fromCharCode(charCode == null ? keyCode : charCode)\n  // Some browsers fire keypress events for backspace\n  if (ch == \"\\x08\") return\n  if (handleCharBinding(cm, e, ch)) return\n  cm.display.input.onKeyPress(e)\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/legacy.js",
    "content": "import { scrollbarModel } from \"../display/scrollbars\"\nimport { wheelEventPixels } from \"../display/scroll_events\"\nimport { keyMap, keyName, isModifierKey, lookupKey, normalizeKeyMap } from \"../input/keymap\"\nimport { keyNames } from \"../input/keynames\"\nimport { Line } from \"../line/line_data\"\nimport { cmp, Pos } from \"../line/pos\"\nimport { changeEnd } from \"../model/change_measurement\"\nimport Doc from \"../model/Doc\"\nimport { LineWidget } from \"../model/line_widget\"\nimport { SharedTextMarker, TextMarker } from \"../model/mark_text\"\nimport { copyState, extendMode, getMode, innerMode, mimeModes, modeExtensions, modes, resolveMode, startState } from \"../modes\"\nimport { addClass, contains, rmClass } from \"../util/dom\"\nimport { e_preventDefault, e_stop, e_stopPropagation, off, on, signal } from \"../util/event\"\nimport { splitLinesAuto } from \"../util/feature_detection\"\nimport { countColumn, findColumn, isWordCharBasic, Pass } from \"../util/misc\"\nimport StringStream from \"../util/StringStream\"\n\nimport { commands } from \"./commands\"\n\nexport function addLegacyProps(CodeMirror) {\n  CodeMirror.off = off\n  CodeMirror.on = on\n  CodeMirror.wheelEventPixels = wheelEventPixels\n  CodeMirror.Doc = Doc\n  CodeMirror.splitLines = splitLinesAuto\n  CodeMirror.countColumn = countColumn\n  CodeMirror.findColumn = findColumn\n  CodeMirror.isWordChar = isWordCharBasic\n  CodeMirror.Pass = Pass\n  CodeMirror.signal = signal\n  CodeMirror.Line = Line\n  CodeMirror.changeEnd = changeEnd\n  CodeMirror.scrollbarModel = scrollbarModel\n  CodeMirror.Pos = Pos\n  CodeMirror.cmpPos = cmp\n  CodeMirror.modes = modes\n  CodeMirror.mimeModes = mimeModes\n  CodeMirror.resolveMode = resolveMode\n  CodeMirror.getMode = getMode\n  CodeMirror.modeExtensions = modeExtensions\n  CodeMirror.extendMode = extendMode\n  CodeMirror.copyState = copyState\n  CodeMirror.startState = startState\n  CodeMirror.innerMode = innerMode\n  CodeMirror.commands = commands\n  CodeMirror.keyMap = keyMap\n  CodeMirror.keyName = keyName\n  CodeMirror.isModifierKey = isModifierKey\n  CodeMirror.lookupKey = lookupKey\n  CodeMirror.normalizeKeyMap = normalizeKeyMap\n  CodeMirror.StringStream = StringStream\n  CodeMirror.SharedTextMarker = SharedTextMarker\n  CodeMirror.TextMarker = TextMarker\n  CodeMirror.LineWidget = LineWidget\n  CodeMirror.e_preventDefault = e_preventDefault\n  CodeMirror.e_stopPropagation = e_stopPropagation\n  CodeMirror.e_stop = e_stop\n  CodeMirror.addClass = addClass\n  CodeMirror.contains = contains\n  CodeMirror.rmClass = rmClass\n  CodeMirror.keyNames = keyNames\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/main.js",
    "content": "// EDITOR CONSTRUCTOR\n\nimport { CodeMirror } from \"./CodeMirror\"\nexport { CodeMirror } from \"./CodeMirror\"\n\nimport { eventMixin } from \"../util/event\"\nimport { indexOf } from \"../util/misc\"\n\nimport { defineOptions } from \"./options\"\n\ndefineOptions(CodeMirror)\n\nimport addEditorMethods from \"./methods\"\n\naddEditorMethods(CodeMirror)\n\nimport Doc from \"../model/Doc\"\n\n// Set up methods on CodeMirror's prototype to redirect to the editor's document.\nlet dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \")\nfor (let prop in Doc.prototype) if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n  CodeMirror.prototype[prop] = (function(method) {\n    return function() {return method.apply(this.doc, arguments)}\n  })(Doc.prototype[prop])\n\neventMixin(Doc)\n\n// INPUT HANDLING\n\nimport ContentEditableInput from \"../input/ContentEditableInput\"\nimport TextareaInput from \"../input/TextareaInput\"\nCodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput}\n\n// MODE DEFINITION AND QUERYING\n\nimport { defineMIME, defineMode } from \"../modes\"\n\n// Extra arguments are stored as the mode's dependencies, which is\n// used by (legacy) mechanisms like loadmode.js to automatically\n// load a mode. (Preferred mechanism is the require/define calls.)\nCodeMirror.defineMode = function(name/*, mode, …*/) {\n  if (!CodeMirror.defaults.mode && name != \"null\") CodeMirror.defaults.mode = name\n  defineMode.apply(this, arguments)\n}\n\nCodeMirror.defineMIME = defineMIME\n\n// Minimal default mode.\nCodeMirror.defineMode(\"null\", () => ({token: stream => stream.skipToEnd()}))\nCodeMirror.defineMIME(\"text/plain\", \"null\")\n\n// EXTENSIONS\n\nCodeMirror.defineExtension = (name, func) => {\n  CodeMirror.prototype[name] = func\n}\nCodeMirror.defineDocExtension = (name, func) => {\n  Doc.prototype[name] = func\n}\n\nimport { fromTextArea } from \"./fromTextArea\"\n\nCodeMirror.fromTextArea = fromTextArea\n\nimport { addLegacyProps } from \"./legacy\"\n\naddLegacyProps(CodeMirror)\n\nCodeMirror.version = \"5.25.3\"\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/methods.js",
    "content": "import { deleteNearSelection } from \"./deleteNearSelection\"\nimport { commands } from \"./commands\"\nimport { attachDoc } from \"../model/document_data\"\nimport { activeElt, addClass, rmClass } from \"../util/dom\"\nimport { eventMixin, signal } from \"../util/event\"\nimport { getLineStyles, getStateBefore, takeToken } from \"../line/highlight\"\nimport { indentLine } from \"../input/indent\"\nimport { triggerElectric } from \"../input/input\"\nimport { onKeyDown, onKeyPress, onKeyUp } from \"./key_events\"\nimport { getKeyMap } from \"../input/keymap\"\nimport { endOfLine, moveLogically, moveVisually } from \"../input/movement\"\nimport { methodOp, operation, runInOp } from \"../display/operations\"\nimport { clipLine, clipPos, equalCursorPos, Pos } from \"../line/pos\"\nimport { charCoords, charWidth, clearCaches, clearLineMeasurementCache, coordsChar, cursorCoords, displayHeight, displayWidth, estimateLineHeights, fromCoordSystem, intoCoordSystem, scrollGap, textHeight } from \"../measurement/position_measurement\"\nimport { Range } from \"../model/selection\"\nimport { replaceOneSelection, skipAtomic } from \"../model/selection_updates\"\nimport { addToScrollPos, calculateScrollPos, ensureCursorVisible, resolveScrollToPos, scrollIntoView } from \"../display/scrolling\"\nimport { heightAtLine } from \"../line/spans\"\nimport { updateGutterSpace } from \"../display/update_display\"\nimport { indexOf, insertSorted, isWordChar, sel_dontScroll, sel_move } from \"../util/misc\"\nimport { signalLater } from \"../util/operation_group\"\nimport { getLine, isLine, lineAtHeight } from \"../line/utils_line\"\nimport { regChange, regLineChange } from \"../display/view_tracking\"\n\n// The publicly visible API. Note that methodOp(f) means\n// 'wrap f in an operation, performed on its `this` parameter'.\n\n// This is not the complete set of editor methods. Most of the\n// methods defined on the Doc type are also injected into\n// CodeMirror.prototype, for backwards compatibility and\n// convenience.\n\nexport default function(CodeMirror) {\n  let optionHandlers = CodeMirror.optionHandlers\n\n  let helpers = CodeMirror.helpers = {}\n\n  CodeMirror.prototype = {\n    constructor: CodeMirror,\n    focus: function(){window.focus(); this.display.input.focus()},\n\n    setOption: function(option, value) {\n      let options = this.options, old = options[option]\n      if (options[option] == value && option != \"mode\") return\n      options[option] = value\n      if (optionHandlers.hasOwnProperty(option))\n        operation(this, optionHandlers[option])(this, value, old)\n      signal(this, \"optionChange\", this, option)\n    },\n\n    getOption: function(option) {return this.options[option]},\n    getDoc: function() {return this.doc},\n\n    addKeyMap: function(map, bottom) {\n      this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map))\n    },\n    removeKeyMap: function(map) {\n      let maps = this.state.keyMaps\n      for (let i = 0; i < maps.length; ++i)\n        if (maps[i] == map || maps[i].name == map) {\n          maps.splice(i, 1)\n          return true\n        }\n    },\n\n    addOverlay: methodOp(function(spec, options) {\n      let mode = spec.token ? spec : CodeMirror.getMode(this.options, spec)\n      if (mode.startState) throw new Error(\"Overlays may not be stateful.\")\n      insertSorted(this.state.overlays,\n                   {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n                    priority: (options && options.priority) || 0},\n                   overlay => overlay.priority)\n      this.state.modeGen++\n      regChange(this)\n    }),\n    removeOverlay: methodOp(function(spec) {\n      let overlays = this.state.overlays\n      for (let i = 0; i < overlays.length; ++i) {\n        let cur = overlays[i].modeSpec\n        if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n          overlays.splice(i, 1)\n          this.state.modeGen++\n          regChange(this)\n          return\n        }\n      }\n    }),\n\n    indentLine: methodOp(function(n, dir, aggressive) {\n      if (typeof dir != \"string\" && typeof dir != \"number\") {\n        if (dir == null) dir = this.options.smartIndent ? \"smart\" : \"prev\"\n        else dir = dir ? \"add\" : \"subtract\"\n      }\n      if (isLine(this.doc, n)) indentLine(this, n, dir, aggressive)\n    }),\n    indentSelection: methodOp(function(how) {\n      let ranges = this.doc.sel.ranges, end = -1\n      for (let i = 0; i < ranges.length; i++) {\n        let range = ranges[i]\n        if (!range.empty()) {\n          let from = range.from(), to = range.to()\n          let start = Math.max(end, from.line)\n          end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1\n          for (let j = start; j < end; ++j)\n            indentLine(this, j, how)\n          let newRanges = this.doc.sel.ranges\n          if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n            replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll)\n        } else if (range.head.line > end) {\n          indentLine(this, range.head.line, how, true)\n          end = range.head.line\n          if (i == this.doc.sel.primIndex) ensureCursorVisible(this)\n        }\n      }\n    }),\n\n    // Fetch the parser token for a given character. Useful for hacks\n    // that want to inspect the mode state (say, for completion).\n    getTokenAt: function(pos, precise) {\n      return takeToken(this, pos, precise)\n    },\n\n    getLineTokens: function(line, precise) {\n      return takeToken(this, Pos(line), precise, true)\n    },\n\n    getTokenTypeAt: function(pos) {\n      pos = clipPos(this.doc, pos)\n      let styles = getLineStyles(this, getLine(this.doc, pos.line))\n      let before = 0, after = (styles.length - 1) / 2, ch = pos.ch\n      let type\n      if (ch == 0) type = styles[2]\n      else for (;;) {\n        let mid = (before + after) >> 1\n        if ((mid ? styles[mid * 2 - 1] : 0) >= ch) after = mid\n        else if (styles[mid * 2 + 1] < ch) before = mid + 1\n        else { type = styles[mid * 2 + 2]; break }\n      }\n      let cut = type ? type.indexOf(\"overlay \") : -1\n      return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n    },\n\n    getModeAt: function(pos) {\n      let mode = this.doc.mode\n      if (!mode.innerMode) return mode\n      return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n    },\n\n    getHelper: function(pos, type) {\n      return this.getHelpers(pos, type)[0]\n    },\n\n    getHelpers: function(pos, type) {\n      let found = []\n      if (!helpers.hasOwnProperty(type)) return found\n      let help = helpers[type], mode = this.getModeAt(pos)\n      if (typeof mode[type] == \"string\") {\n        if (help[mode[type]]) found.push(help[mode[type]])\n      } else if (mode[type]) {\n        for (let i = 0; i < mode[type].length; i++) {\n          let val = help[mode[type][i]]\n          if (val) found.push(val)\n        }\n      } else if (mode.helperType && help[mode.helperType]) {\n        found.push(help[mode.helperType])\n      } else if (help[mode.name]) {\n        found.push(help[mode.name])\n      }\n      for (let i = 0; i < help._global.length; i++) {\n        let cur = help._global[i]\n        if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n          found.push(cur.val)\n      }\n      return found\n    },\n\n    getStateAfter: function(line, precise) {\n      let doc = this.doc\n      line = clipLine(doc, line == null ? doc.first + doc.size - 1: line)\n      return getStateBefore(this, line + 1, precise)\n    },\n\n    cursorCoords: function(start, mode) {\n      let pos, range = this.doc.sel.primary()\n      if (start == null) pos = range.head\n      else if (typeof start == \"object\") pos = clipPos(this.doc, start)\n      else pos = start ? range.from() : range.to()\n      return cursorCoords(this, pos, mode || \"page\")\n    },\n\n    charCoords: function(pos, mode) {\n      return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n    },\n\n    coordsChar: function(coords, mode) {\n      coords = fromCoordSystem(this, coords, mode || \"page\")\n      return coordsChar(this, coords.left, coords.top)\n    },\n\n    lineAtHeight: function(height, mode) {\n      height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top\n      return lineAtHeight(this.doc, height + this.display.viewOffset)\n    },\n    heightAtLine: function(line, mode, includeWidgets) {\n      let end = false, lineObj\n      if (typeof line == \"number\") {\n        let last = this.doc.first + this.doc.size - 1\n        if (line < this.doc.first) line = this.doc.first\n        else if (line > last) { line = last; end = true }\n        lineObj = getLine(this.doc, line)\n      } else {\n        lineObj = line\n      }\n      return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n        (end ? this.doc.height - heightAtLine(lineObj) : 0)\n    },\n\n    defaultTextHeight: function() { return textHeight(this.display) },\n    defaultCharWidth: function() { return charWidth(this.display) },\n\n    getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n    addWidget: function(pos, node, scroll, vert, horiz) {\n      let display = this.display\n      pos = cursorCoords(this, clipPos(this.doc, pos))\n      let top = pos.bottom, left = pos.left\n      node.style.position = \"absolute\"\n      node.setAttribute(\"cm-ignore-events\", \"true\")\n      this.display.input.setUneditable(node)\n      display.sizer.appendChild(node)\n      if (vert == \"over\") {\n        top = pos.top\n      } else if (vert == \"above\" || vert == \"near\") {\n        let vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n        hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth)\n        // Default to positioning above (if specified and possible); otherwise default to positioning below\n        if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n          top = pos.top - node.offsetHeight\n        else if (pos.bottom + node.offsetHeight <= vspace)\n          top = pos.bottom\n        if (left + node.offsetWidth > hspace)\n          left = hspace - node.offsetWidth\n      }\n      node.style.top = top + \"px\"\n      node.style.left = node.style.right = \"\"\n      if (horiz == \"right\") {\n        left = display.sizer.clientWidth - node.offsetWidth\n        node.style.right = \"0px\"\n      } else {\n        if (horiz == \"left\") left = 0\n        else if (horiz == \"middle\") left = (display.sizer.clientWidth - node.offsetWidth) / 2\n        node.style.left = left + \"px\"\n      }\n      if (scroll)\n        scrollIntoView(this, {left, top, right: left + node.offsetWidth, bottom: top + node.offsetHeight})\n    },\n\n    triggerOnKeyDown: methodOp(onKeyDown),\n    triggerOnKeyPress: methodOp(onKeyPress),\n    triggerOnKeyUp: onKeyUp,\n\n    execCommand: function(cmd) {\n      if (commands.hasOwnProperty(cmd))\n        return commands[cmd].call(null, this)\n    },\n\n    triggerElectric: methodOp(function(text) { triggerElectric(this, text) }),\n\n    findPosH: function(from, amount, unit, visually) {\n      let dir = 1\n      if (amount < 0) { dir = -1; amount = -amount }\n      let cur = clipPos(this.doc, from)\n      for (let i = 0; i < amount; ++i) {\n        cur = findPosH(this.doc, cur, dir, unit, visually)\n        if (cur.hitSide) break\n      }\n      return cur\n    },\n\n    moveH: methodOp(function(dir, unit) {\n      this.extendSelectionsBy(range => {\n        if (this.display.shift || this.doc.extend || range.empty())\n          return findPosH(this.doc, range.head, dir, unit, this.options.rtlMoveVisually)\n        else\n          return dir < 0 ? range.from() : range.to()\n      }, sel_move)\n    }),\n\n    deleteH: methodOp(function(dir, unit) {\n      let sel = this.doc.sel, doc = this.doc\n      if (sel.somethingSelected())\n        doc.replaceSelection(\"\", null, \"+delete\")\n      else\n        deleteNearSelection(this, range => {\n          let other = findPosH(doc, range.head, dir, unit, false)\n          return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n        })\n    }),\n\n    findPosV: function(from, amount, unit, goalColumn) {\n      let dir = 1, x = goalColumn\n      if (amount < 0) { dir = -1; amount = -amount }\n      let cur = clipPos(this.doc, from)\n      for (let i = 0; i < amount; ++i) {\n        let coords = cursorCoords(this, cur, \"div\")\n        if (x == null) x = coords.left\n        else coords.left = x\n        cur = findPosV(this, coords, dir, unit)\n        if (cur.hitSide) break\n      }\n      return cur\n    },\n\n    moveV: methodOp(function(dir, unit) {\n      let doc = this.doc, goals = []\n      let collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected()\n      doc.extendSelectionsBy(range => {\n        if (collapse)\n          return dir < 0 ? range.from() : range.to()\n        let headPos = cursorCoords(this, range.head, \"div\")\n        if (range.goalColumn != null) headPos.left = range.goalColumn\n        goals.push(headPos.left)\n        let pos = findPosV(this, headPos, dir, unit)\n        if (unit == \"page\" && range == doc.sel.primary())\n          addToScrollPos(this, null, charCoords(this, pos, \"div\").top - headPos.top)\n        return pos\n      }, sel_move)\n      if (goals.length) for (let i = 0; i < doc.sel.ranges.length; i++)\n        doc.sel.ranges[i].goalColumn = goals[i]\n    }),\n\n    // Find the word at the given position (as returned by coordsChar).\n    findWordAt: function(pos) {\n      let doc = this.doc, line = getLine(doc, pos.line).text\n      let start = pos.ch, end = pos.ch\n      if (line) {\n        let helper = this.getHelper(pos, \"wordChars\")\n        if ((pos.sticky == \"before\" || end == line.length) && start) --start; else ++end\n        let startChar = line.charAt(start)\n        let check = isWordChar(startChar, helper)\n          ? ch => isWordChar(ch, helper)\n          : /\\s/.test(startChar) ? ch => /\\s/.test(ch)\n          : ch => (!/\\s/.test(ch) && !isWordChar(ch))\n        while (start > 0 && check(line.charAt(start - 1))) --start\n        while (end < line.length && check(line.charAt(end))) ++end\n      }\n      return new Range(Pos(pos.line, start), Pos(pos.line, end))\n    },\n\n    toggleOverwrite: function(value) {\n      if (value != null && value == this.state.overwrite) return\n      if (this.state.overwrite = !this.state.overwrite)\n        addClass(this.display.cursorDiv, \"CodeMirror-overwrite\")\n      else\n        rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\")\n\n      signal(this, \"overwriteToggle\", this, this.state.overwrite)\n    },\n    hasFocus: function() { return this.display.input.getField() == activeElt() },\n    isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n    scrollTo: methodOp(function(x, y) {\n      if (x != null || y != null) resolveScrollToPos(this)\n      if (x != null) this.curOp.scrollLeft = x\n      if (y != null) this.curOp.scrollTop = y\n    }),\n    getScrollInfo: function() {\n      let scroller = this.display.scroller\n      return {left: scroller.scrollLeft, top: scroller.scrollTop,\n              height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n              width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n              clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n    },\n\n    scrollIntoView: methodOp(function(range, margin) {\n      if (range == null) {\n        range = {from: this.doc.sel.primary().head, to: null}\n        if (margin == null) margin = this.options.cursorScrollMargin\n      } else if (typeof range == \"number\") {\n        range = {from: Pos(range, 0), to: null}\n      } else if (range.from == null) {\n        range = {from: range, to: null}\n      }\n      if (!range.to) range.to = range.from\n      range.margin = margin || 0\n\n      if (range.from.line != null) {\n        resolveScrollToPos(this)\n        this.curOp.scrollToPos = range\n      } else {\n        let sPos = calculateScrollPos(this, {\n          left: Math.min(range.from.left, range.to.left),\n          top: Math.min(range.from.top, range.to.top) - range.margin,\n          right: Math.max(range.from.right, range.to.right),\n          bottom: Math.max(range.from.bottom, range.to.bottom) + range.margin\n        })\n        this.scrollTo(sPos.scrollLeft, sPos.scrollTop)\n      }\n    }),\n\n    setSize: methodOp(function(width, height) {\n      let interpret = val => typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val\n      if (width != null) this.display.wrapper.style.width = interpret(width)\n      if (height != null) this.display.wrapper.style.height = interpret(height)\n      if (this.options.lineWrapping) clearLineMeasurementCache(this)\n      let lineNo = this.display.viewFrom\n      this.doc.iter(lineNo, this.display.viewTo, line => {\n        if (line.widgets) for (let i = 0; i < line.widgets.length; i++)\n          if (line.widgets[i].noHScroll) { regLineChange(this, lineNo, \"widget\"); break }\n        ++lineNo\n      })\n      this.curOp.forceUpdate = true\n      signal(this, \"refresh\", this)\n    }),\n\n    operation: function(f){return runInOp(this, f)},\n\n    refresh: methodOp(function() {\n      let oldHeight = this.display.cachedTextHeight\n      regChange(this)\n      this.curOp.forceUpdate = true\n      clearCaches(this)\n      this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop)\n      updateGutterSpace(this)\n      if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n        estimateLineHeights(this)\n      signal(this, \"refresh\", this)\n    }),\n\n    swapDoc: methodOp(function(doc) {\n      let old = this.doc\n      old.cm = null\n      attachDoc(this, doc)\n      clearCaches(this)\n      this.display.input.reset()\n      this.scrollTo(doc.scrollLeft, doc.scrollTop)\n      this.curOp.forceScroll = true\n      signalLater(this, \"swapDoc\", this, old)\n      return old\n    }),\n\n    getInputField: function(){return this.display.input.getField()},\n    getWrapperElement: function(){return this.display.wrapper},\n    getScrollerElement: function(){return this.display.scroller},\n    getGutterElement: function(){return this.display.gutters}\n  }\n  eventMixin(CodeMirror)\n\n  CodeMirror.registerHelper = function(type, name, value) {\n    if (!helpers.hasOwnProperty(type)) helpers[type] = CodeMirror[type] = {_global: []}\n    helpers[type][name] = value\n  }\n  CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n    CodeMirror.registerHelper(type, name, value)\n    helpers[type]._global.push({pred: predicate, val: value})\n  }\n}\n\n// Used for horizontal relative motion. Dir is -1 or 1 (left or\n// right), unit can be \"char\", \"column\" (like char, but doesn't\n// cross line boundaries), \"word\" (across next word), or \"group\" (to\n// the start of next group of word or non-word-non-whitespace\n// chars). The visually param controls whether, in right-to-left\n// text, direction 1 means to move towards the next index in the\n// string, or towards the character to the right of the current\n// position. The resulting position will have a hitSide=true\n// property if it reached the end of the document.\nfunction findPosH(doc, pos, dir, unit, visually) {\n  let oldPos = pos\n  let origDir = dir\n  let lineObj = getLine(doc, pos.line)\n  function findNextLine() {\n    let l = pos.line + dir\n    if (l < doc.first || l >= doc.first + doc.size) return false\n    pos = new Pos(l, pos.ch, pos.sticky)\n    return lineObj = getLine(doc, l)\n  }\n  function moveOnce(boundToLine) {\n    let next\n    if (visually) {\n      next = moveVisually(doc.cm, lineObj, pos, dir)\n    } else {\n      next = moveLogically(lineObj, pos, dir)\n    }\n    if (next == null) {\n      if (!boundToLine && findNextLine())\n        pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir)\n      else\n        return false\n    } else {\n      pos = next\n    }\n    return true\n  }\n\n  if (unit == \"char\") {\n    moveOnce()\n  } else if (unit == \"column\") {\n    moveOnce(true)\n  } else if (unit == \"word\" || unit == \"group\") {\n    let sawType = null, group = unit == \"group\"\n    let helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\")\n    for (let first = true;; first = false) {\n      if (dir < 0 && !moveOnce(!first)) break\n      let cur = lineObj.text.charAt(pos.ch) || \"\\n\"\n      let type = isWordChar(cur, helper) ? \"w\"\n        : group && cur == \"\\n\" ? \"n\"\n        : !group || /\\s/.test(cur) ? null\n        : \"p\"\n      if (group && !first && !type) type = \"s\"\n      if (sawType && sawType != type) {\n        if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\"}\n        break\n      }\n\n      if (type) sawType = type\n      if (dir > 0 && !moveOnce(!first)) break\n    }\n  }\n  let result = skipAtomic(doc, pos, oldPos, origDir, true)\n  if (equalCursorPos(oldPos, result)) result.hitSide = true\n  return result\n}\n\n// For relative vertical movement. Dir may be -1 or 1. Unit can be\n// \"page\" or \"line\". The resulting position will have a hitSide=true\n// property if it reached the end of the document.\nfunction findPosV(cm, pos, dir, unit) {\n  let doc = cm.doc, x = pos.left, y\n  if (unit == \"page\") {\n    let pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight)\n    let moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3)\n    y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount\n\n  } else if (unit == \"line\") {\n    y = dir > 0 ? pos.bottom + 3 : pos.top - 3\n  }\n  let target\n  for (;;) {\n    target = coordsChar(cm, x, y)\n    if (!target.outside) break\n    if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n    y += dir * 5\n  }\n  return target\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/mouse_events.js",
    "content": "import { delayBlurEvent, ensureFocus } from \"../display/focus\"\nimport { operation } from \"../display/operations\"\nimport { visibleLines } from \"../display/update_lines\"\nimport { clipPos, cmp, maxPos, minPos, Pos } from \"../line/pos\"\nimport { getLine, lineAtHeight } from \"../line/utils_line\"\nimport { posFromMouse } from \"../measurement/position_measurement\"\nimport { eventInWidget } from \"../measurement/widgets\"\nimport { normalizeSelection, Range, Selection } from \"../model/selection\"\nimport { extendRange, extendSelection, replaceOneSelection, setSelection } from \"../model/selection_updates\"\nimport { captureRightClick, chromeOS, ie, ie_version, mac, webkit } from \"../util/browser\"\nimport { activeElt } from \"../util/dom\"\nimport { e_button, e_defaultPrevented, e_preventDefault, e_target, hasHandler, off, on, signal, signalDOMEvent } from \"../util/event\"\nimport { dragAndDrop } from \"../util/feature_detection\"\nimport { bind, countColumn, findColumn, sel_mouse } from \"../util/misc\"\n\n// A mouse down can be a single click, double click, triple click,\n// start of selection drag, start of text drag, new cursor\n// (ctrl-click), rectangle drag (alt-drag), or xwin\n// middle-click-paste. Or it might be a click on something we should\n// not interfere with, such as a scrollbar or widget.\nexport function onMouseDown(e) {\n  let cm = this, display = cm.display\n  if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) return\n  display.input.ensurePolled()\n  display.shift = e.shiftKey\n\n  if (eventInWidget(display, e)) {\n    if (!webkit) {\n      // Briefly turn off draggability, to allow widgets to do\n      // normal dragging things.\n      display.scroller.draggable = false\n      setTimeout(() => display.scroller.draggable = true, 100)\n    }\n    return\n  }\n  if (clickInGutter(cm, e)) return\n  let start = posFromMouse(cm, e)\n  window.focus()\n\n  switch (e_button(e)) {\n  case 1:\n    // #3261: make sure, that we're not starting a second selection\n    if (cm.state.selectingText)\n      cm.state.selectingText(e)\n    else if (start)\n      leftButtonDown(cm, e, start)\n    else if (e_target(e) == display.scroller)\n      e_preventDefault(e)\n    break\n  case 2:\n    if (webkit) cm.state.lastMiddleDown = +new Date\n    if (start) extendSelection(cm.doc, start)\n    setTimeout(() => display.input.focus(), 20)\n    e_preventDefault(e)\n    break\n  case 3:\n    if (captureRightClick) onContextMenu(cm, e)\n    else delayBlurEvent(cm)\n    break\n  }\n}\n\nlet lastClick, lastDoubleClick\nfunction leftButtonDown(cm, e, start) {\n  if (ie) setTimeout(bind(ensureFocus, cm), 0)\n  else cm.curOp.focus = activeElt()\n\n  let now = +new Date, type\n  if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) {\n    type = \"triple\"\n  } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) {\n    type = \"double\"\n    lastDoubleClick = {time: now, pos: start}\n  } else {\n    type = \"single\"\n    lastClick = {time: now, pos: start}\n  }\n\n  let sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained\n  if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n      type == \"single\" && (contained = sel.contains(start)) > -1 &&\n      (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) &&\n      (cmp(contained.to(), start) > 0 || start.xRel < 0))\n    leftButtonStartDrag(cm, e, start, modifier)\n  else\n    leftButtonSelect(cm, e, start, type, modifier)\n}\n\n// Start a text drag. When it ends, see if any dragging actually\n// happen, and treat as a click if it didn't.\nfunction leftButtonStartDrag(cm, e, start, modifier) {\n  let display = cm.display, moved = false\n  let dragEnd = operation(cm, e => {\n    if (webkit) display.scroller.draggable = false\n    cm.state.draggingText = false\n    off(document, \"mouseup\", dragEnd)\n    off(document, \"mousemove\", mouseMove)\n    off(display.scroller, \"dragstart\", dragStart)\n    off(display.scroller, \"drop\", dragEnd)\n    if (!moved) {\n      e_preventDefault(e)\n      if (!modifier)\n        extendSelection(cm.doc, start)\n      // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n      if (webkit || ie && ie_version == 9)\n        setTimeout(() => {document.body.focus(); display.input.focus()}, 20)\n      else\n        display.input.focus()\n    }\n  })\n  let mouseMove = function(e2) {\n    moved = moved || Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) >= 10\n  }\n  let dragStart = () => moved = true\n  // Let the drag handler handle this.\n  if (webkit) display.scroller.draggable = true\n  cm.state.draggingText = dragEnd\n  dragEnd.copy = mac ? e.altKey : e.ctrlKey\n  // IE's approach to draggable\n  if (display.scroller.dragDrop) display.scroller.dragDrop()\n  on(document, \"mouseup\", dragEnd)\n  on(document, \"mousemove\", mouseMove)\n  on(display.scroller, \"dragstart\", dragStart)\n  on(display.scroller, \"drop\", dragEnd)\n\n  delayBlurEvent(cm)\n  setTimeout(() => display.input.focus(), 20)\n}\n\n// Normal selection, as opposed to text dragging.\nfunction leftButtonSelect(cm, e, start, type, addNew) {\n  let display = cm.display, doc = cm.doc\n  e_preventDefault(e)\n\n  let ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges\n  if (addNew && !e.shiftKey) {\n    ourIndex = doc.sel.contains(start)\n    if (ourIndex > -1)\n      ourRange = ranges[ourIndex]\n    else\n      ourRange = new Range(start, start)\n  } else {\n    ourRange = doc.sel.primary()\n    ourIndex = doc.sel.primIndex\n  }\n\n  if (chromeOS ? e.shiftKey && e.metaKey : e.altKey) {\n    type = \"rect\"\n    if (!addNew) ourRange = new Range(start, start)\n    start = posFromMouse(cm, e, true, true)\n    ourIndex = -1\n  } else if (type == \"double\") {\n    let word = cm.findWordAt(start)\n    if (cm.display.shift || doc.extend)\n      ourRange = extendRange(doc, ourRange, word.anchor, word.head)\n    else\n      ourRange = word\n  } else if (type == \"triple\") {\n    let line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0)))\n    if (cm.display.shift || doc.extend)\n      ourRange = extendRange(doc, ourRange, line.anchor, line.head)\n    else\n      ourRange = line\n  } else {\n    ourRange = extendRange(doc, ourRange, start)\n  }\n\n  if (!addNew) {\n    ourIndex = 0\n    setSelection(doc, new Selection([ourRange], 0), sel_mouse)\n    startSel = doc.sel\n  } else if (ourIndex == -1) {\n    ourIndex = ranges.length\n    setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex),\n                 {scroll: false, origin: \"*mouse\"})\n  } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == \"single\" && !e.shiftKey) {\n    setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n                 {scroll: false, origin: \"*mouse\"})\n    startSel = doc.sel\n  } else {\n    replaceOneSelection(doc, ourIndex, ourRange, sel_mouse)\n  }\n\n  let lastPos = start\n  function extendTo(pos) {\n    if (cmp(lastPos, pos) == 0) return\n    lastPos = pos\n\n    if (type == \"rect\") {\n      let ranges = [], tabSize = cm.options.tabSize\n      let startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize)\n      let posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize)\n      let left = Math.min(startCol, posCol), right = Math.max(startCol, posCol)\n      for (let line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n           line <= end; line++) {\n        let text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize)\n        if (left == right)\n          ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos)))\n        else if (text.length > leftPos)\n          ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize))))\n      }\n      if (!ranges.length) ranges.push(new Range(start, start))\n      setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n                   {origin: \"*mouse\", scroll: false})\n      cm.scrollIntoView(pos)\n    } else {\n      let oldRange = ourRange\n      let anchor = oldRange.anchor, head = pos\n      if (type != \"single\") {\n        let range\n        if (type == \"double\")\n          range = cm.findWordAt(pos)\n        else\n          range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0)))\n        if (cmp(range.anchor, anchor) > 0) {\n          head = range.head\n          anchor = minPos(oldRange.from(), range.anchor)\n        } else {\n          head = range.anchor\n          anchor = maxPos(oldRange.to(), range.head)\n        }\n      }\n      let ranges = startSel.ranges.slice(0)\n      ranges[ourIndex] = new Range(clipPos(doc, anchor), head)\n      setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse)\n    }\n  }\n\n  let editorSize = display.wrapper.getBoundingClientRect()\n  // Used to ensure timeout re-tries don't fire when another extend\n  // happened in the meantime (clearTimeout isn't reliable -- at\n  // least on Chrome, the timeouts still happen even when cleared,\n  // if the clear happens after their scheduled firing time).\n  let counter = 0\n\n  function extend(e) {\n    let curCount = ++counter\n    let cur = posFromMouse(cm, e, true, type == \"rect\")\n    if (!cur) return\n    if (cmp(cur, lastPos) != 0) {\n      cm.curOp.focus = activeElt()\n      extendTo(cur)\n      let visible = visibleLines(display, doc)\n      if (cur.line >= visible.to || cur.line < visible.from)\n        setTimeout(operation(cm, () => {if (counter == curCount) extend(e)}), 150)\n    } else {\n      let outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0\n      if (outside) setTimeout(operation(cm, () => {\n        if (counter != curCount) return\n        display.scroller.scrollTop += outside\n        extend(e)\n      }), 50)\n    }\n  }\n\n  function done(e) {\n    cm.state.selectingText = false\n    counter = Infinity\n    e_preventDefault(e)\n    display.input.focus()\n    off(document, \"mousemove\", move)\n    off(document, \"mouseup\", up)\n    doc.history.lastSelOrigin = null\n  }\n\n  let move = operation(cm, e => {\n    if (!e_button(e)) done(e)\n    else extend(e)\n  })\n  let up = operation(cm, done)\n  cm.state.selectingText = up\n  on(document, \"mousemove\", move)\n  on(document, \"mouseup\", up)\n}\n\n\n// Determines whether an event happened in the gutter, and fires the\n// handlers for the corresponding event.\nfunction gutterEvent(cm, e, type, prevent) {\n  let mX, mY\n  try { mX = e.clientX; mY = e.clientY }\n  catch(e) { return false }\n  if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) return false\n  if (prevent) e_preventDefault(e)\n\n  let display = cm.display\n  let lineBox = display.lineDiv.getBoundingClientRect()\n\n  if (mY > lineBox.bottom || !hasHandler(cm, type)) return e_defaultPrevented(e)\n  mY -= lineBox.top - display.viewOffset\n\n  for (let i = 0; i < cm.options.gutters.length; ++i) {\n    let g = display.gutters.childNodes[i]\n    if (g && g.getBoundingClientRect().right >= mX) {\n      let line = lineAtHeight(cm.doc, mY)\n      let gutter = cm.options.gutters[i]\n      signal(cm, type, cm, line, gutter, e)\n      return e_defaultPrevented(e)\n    }\n  }\n}\n\nexport function clickInGutter(cm, e) {\n  return gutterEvent(cm, e, \"gutterClick\", true)\n}\n\n// CONTEXT MENU HANDLING\n\n// To make the context menu work, we need to briefly unhide the\n// textarea (making it as unobtrusive as possible) to let the\n// right-click take effect on it.\nexport function onContextMenu(cm, e) {\n  if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) return\n  if (signalDOMEvent(cm, e, \"contextmenu\")) return\n  cm.display.input.onContextMenu(e)\n}\n\nfunction contextMenuInGutter(cm, e) {\n  if (!hasHandler(cm, \"gutterContextMenu\")) return false\n  return gutterEvent(cm, e, \"gutterContextMenu\", false)\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/options.js",
    "content": "import { onBlur } from \"../display/focus\"\nimport { setGuttersForLineNumbers, updateGutters } from \"../display/gutters\"\nimport { alignHorizontally } from \"../display/line_numbers\"\nimport { loadMode, resetModeState } from \"../display/mode_state\"\nimport { initScrollbars, updateScrollbars } from \"../display/scrollbars\"\nimport { updateSelection } from \"../display/selection\"\nimport { regChange } from \"../display/view_tracking\"\nimport { getKeyMap } from \"../input/keymap\"\nimport { defaultSpecialCharPlaceholder } from \"../line/line_data\"\nimport { Pos } from \"../line/pos\"\nimport { findMaxLine } from \"../line/spans\"\nimport { clearCaches, compensateForHScroll, estimateLineHeights } from \"../measurement/position_measurement\"\nimport { replaceRange } from \"../model/changes\"\nimport { mobile, windows } from \"../util/browser\"\nimport { addClass, rmClass } from \"../util/dom\"\nimport { off, on } from \"../util/event\"\n\nimport { themeChanged } from \"./utils\"\n\nexport let Init = {toString: function(){return \"CodeMirror.Init\"}}\n\nexport let defaults = {}\nexport let optionHandlers = {}\n\nexport function defineOptions(CodeMirror) {\n  let optionHandlers = CodeMirror.optionHandlers\n\n  function option(name, deflt, handle, notOnInit) {\n    CodeMirror.defaults[name] = deflt\n    if (handle) optionHandlers[name] =\n      notOnInit ? (cm, val, old) => {if (old != Init) handle(cm, val, old)} : handle\n  }\n\n  CodeMirror.defineOption = option\n\n  // Passed to option handlers when there is no old value.\n  CodeMirror.Init = Init\n\n  // These two are, on init, called from the constructor because they\n  // have to be initialized before the editor can start at all.\n  option(\"value\", \"\", (cm, val) => cm.setValue(val), true)\n  option(\"mode\", null, (cm, val) => {\n    cm.doc.modeOption = val\n    loadMode(cm)\n  }, true)\n\n  option(\"indentUnit\", 2, loadMode, true)\n  option(\"indentWithTabs\", false)\n  option(\"smartIndent\", true)\n  option(\"tabSize\", 4, cm => {\n    resetModeState(cm)\n    clearCaches(cm)\n    regChange(cm)\n  }, true)\n  option(\"lineSeparator\", null, (cm, val) => {\n    cm.doc.lineSep = val\n    if (!val) return\n    let newBreaks = [], lineNo = cm.doc.first\n    cm.doc.iter(line => {\n      for (let pos = 0;;) {\n        let found = line.text.indexOf(val, pos)\n        if (found == -1) break\n        pos = found + val.length\n        newBreaks.push(Pos(lineNo, found))\n      }\n      lineNo++\n    })\n    for (let i = newBreaks.length - 1; i >= 0; i--)\n      replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length))\n  })\n  option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g, (cm, val, old) => {\n    cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\")\n    if (old != Init) cm.refresh()\n  })\n  option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, cm => cm.refresh(), true)\n  option(\"electricChars\", true)\n  option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", () => {\n    throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n  }, true)\n  option(\"spellcheck\", false, (cm, val) => cm.getInputField().spellcheck = val, true)\n  option(\"rtlMoveVisually\", !windows)\n  option(\"wholeLineUpdateBefore\", true)\n\n  option(\"theme\", \"default\", cm => {\n    themeChanged(cm)\n    guttersChanged(cm)\n  }, true)\n  option(\"keyMap\", \"default\", (cm, val, old) => {\n    let next = getKeyMap(val)\n    let prev = old != Init && getKeyMap(old)\n    if (prev && prev.detach) prev.detach(cm, next)\n    if (next.attach) next.attach(cm, prev || null)\n  })\n  option(\"extraKeys\", null)\n\n  option(\"lineWrapping\", false, wrappingChanged, true)\n  option(\"gutters\", [], cm => {\n    setGuttersForLineNumbers(cm.options)\n    guttersChanged(cm)\n  }, true)\n  option(\"fixedGutter\", true, (cm, val) => {\n    cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\"\n    cm.refresh()\n  }, true)\n  option(\"coverGutterNextToScrollbar\", false, cm => updateScrollbars(cm), true)\n  option(\"scrollbarStyle\", \"native\", cm => {\n    initScrollbars(cm)\n    updateScrollbars(cm)\n    cm.display.scrollbars.setScrollTop(cm.doc.scrollTop)\n    cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft)\n  }, true)\n  option(\"lineNumbers\", false, cm => {\n    setGuttersForLineNumbers(cm.options)\n    guttersChanged(cm)\n  }, true)\n  option(\"firstLineNumber\", 1, guttersChanged, true)\n  option(\"lineNumberFormatter\", integer => integer, guttersChanged, true)\n  option(\"showCursorWhenSelecting\", false, updateSelection, true)\n\n  option(\"resetSelectionOnContextMenu\", true)\n  option(\"lineWiseCopyCut\", true)\n\n  option(\"readOnly\", false, (cm, val) => {\n    if (val == \"nocursor\") {\n      onBlur(cm)\n      cm.display.input.blur()\n      cm.display.disabled = true\n    } else {\n      cm.display.disabled = false\n    }\n    cm.display.input.readOnlyChanged(val)\n  })\n  option(\"disableInput\", false, (cm, val) => {if (!val) cm.display.input.reset()}, true)\n  option(\"dragDrop\", true, dragDropChanged)\n  option(\"allowDropFileTypes\", null)\n\n  option(\"cursorBlinkRate\", 530)\n  option(\"cursorScrollMargin\", 0)\n  option(\"cursorHeight\", 1, updateSelection, true)\n  option(\"singleCursorHeightPerLine\", true, updateSelection, true)\n  option(\"workTime\", 100)\n  option(\"workDelay\", 100)\n  option(\"flattenSpans\", true, resetModeState, true)\n  option(\"addModeClass\", false, resetModeState, true)\n  option(\"pollInterval\", 100)\n  option(\"undoDepth\", 200, (cm, val) => cm.doc.history.undoDepth = val)\n  option(\"historyEventDelay\", 1250)\n  option(\"viewportMargin\", 10, cm => cm.refresh(), true)\n  option(\"maxHighlightLength\", 10000, resetModeState, true)\n  option(\"moveInputWithCursor\", true, (cm, val) => {\n    if (!val) cm.display.input.resetPosition()\n  })\n\n  option(\"tabindex\", null, (cm, val) => cm.display.input.getField().tabIndex = val || \"\")\n  option(\"autofocus\", null)\n  option(\"direction\", \"ltr\", (cm, val) => cm.doc.setDirection(val), true)\n}\n\nfunction guttersChanged(cm) {\n  updateGutters(cm)\n  regChange(cm)\n  alignHorizontally(cm)\n}\n\nfunction dragDropChanged(cm, value, old) {\n  let wasOn = old && old != Init\n  if (!value != !wasOn) {\n    let funcs = cm.display.dragFunctions\n    let toggle = value ? on : off\n    toggle(cm.display.scroller, \"dragstart\", funcs.start)\n    toggle(cm.display.scroller, \"dragenter\", funcs.enter)\n    toggle(cm.display.scroller, \"dragover\", funcs.over)\n    toggle(cm.display.scroller, \"dragleave\", funcs.leave)\n    toggle(cm.display.scroller, \"drop\", funcs.drop)\n  }\n}\n\nfunction wrappingChanged(cm) {\n  if (cm.options.lineWrapping) {\n    addClass(cm.display.wrapper, \"CodeMirror-wrap\")\n    cm.display.sizer.style.minWidth = \"\"\n    cm.display.sizerWidth = null\n  } else {\n    rmClass(cm.display.wrapper, \"CodeMirror-wrap\")\n    findMaxLine(cm)\n  }\n  estimateLineHeights(cm)\n  regChange(cm)\n  clearCaches(cm)\n  setTimeout(() => updateScrollbars(cm), 100)\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/edit/utils.js",
    "content": "import { clearCaches } from \"../measurement/position_measurement\"\n\nexport function themeChanged(cm) {\n  cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n    cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\")\n  clearCaches(cm)\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/input/ContentEditableInput.js",
    "content": "import { operation, runInOp } from \"../display/operations\"\nimport { prepareSelection } from \"../display/selection\"\nimport { regChange } from \"../display/view_tracking\"\nimport { applyTextInput, copyableRanges, disableBrowserMagic, handlePaste, hiddenTextarea, lastCopied, setLastCopied } from \"./input\"\nimport { cmp, maxPos, minPos, Pos } from \"../line/pos\"\nimport { getBetween, getLine, lineNo } from \"../line/utils_line\"\nimport { findViewForLine, findViewIndex, mapFromLineView, nodeAndOffsetInLineMap } from \"../measurement/position_measurement\"\nimport { replaceRange } from \"../model/changes\"\nimport { simpleSelection } from \"../model/selection\"\nimport { setSelection } from \"../model/selection_updates\"\nimport { getBidiPartAt, getOrder } from \"../util/bidi\"\nimport { gecko, ie_version } from \"../util/browser\"\nimport { contains, range, removeChildrenAndAdd, selectInput } from \"../util/dom\"\nimport { on, signalDOMEvent } from \"../util/event\"\nimport { Delayed, lst, sel_dontScroll } from \"../util/misc\"\nimport { chrome, android } from \"../util/browser\"\n\n// CONTENTEDITABLE INPUT STYLE\n\nexport default class ContentEditableInput {\n  constructor(cm) {\n    this.cm = cm\n    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null\n    this.polling = new Delayed()\n    this.composing = null\n    this.gracePeriod = false\n    this.readDOMTimeout = null\n  }\n\n  init(display) {\n    let input = this, cm = input.cm\n    let div = input.div = display.lineDiv\n    disableBrowserMagic(div, cm.options.spellcheck)\n\n    on(div, \"paste\", e => {\n      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) return\n      // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n      if (ie_version <= 11) setTimeout(operation(cm, () => this.updateFromDOM()), 20)\n    })\n\n    on(div, \"compositionstart\", e => {\n      this.composing = {data: e.data, done: false}\n    })\n    on(div, \"compositionupdate\", e => {\n      if (!this.composing) this.composing = {data: e.data, done: false}\n    })\n    on(div, \"compositionend\", e => {\n      if (this.composing) {\n        if (e.data != this.composing.data) this.readFromDOMSoon()\n        this.composing.done = true\n      }\n    })\n\n    on(div, \"touchstart\", () => input.forceCompositionEnd())\n\n    on(div, \"input\", () => {\n      if (!this.composing) this.readFromDOMSoon()\n    })\n\n    function onCopyCut(e) {\n      if (signalDOMEvent(cm, e)) return\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()})\n        if (e.type == \"cut\") cm.replaceSelection(\"\", null, \"cut\")\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        let ranges = copyableRanges(cm)\n        setLastCopied({lineWise: true, text: ranges.text})\n        if (e.type == \"cut\") {\n          cm.operation(() => {\n            cm.setSelections(ranges.ranges, 0, sel_dontScroll)\n            cm.replaceSelection(\"\", null, \"cut\")\n          })\n        }\n      }\n      if (e.clipboardData) {\n        e.clipboardData.clearData()\n        let content = lastCopied.text.join(\"\\n\")\n        // iOS exposes the clipboard API, but seems to discard content inserted into it\n        e.clipboardData.setData(\"Text\", content)\n        if (e.clipboardData.getData(\"Text\") == content) {\n          e.preventDefault()\n          return\n        }\n      }\n      // Old-fashioned briefly-focus-a-textarea hack\n      let kludge = hiddenTextarea(), te = kludge.firstChild\n      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild)\n      te.value = lastCopied.text.join(\"\\n\")\n      let hadFocus = document.activeElement\n      selectInput(te)\n      setTimeout(() => {\n        cm.display.lineSpace.removeChild(kludge)\n        hadFocus.focus()\n        if (hadFocus == div) input.showPrimarySelection()\n      }, 50)\n    }\n    on(div, \"copy\", onCopyCut)\n    on(div, \"cut\", onCopyCut)\n  }\n\n  prepareSelection() {\n    let result = prepareSelection(this.cm, false)\n    result.focus = this.cm.state.focused\n    return result\n  }\n\n  showSelection(info, takeFocus) {\n    if (!info || !this.cm.display.view.length) return\n    if (info.focus || takeFocus) this.showPrimarySelection()\n    this.showMultipleSelections(info)\n  }\n\n  showPrimarySelection() {\n    let sel = window.getSelection(), cm = this.cm, prim = cm.doc.sel.primary()\n    let from = prim.from(), to = prim.to()\n\n    if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n      sel.removeAllRanges()\n      return\n    }\n\n    let curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset)\n    let curFocus = domToPos(cm, sel.focusNode, sel.focusOffset)\n    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n        cmp(minPos(curAnchor, curFocus), from) == 0 &&\n        cmp(maxPos(curAnchor, curFocus), to) == 0)\n      return\n\n    let view = cm.display.view\n    let start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n        {node: view[0].measure.map[2], offset: 0}\n    let end = to.line < cm.display.viewTo && posToDOM(cm, to)\n    if (!end) {\n      let measure = view[view.length - 1].measure\n      let map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map\n      end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]}\n    }\n\n    if (!start || !end) {\n      sel.removeAllRanges()\n      return\n    }\n\n    let old = sel.rangeCount && sel.getRangeAt(0), rng\n    try { rng = range(start.node, start.offset, end.offset, end.node) }\n    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n    if (rng) {\n      if (!gecko && cm.state.focused) {\n        sel.collapse(start.node, start.offset)\n        if (!rng.collapsed) {\n          sel.removeAllRanges()\n          sel.addRange(rng)\n        }\n      } else {\n        sel.removeAllRanges()\n        sel.addRange(rng)\n      }\n      if (old && sel.anchorNode == null) sel.addRange(old)\n      else if (gecko) this.startGracePeriod()\n    }\n    this.rememberSelection()\n  }\n\n  startGracePeriod() {\n    clearTimeout(this.gracePeriod)\n    this.gracePeriod = setTimeout(() => {\n      this.gracePeriod = false\n      if (this.selectionChanged())\n        this.cm.operation(() => this.cm.curOp.selectionChanged = true)\n    }, 20)\n  }\n\n  showMultipleSelections(info) {\n    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors)\n    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection)\n  }\n\n  rememberSelection() {\n    let sel = window.getSelection()\n    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset\n    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset\n  }\n\n  selectionInEditor() {\n    let sel = window.getSelection()\n    if (!sel.rangeCount) return false\n    let node = sel.getRangeAt(0).commonAncestorContainer\n    return contains(this.div, node)\n  }\n\n  focus() {\n    if (this.cm.options.readOnly != \"nocursor\") {\n      if (!this.selectionInEditor())\n        this.showSelection(this.prepareSelection(), true)\n      this.div.focus()\n    }\n  }\n  blur() { this.div.blur() }\n  getField() { return this.div }\n\n  supportsTouch() { return true }\n\n  receivedFocus() {\n    let input = this\n    if (this.selectionInEditor())\n      this.pollSelection()\n    else\n      runInOp(this.cm, () => input.cm.curOp.selectionChanged = true)\n\n    function poll() {\n      if (input.cm.state.focused) {\n        input.pollSelection()\n        input.polling.set(input.cm.options.pollInterval, poll)\n      }\n    }\n    this.polling.set(this.cm.options.pollInterval, poll)\n  }\n\n  selectionChanged() {\n    let sel = window.getSelection()\n    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n  }\n\n  pollSelection() {\n    if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) return\n    let sel = window.getSelection(), cm = this.cm\n    // On Android Chrome (version 56, at least), backspacing into an\n    // uneditable block element will put the cursor in that element,\n    // and then, because it's not editable, hide the virtual keyboard.\n    // Because Android doesn't allow us to actually detect backspace\n    // presses in a sane way, this code checks for when that happens\n    // and simulates a backspace press in this case.\n    if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) {\n      this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs})\n      this.blur()\n      this.focus()\n      return\n    }\n    if (this.composing) return\n    this.rememberSelection()\n    let anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset)\n    let head = domToPos(cm, sel.focusNode, sel.focusOffset)\n    if (anchor && head) runInOp(cm, () => {\n      setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll)\n      if (anchor.bad || head.bad) cm.curOp.selectionChanged = true\n    })\n  }\n\n  pollContent() {\n    if (this.readDOMTimeout != null) {\n      clearTimeout(this.readDOMTimeout)\n      this.readDOMTimeout = null\n    }\n\n    let cm = this.cm, display = cm.display, sel = cm.doc.sel.primary()\n    let from = sel.from(), to = sel.to()\n    if (from.ch == 0 && from.line > cm.firstLine())\n      from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length)\n    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n      to = Pos(to.line + 1, 0)\n    if (from.line < display.viewFrom || to.line > display.viewTo - 1) return false\n\n    let fromIndex, fromLine, fromNode\n    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n      fromLine = lineNo(display.view[0].line)\n      fromNode = display.view[0].node\n    } else {\n      fromLine = lineNo(display.view[fromIndex].line)\n      fromNode = display.view[fromIndex - 1].node.nextSibling\n    }\n    let toIndex = findViewIndex(cm, to.line)\n    let toLine, toNode\n    if (toIndex == display.view.length - 1) {\n      toLine = display.viewTo - 1\n      toNode = display.lineDiv.lastChild\n    } else {\n      toLine = lineNo(display.view[toIndex + 1].line) - 1\n      toNode = display.view[toIndex + 1].node.previousSibling\n    }\n\n    if (!fromNode) return false\n    let newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine))\n    let oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length))\n    while (newText.length > 1 && oldText.length > 1) {\n      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine-- }\n      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++ }\n      else break\n    }\n\n    let cutFront = 0, cutEnd = 0\n    let newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length)\n    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n      ++cutFront\n    let newBot = lst(newText), oldBot = lst(oldText)\n    let maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n                             oldBot.length - (oldText.length == 1 ? cutFront : 0))\n    while (cutEnd < maxCutEnd &&\n           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n      ++cutEnd\n    // Try to move start of change to start of selection if ambiguous\n    if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n      while (cutFront && cutFront > from.ch &&\n             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n        cutFront--\n        cutEnd++\n      }\n    }\n\n    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\")\n    newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\")\n\n    let chFrom = Pos(fromLine, cutFront)\n    let chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0)\n    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n      replaceRange(cm.doc, newText, chFrom, chTo, \"+input\")\n      return true\n    }\n  }\n\n  ensurePolled() {\n    this.forceCompositionEnd()\n  }\n  reset() {\n    this.forceCompositionEnd()\n  }\n  forceCompositionEnd() {\n    if (!this.composing) return\n    clearTimeout(this.readDOMTimeout)\n    this.composing = null\n    this.updateFromDOM()\n    this.div.blur()\n    this.div.focus()\n  }\n  readFromDOMSoon() {\n    if (this.readDOMTimeout != null) return\n    this.readDOMTimeout = setTimeout(() => {\n      this.readDOMTimeout = null\n      if (this.composing) {\n        if (this.composing.done) this.composing = null\n        else return\n      }\n      this.updateFromDOM()\n    }, 80)\n  }\n\n  updateFromDOM() {\n    if (this.cm.isReadOnly() || !this.pollContent())\n      runInOp(this.cm, () => regChange(this.cm))\n  }\n\n  setUneditable(node) {\n    node.contentEditable = \"false\"\n  }\n\n  onKeyPress(e) {\n    if (e.charCode == 0) return\n    e.preventDefault()\n    if (!this.cm.isReadOnly())\n      operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0)\n  }\n\n  readOnlyChanged(val) {\n    this.div.contentEditable = String(val != \"nocursor\")\n  }\n\n  onContextMenu() {}\n  resetPosition() {}\n}\n\nContentEditableInput.prototype.needsContentAttribute = true\n\nfunction posToDOM(cm, pos) {\n  let view = findViewForLine(cm, pos.line)\n  if (!view || view.hidden) return null\n  let line = getLine(cm.doc, pos.line)\n  let info = mapFromLineView(view, line, pos.line)\n\n  let order = getOrder(line, cm.doc.direction), side = \"left\"\n  if (order) {\n    let partPos = getBidiPartAt(order, pos.ch)\n    side = partPos % 2 ? \"right\" : \"left\"\n  }\n  let result = nodeAndOffsetInLineMap(info.map, pos.ch, side)\n  result.offset = result.collapse == \"right\" ? result.end : result.start\n  return result\n}\n\nfunction isInGutter(node) {\n  for (let scan = node; scan; scan = scan.parentNode)\n    if (/CodeMirror-gutter-wrapper/.test(scan.className)) return true\n  return false\n}\n\nfunction badPos(pos, bad) { if (bad) pos.bad = true; return pos }\n\nfunction domTextBetween(cm, from, to, fromLine, toLine) {\n  let text = \"\", closing = false, lineSep = cm.doc.lineSeparator()\n  function recognizeMarker(id) { return marker => marker.id == id }\n  function close() {\n    if (closing) {\n      text += lineSep\n      closing = false\n    }\n  }\n  function addText(str) {\n    if (str) {\n      close()\n      text += str\n    }\n  }\n  function walk(node) {\n    if (node.nodeType == 1) {\n      let cmText = node.getAttribute(\"cm-text\")\n      if (cmText != null) {\n        addText(cmText || node.textContent.replace(/\\u200b/g, \"\"))\n        return\n      }\n      let markerID = node.getAttribute(\"cm-marker\"), range\n      if (markerID) {\n        let found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID))\n        if (found.length && (range = found[0].find()))\n          addText(getBetween(cm.doc, range.from, range.to).join(lineSep))\n        return\n      }\n      if (node.getAttribute(\"contenteditable\") == \"false\") return\n      let isBlock = /^(pre|div|p)$/i.test(node.nodeName)\n      if (isBlock) close()\n      for (let i = 0; i < node.childNodes.length; i++)\n        walk(node.childNodes[i])\n      if (isBlock) closing = true\n    } else if (node.nodeType == 3) {\n      addText(node.nodeValue)\n    }\n  }\n  for (;;) {\n    walk(from)\n    if (from == to) break\n    from = from.nextSibling\n  }\n  return text\n}\n\nfunction domToPos(cm, node, offset) {\n  let lineNode\n  if (node == cm.display.lineDiv) {\n    lineNode = cm.display.lineDiv.childNodes[offset]\n    if (!lineNode) return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true)\n    node = null; offset = 0\n  } else {\n    for (lineNode = node;; lineNode = lineNode.parentNode) {\n      if (!lineNode || lineNode == cm.display.lineDiv) return null\n      if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) break\n    }\n  }\n  for (let i = 0; i < cm.display.view.length; i++) {\n    let lineView = cm.display.view[i]\n    if (lineView.node == lineNode)\n      return locateNodeInLineView(lineView, node, offset)\n  }\n}\n\nfunction locateNodeInLineView(lineView, node, offset) {\n  let wrapper = lineView.text.firstChild, bad = false\n  if (!node || !contains(wrapper, node)) return badPos(Pos(lineNo(lineView.line), 0), true)\n  if (node == wrapper) {\n    bad = true\n    node = wrapper.childNodes[offset]\n    offset = 0\n    if (!node) {\n      let line = lineView.rest ? lst(lineView.rest) : lineView.line\n      return badPos(Pos(lineNo(line), line.text.length), bad)\n    }\n  }\n\n  let textNode = node.nodeType == 3 ? node : null, topNode = node\n  if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n    textNode = node.firstChild\n    if (offset) offset = textNode.nodeValue.length\n  }\n  while (topNode.parentNode != wrapper) topNode = topNode.parentNode\n  let measure = lineView.measure, maps = measure.maps\n\n  function find(textNode, topNode, offset) {\n    for (let i = -1; i < (maps ? maps.length : 0); i++) {\n      let map = i < 0 ? measure.map : maps[i]\n      for (let j = 0; j < map.length; j += 3) {\n        let curNode = map[j + 2]\n        if (curNode == textNode || curNode == topNode) {\n          let line = lineNo(i < 0 ? lineView.line : lineView.rest[i])\n          let ch = map[j] + offset\n          if (offset < 0 || curNode != textNode) ch = map[j + (offset ? 1 : 0)]\n          return Pos(line, ch)\n        }\n      }\n    }\n  }\n  let found = find(textNode, topNode, offset)\n  if (found) return badPos(found, bad)\n\n  // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n  for (let after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n    found = find(after, after.firstChild, 0)\n    if (found)\n      return badPos(Pos(found.line, found.ch - dist), bad)\n    else\n      dist += after.textContent.length\n  }\n  for (let before = topNode.previousSibling, dist = offset; before; before = before.previousSibling) {\n    found = find(before, before.firstChild, -1)\n    if (found)\n      return badPos(Pos(found.line, found.ch + dist), bad)\n    else\n      dist += before.textContent.length\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/input/TextareaInput.js",
    "content": "import { operation, runInOp } from \"../display/operations\"\nimport { prepareSelection } from \"../display/selection\"\nimport { applyTextInput, copyableRanges, handlePaste, hiddenTextarea, lastCopied, setLastCopied } from \"./input\"\nimport { cursorCoords, posFromMouse } from \"../measurement/position_measurement\"\nimport { eventInWidget } from \"../measurement/widgets\"\nimport { simpleSelection } from \"../model/selection\"\nimport { selectAll, setSelection } from \"../model/selection_updates\"\nimport { captureRightClick, ie, ie_version, ios, mac, mobile, presto, webkit } from \"../util/browser\"\nimport { activeElt, removeChildrenAndAdd, selectInput } from \"../util/dom\"\nimport { e_preventDefault, e_stop, off, on, signalDOMEvent } from \"../util/event\"\nimport { hasCopyEvent, hasSelection } from \"../util/feature_detection\"\nimport { Delayed, sel_dontScroll } from \"../util/misc\"\n\n// TEXTAREA INPUT STYLE\n\nexport default class TextareaInput {\n  constructor(cm) {\n    this.cm = cm\n    // See input.poll and input.reset\n    this.prevInput = \"\"\n\n    // Flag that indicates whether we expect input to appear real soon\n    // now (after some event like 'keypress' or 'input') and are\n    // polling intensively.\n    this.pollingFast = false\n    // Self-resetting timeout for the poller\n    this.polling = new Delayed()\n    // Tracks when input.reset has punted to just putting a short\n    // string into the textarea instead of the full selection.\n    this.inaccurateSelection = false\n    // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n    this.hasSelection = false\n    this.composing = null\n  }\n\n  init(display) {\n    let input = this, cm = this.cm\n\n    // Wraps and hides input textarea\n    let div = this.wrapper = hiddenTextarea()\n    // The semihidden textarea that is focused when the editor is\n    // focused, and receives input.\n    let te = this.textarea = div.firstChild\n    display.wrapper.insertBefore(div, display.wrapper.firstChild)\n\n    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n    if (ios) te.style.width = \"0px\"\n\n    on(te, \"input\", () => {\n      if (ie && ie_version >= 9 && this.hasSelection) this.hasSelection = null\n      input.poll()\n    })\n\n    on(te, \"paste\", e => {\n      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) return\n\n      cm.state.pasteIncoming = true\n      input.fastPoll()\n    })\n\n    function prepareCopyCut(e) {\n      if (signalDOMEvent(cm, e)) return\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()})\n        if (input.inaccurateSelection) {\n          input.prevInput = \"\"\n          input.inaccurateSelection = false\n          te.value = lastCopied.text.join(\"\\n\")\n          selectInput(te)\n        }\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        let ranges = copyableRanges(cm)\n        setLastCopied({lineWise: true, text: ranges.text})\n        if (e.type == \"cut\") {\n          cm.setSelections(ranges.ranges, null, sel_dontScroll)\n        } else {\n          input.prevInput = \"\"\n          te.value = ranges.text.join(\"\\n\")\n          selectInput(te)\n        }\n      }\n      if (e.type == \"cut\") cm.state.cutIncoming = true\n    }\n    on(te, \"cut\", prepareCopyCut)\n    on(te, \"copy\", prepareCopyCut)\n\n    on(display.scroller, \"paste\", e => {\n      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) return\n      cm.state.pasteIncoming = true\n      input.focus()\n    })\n\n    // Prevent normal selection in the editor (we handle our own)\n    on(display.lineSpace, \"selectstart\", e => {\n      if (!eventInWidget(display, e)) e_preventDefault(e)\n    })\n\n    on(te, \"compositionstart\", () => {\n      let start = cm.getCursor(\"from\")\n      if (input.composing) input.composing.range.clear()\n      input.composing = {\n        start: start,\n        range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n      }\n    })\n    on(te, \"compositionend\", () => {\n      if (input.composing) {\n        input.poll()\n        input.composing.range.clear()\n        input.composing = null\n      }\n    })\n  }\n\n  prepareSelection() {\n    // Redraw the selection and/or cursor\n    let cm = this.cm, display = cm.display, doc = cm.doc\n    let result = prepareSelection(cm)\n\n    // Move the hidden textarea near the cursor to prevent scrolling artifacts\n    if (cm.options.moveInputWithCursor) {\n      let headPos = cursorCoords(cm, doc.sel.primary().head, \"div\")\n      let wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect()\n      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                          headPos.top + lineOff.top - wrapOff.top))\n      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                           headPos.left + lineOff.left - wrapOff.left))\n    }\n\n    return result\n  }\n\n  showSelection(drawn) {\n    let cm = this.cm, display = cm.display\n    removeChildrenAndAdd(display.cursorDiv, drawn.cursors)\n    removeChildrenAndAdd(display.selectionDiv, drawn.selection)\n    if (drawn.teTop != null) {\n      this.wrapper.style.top = drawn.teTop + \"px\"\n      this.wrapper.style.left = drawn.teLeft + \"px\"\n    }\n  }\n\n  // Reset the input to correspond to the selection (or to be empty,\n  // when not typing and nothing is selected)\n  reset(typing) {\n    if (this.contextMenuPending) return\n    let minimal, selected, cm = this.cm, doc = cm.doc\n    if (cm.somethingSelected()) {\n      this.prevInput = \"\"\n      let range = doc.sel.primary()\n      minimal = hasCopyEvent &&\n        (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000)\n      let content = minimal ? \"-\" : selected || cm.getSelection()\n      this.textarea.value = content\n      if (cm.state.focused) selectInput(this.textarea)\n      if (ie && ie_version >= 9) this.hasSelection = content\n    } else if (!typing) {\n      this.prevInput = this.textarea.value = \"\"\n      if (ie && ie_version >= 9) this.hasSelection = null\n    }\n    this.inaccurateSelection = minimal\n  }\n\n  getField() { return this.textarea }\n\n  supportsTouch() { return false }\n\n  focus() {\n    if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n      try { this.textarea.focus() }\n      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n    }\n  }\n\n  blur() { this.textarea.blur() }\n\n  resetPosition() {\n    this.wrapper.style.top = this.wrapper.style.left = 0\n  }\n\n  receivedFocus() { this.slowPoll() }\n\n  // Poll for input changes, using the normal rate of polling. This\n  // runs as long as the editor is focused.\n  slowPoll() {\n    if (this.pollingFast) return\n    this.polling.set(this.cm.options.pollInterval, () => {\n      this.poll()\n      if (this.cm.state.focused) this.slowPoll()\n    })\n  }\n\n  // When an event has just come in that is likely to add or change\n  // something in the input textarea, we poll faster, to ensure that\n  // the change appears on the screen quickly.\n  fastPoll() {\n    let missed = false, input = this\n    input.pollingFast = true\n    function p() {\n      let changed = input.poll()\n      if (!changed && !missed) {missed = true; input.polling.set(60, p)}\n      else {input.pollingFast = false; input.slowPoll()}\n    }\n    input.polling.set(20, p)\n  }\n\n  // Read input from the textarea, and update the document to match.\n  // When something is selected, it is present in the textarea, and\n  // selected (unless it is huge, in which case a placeholder is\n  // used). When nothing is selected, the cursor sits after previously\n  // seen text (can be empty), which is stored in prevInput (we must\n  // not reset the textarea when typing, because that breaks IME).\n  poll() {\n    let cm = this.cm, input = this.textarea, prevInput = this.prevInput\n    // Since this is called a *lot*, try to bail out as cheaply as\n    // possible when it is clear that nothing happened. hasSelection\n    // will be the case when there is a lot of text in the textarea,\n    // in which case reading its value would be expensive.\n    if (this.contextMenuPending || !cm.state.focused ||\n        (hasSelection(input) && !prevInput && !this.composing) ||\n        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n      return false\n\n    let text = input.value\n    // If nothing changed, bail.\n    if (text == prevInput && !cm.somethingSelected()) return false\n    // Work around nonsensical selection resetting in IE9/10, and\n    // inexplicable appearance of private area unicode characters on\n    // some key combos in Mac (#2689).\n    if (ie && ie_version >= 9 && this.hasSelection === text ||\n        mac && /[\\uf700-\\uf7ff]/.test(text)) {\n      cm.display.input.reset()\n      return false\n    }\n\n    if (cm.doc.sel == cm.display.selForContextMenu) {\n      let first = text.charCodeAt(0)\n      if (first == 0x200b && !prevInput) prevInput = \"\\u200b\"\n      if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n    }\n    // Find the part of the input that is actually new\n    let same = 0, l = Math.min(prevInput.length, text.length)\n    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same\n\n    runInOp(cm, () => {\n      applyTextInput(cm, text.slice(same), prevInput.length - same,\n                     null, this.composing ? \"*compose\" : null)\n\n      // Don't leave long text in the textarea, since it makes further polling slow\n      if (text.length > 1000 || text.indexOf(\"\\n\") > -1) input.value = this.prevInput = \"\"\n      else this.prevInput = text\n\n      if (this.composing) {\n        this.composing.range.clear()\n        this.composing.range = cm.markText(this.composing.start, cm.getCursor(\"to\"),\n                                           {className: \"CodeMirror-composing\"})\n      }\n    })\n    return true\n  }\n\n  ensurePolled() {\n    if (this.pollingFast && this.poll()) this.pollingFast = false\n  }\n\n  onKeyPress() {\n    if (ie && ie_version >= 9) this.hasSelection = null\n    this.fastPoll()\n  }\n\n  onContextMenu(e) {\n    let input = this, cm = input.cm, display = cm.display, te = input.textarea\n    let pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop\n    if (!pos || presto) return // Opera is difficult.\n\n    // Reset the current text selection only if the click is done outside of the selection\n    // and 'resetSelectionOnContextMenu' option is true.\n    let reset = cm.options.resetSelectionOnContextMenu\n    if (reset && cm.doc.sel.contains(pos) == -1)\n      operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll)\n\n    let oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText\n    input.wrapper.style.cssText = \"position: absolute\"\n    let wrapperBox = input.wrapper.getBoundingClientRect()\n    te.style.cssText = `position: absolute; width: 30px; height: 30px;\n      top: ${e.clientY - wrapperBox.top - 5}px; left: ${e.clientX - wrapperBox.left - 5}px;\n      z-index: 1000; background: ${ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\"};\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);`\n    let oldScrollY\n    if (webkit) oldScrollY = window.scrollY // Work around Chrome issue (#2712)\n    display.input.focus()\n    if (webkit) window.scrollTo(null, oldScrollY)\n    display.input.reset()\n    // Adds \"Select all\" to context menu in FF\n    if (!cm.somethingSelected()) te.value = input.prevInput = \" \"\n    input.contextMenuPending = true\n    display.selForContextMenu = cm.doc.sel\n    clearTimeout(display.detectingSelectAll)\n\n    // Select-all will be greyed out if there's nothing to select, so\n    // this adds a zero-width space so that we can later check whether\n    // it got selected.\n    function prepareSelectAllHack() {\n      if (te.selectionStart != null) {\n        let selected = cm.somethingSelected()\n        let extval = \"\\u200b\" + (selected ? te.value : \"\")\n        te.value = \"\\u21da\" // Used to catch context-menu undo\n        te.value = extval\n        input.prevInput = selected ? \"\" : \"\\u200b\"\n        te.selectionStart = 1; te.selectionEnd = extval.length\n        // Re-set this, in case some other handler touched the\n        // selection in the meantime.\n        display.selForContextMenu = cm.doc.sel\n      }\n    }\n    function rehide() {\n      input.contextMenuPending = false\n      input.wrapper.style.cssText = oldWrapperCSS\n      te.style.cssText = oldCSS\n      if (ie && ie_version < 9) display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos)\n\n      // Try to detect the user choosing select-all\n      if (te.selectionStart != null) {\n        if (!ie || (ie && ie_version < 9)) prepareSelectAllHack()\n        let i = 0, poll = () => {\n          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n              te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n            operation(cm, selectAll)(cm)\n          } else if (i++ < 10) {\n            display.detectingSelectAll = setTimeout(poll, 500)\n          } else {\n            display.selForContextMenu = null\n            display.input.reset()\n          }\n        }\n        display.detectingSelectAll = setTimeout(poll, 200)\n      }\n    }\n\n    if (ie && ie_version >= 9) prepareSelectAllHack()\n    if (captureRightClick) {\n      e_stop(e)\n      let mouseup = () => {\n        off(window, \"mouseup\", mouseup)\n        setTimeout(rehide, 20)\n      }\n      on(window, \"mouseup\", mouseup)\n    } else {\n      setTimeout(rehide, 50)\n    }\n  }\n\n  readOnlyChanged(val) {\n    if (!val) this.reset()\n  }\n\n  setUneditable() {}\n}\n\nTextareaInput.prototype.needsContentAttribute = false\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/input/indent.js",
    "content": "import { getStateBefore } from \"../line/highlight\"\nimport { Pos } from \"../line/pos\"\nimport { getLine } from \"../line/utils_line\"\nimport { replaceRange } from \"../model/changes\"\nimport { Range } from \"../model/selection\"\nimport { replaceOneSelection } from \"../model/selection_updates\"\nimport { countColumn, Pass, spaceStr } from \"../util/misc\"\n\n// Indent the given line. The how parameter can be \"smart\",\n// \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n// (typically set to true for forced single-line indents), empty\n// lines are not indented, and places where the mode returns Pass\n// are left alone.\nexport function indentLine(cm, n, how, aggressive) {\n  let doc = cm.doc, state\n  if (how == null) how = \"add\"\n  if (how == \"smart\") {\n    // Fall back to \"prev\" when the mode doesn't have an indentation\n    // method.\n    if (!doc.mode.indent) how = \"prev\"\n    else state = getStateBefore(cm, n)\n  }\n\n  let tabSize = cm.options.tabSize\n  let line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize)\n  if (line.stateAfter) line.stateAfter = null\n  let curSpaceString = line.text.match(/^\\s*/)[0], indentation\n  if (!aggressive && !/\\S/.test(line.text)) {\n    indentation = 0\n    how = \"not\"\n  } else if (how == \"smart\") {\n    indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text)\n    if (indentation == Pass || indentation > 150) {\n      if (!aggressive) return\n      how = \"prev\"\n    }\n  }\n  if (how == \"prev\") {\n    if (n > doc.first) indentation = countColumn(getLine(doc, n-1).text, null, tabSize)\n    else indentation = 0\n  } else if (how == \"add\") {\n    indentation = curSpace + cm.options.indentUnit\n  } else if (how == \"subtract\") {\n    indentation = curSpace - cm.options.indentUnit\n  } else if (typeof how == \"number\") {\n    indentation = curSpace + how\n  }\n  indentation = Math.max(0, indentation)\n\n  let indentString = \"\", pos = 0\n  if (cm.options.indentWithTabs)\n    for (let i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\"}\n  if (pos < indentation) indentString += spaceStr(indentation - pos)\n\n  if (indentString != curSpaceString) {\n    replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\")\n    line.stateAfter = null\n    return true\n  } else {\n    // Ensure that, if the cursor was in the whitespace at the start\n    // of the line, it is moved to the end of that space.\n    for (let i = 0; i < doc.sel.ranges.length; i++) {\n      let range = doc.sel.ranges[i]\n      if (range.head.line == n && range.head.ch < curSpaceString.length) {\n        let pos = Pos(n, curSpaceString.length)\n        replaceOneSelection(doc, i, new Range(pos, pos))\n        break\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/input/input.js",
    "content": "import { runInOp } from \"../display/operations\"\nimport { ensureCursorVisible } from \"../display/scrolling\"\nimport { Pos } from \"../line/pos\"\nimport { getLine } from \"../line/utils_line\"\nimport { makeChange } from \"../model/changes\"\nimport { ios, webkit } from \"../util/browser\"\nimport { elt } from \"../util/dom\"\nimport { lst, map } from \"../util/misc\"\nimport { signalLater } from \"../util/operation_group\"\nimport { splitLinesAuto } from \"../util/feature_detection\"\n\nimport { indentLine } from \"./indent\"\n\n// This will be set to a {lineWise: bool, text: [string]} object, so\n// that, when pasting, we know what kind of selections the copied\n// text was made out of.\nexport let lastCopied = null\n\nexport function setLastCopied(newLastCopied) {\n  lastCopied = newLastCopied\n}\n\nexport function applyTextInput(cm, inserted, deleted, sel, origin) {\n  let doc = cm.doc\n  cm.display.shift = false\n  if (!sel) sel = doc.sel\n\n  let paste = cm.state.pasteIncoming || origin == \"paste\"\n  let textLines = splitLinesAuto(inserted), multiPaste = null\n  // When pasing N lines into N selections, insert one line per selection\n  if (paste && sel.ranges.length > 1) {\n    if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n      if (sel.ranges.length % lastCopied.text.length == 0) {\n        multiPaste = []\n        for (let i = 0; i < lastCopied.text.length; i++)\n          multiPaste.push(doc.splitLines(lastCopied.text[i]))\n      }\n    } else if (textLines.length == sel.ranges.length) {\n      multiPaste = map(textLines, l => [l])\n    }\n  }\n\n  let updateInput\n  // Normal behavior is to insert the new text into every selection\n  for (let i = sel.ranges.length - 1; i >= 0; i--) {\n    let range = sel.ranges[i]\n    let from = range.from(), to = range.to()\n    if (range.empty()) {\n      if (deleted && deleted > 0) // Handle deletion\n        from = Pos(from.line, from.ch - deleted)\n      else if (cm.state.overwrite && !paste) // Handle overwrite\n        to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length))\n      else if (lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == inserted)\n        from = to = Pos(from.line, 0)\n    }\n    updateInput = cm.curOp.updateInput\n    let changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines,\n                       origin: origin || (paste ? \"paste\" : cm.state.cutIncoming ? \"cut\" : \"+input\")}\n    makeChange(cm.doc, changeEvent)\n    signalLater(cm, \"inputRead\", cm, changeEvent)\n  }\n  if (inserted && !paste)\n    triggerElectric(cm, inserted)\n\n  ensureCursorVisible(cm)\n  cm.curOp.updateInput = updateInput\n  cm.curOp.typing = true\n  cm.state.pasteIncoming = cm.state.cutIncoming = false\n}\n\nexport function handlePaste(e, cm) {\n  let pasted = e.clipboardData && e.clipboardData.getData(\"Text\")\n  if (pasted) {\n    e.preventDefault()\n    if (!cm.isReadOnly() && !cm.options.disableInput)\n      runInOp(cm, () => applyTextInput(cm, pasted, 0, null, \"paste\"))\n    return true\n  }\n}\n\nexport function triggerElectric(cm, inserted) {\n  // When an 'electric' character is inserted, immediately trigger a reindent\n  if (!cm.options.electricChars || !cm.options.smartIndent) return\n  let sel = cm.doc.sel\n\n  for (let i = sel.ranges.length - 1; i >= 0; i--) {\n    let range = sel.ranges[i]\n    if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) continue\n    let mode = cm.getModeAt(range.head)\n    let indented = false\n    if (mode.electricChars) {\n      for (let j = 0; j < mode.electricChars.length; j++)\n        if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n          indented = indentLine(cm, range.head.line, \"smart\")\n          break\n        }\n    } else if (mode.electricInput) {\n      if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n        indented = indentLine(cm, range.head.line, \"smart\")\n    }\n    if (indented) signalLater(cm, \"electricInput\", cm, range.head.line)\n  }\n}\n\nexport function copyableRanges(cm) {\n  let text = [], ranges = []\n  for (let i = 0; i < cm.doc.sel.ranges.length; i++) {\n    let line = cm.doc.sel.ranges[i].head.line\n    let lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)}\n    ranges.push(lineRange)\n    text.push(cm.getRange(lineRange.anchor, lineRange.head))\n  }\n  return {text: text, ranges: ranges}\n}\n\nexport function disableBrowserMagic(field, spellcheck) {\n  field.setAttribute(\"autocorrect\", \"off\")\n  field.setAttribute(\"autocapitalize\", \"off\")\n  field.setAttribute(\"spellcheck\", !!spellcheck)\n}\n\nexport function hiddenTextarea() {\n  let te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\")\n  let div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\")\n  // The textarea is kept positioned near the cursor to prevent the\n  // fact that it'll be scrolled into view on input from scrolling\n  // our fake cursor out of view. On webkit, when wrap=off, paste is\n  // very slow. So make the area wide instead.\n  if (webkit) te.style.width = \"1000px\"\n  else te.setAttribute(\"wrap\", \"off\")\n  // If border: 0; -- iOS fails to open keyboard (issue #1287)\n  if (ios) te.style.border = \"1px solid black\"\n  disableBrowserMagic(te)\n  return div\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/input/keymap.js",
    "content": "import { flipCtrlCmd, mac, presto } from \"../util/browser\"\nimport { map } from \"../util/misc\"\n\nimport { keyNames } from \"./keynames\"\n\nexport let keyMap = {}\n\nkeyMap.basic = {\n  \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n  \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n  \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n  \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n  \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n  \"Esc\": \"singleSelection\"\n}\n// Note that the save and find-related commands aren't defined by\n// default. User code or addons can define them. Unknown commands\n// are simply ignored.\nkeyMap.pcDefault = {\n  \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n  \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n  \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n  \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n  \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n  \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n  \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n  fallthrough: \"basic\"\n}\n// Very basic readline/emacs-style bindings, which are standard on Mac.\nkeyMap.emacsy = {\n  \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n  \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n  \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n  \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n  \"Ctrl-O\": \"openLine\"\n}\nkeyMap.macDefault = {\n  \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n  \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n  \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n  \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n  \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n  \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n  \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n  fallthrough: [\"basic\", \"emacsy\"]\n}\nkeyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault\n\n// KEYMAP DISPATCH\n\nfunction normalizeKeyName(name) {\n  let parts = name.split(/-(?!$)/)\n  name = parts[parts.length - 1]\n  let alt, ctrl, shift, cmd\n  for (let i = 0; i < parts.length - 1; i++) {\n    let mod = parts[i]\n    if (/^(cmd|meta|m)$/i.test(mod)) cmd = true\n    else if (/^a(lt)?$/i.test(mod)) alt = true\n    else if (/^(c|ctrl|control)$/i.test(mod)) ctrl = true\n    else if (/^s(hift)?$/i.test(mod)) shift = true\n    else throw new Error(\"Unrecognized modifier name: \" + mod)\n  }\n  if (alt) name = \"Alt-\" + name\n  if (ctrl) name = \"Ctrl-\" + name\n  if (cmd) name = \"Cmd-\" + name\n  if (shift) name = \"Shift-\" + name\n  return name\n}\n\n// This is a kludge to keep keymaps mostly working as raw objects\n// (backwards compatibility) while at the same time support features\n// like normalization and multi-stroke key bindings. It compiles a\n// new normalized keymap, and then updates the old object to reflect\n// this.\nexport function normalizeKeyMap(keymap) {\n  let copy = {}\n  for (let keyname in keymap) if (keymap.hasOwnProperty(keyname)) {\n    let value = keymap[keyname]\n    if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) continue\n    if (value == \"...\") { delete keymap[keyname]; continue }\n\n    let keys = map(keyname.split(\" \"), normalizeKeyName)\n    for (let i = 0; i < keys.length; i++) {\n      let val, name\n      if (i == keys.length - 1) {\n        name = keys.join(\" \")\n        val = value\n      } else {\n        name = keys.slice(0, i + 1).join(\" \")\n        val = \"...\"\n      }\n      let prev = copy[name]\n      if (!prev) copy[name] = val\n      else if (prev != val) throw new Error(\"Inconsistent bindings for \" + name)\n    }\n    delete keymap[keyname]\n  }\n  for (let prop in copy) keymap[prop] = copy[prop]\n  return keymap\n}\n\nexport function lookupKey(key, map, handle, context) {\n  map = getKeyMap(map)\n  let found = map.call ? map.call(key, context) : map[key]\n  if (found === false) return \"nothing\"\n  if (found === \"...\") return \"multi\"\n  if (found != null && handle(found)) return \"handled\"\n\n  if (map.fallthrough) {\n    if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n      return lookupKey(key, map.fallthrough, handle, context)\n    for (let i = 0; i < map.fallthrough.length; i++) {\n      let result = lookupKey(key, map.fallthrough[i], handle, context)\n      if (result) return result\n    }\n  }\n}\n\n// Modifier key presses don't count as 'real' key presses for the\n// purpose of keymap fallthrough.\nexport function isModifierKey(value) {\n  let name = typeof value == \"string\" ? value : keyNames[value.keyCode]\n  return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n}\n\n// Look up the name of a key as indicated by an event object.\nexport function keyName(event, noShift) {\n  if (presto && event.keyCode == 34 && event[\"char\"]) return false\n  let base = keyNames[event.keyCode], name = base\n  if (name == null || event.altGraphKey) return false\n  if (event.altKey && base != \"Alt\") name = \"Alt-\" + name\n  if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") name = \"Ctrl-\" + name\n  if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Cmd\") name = \"Cmd-\" + name\n  if (!noShift && event.shiftKey && base != \"Shift\") name = \"Shift-\" + name\n  return name\n}\n\nexport function getKeyMap(val) {\n  return typeof val == \"string\" ? keyMap[val] : val\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/input/keynames.js",
    "content": "export let keyNames = {\n  3: \"Enter\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n  19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n  36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n  46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n  106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 127: \"Delete\",\n  173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n  221: \"]\", 222: \"'\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n  63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n}\n\n// Number keys\nfor (let i = 0; i < 10; i++) keyNames[i + 48] = keyNames[i + 96] = String(i)\n// Alphabetic keys\nfor (let i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i)\n// Function keys\nfor (let i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = \"F\" + i\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/input/movement.js",
    "content": "import { Pos } from \"../line/pos\"\nimport { prepareMeasureForLine, measureCharPrepared, wrappedLineExtentChar } from \"../measurement/position_measurement\"\nimport { getBidiPartAt, getOrder } from \"../util/bidi\"\nimport { findFirst, lst, skipExtendingChars } from \"../util/misc\"\n\nfunction moveCharLogically(line, ch, dir) {\n  let target = skipExtendingChars(line.text, ch + dir, dir)\n  return target < 0 || target > line.text.length ? null : target\n}\n\nexport function moveLogically(line, start, dir) {\n  let ch = moveCharLogically(line, start.ch, dir)\n  return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n}\n\nexport function endOfLine(visually, cm, lineObj, lineNo, dir) {\n  if (visually) {\n    let order = getOrder(lineObj, cm.doc.direction)\n    if (order) {\n      let part = dir < 0 ? lst(order) : order[0]\n      let moveInStorageOrder = (dir < 0) == (part.level == 1)\n      let sticky = moveInStorageOrder ? \"after\" : \"before\"\n      let ch\n      // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n      // it could be that the last bidi part is not on the last visual line,\n      // since visual lines contain content order-consecutive chunks.\n      // Thus, in rtl, we are looking for the first (content-order) character\n      // in the rtl chunk that is on the last line (that is, the same line\n      // as the last (content-order) character).\n      if (part.level > 0) {\n        let prep = prepareMeasureForLine(cm, lineObj)\n        ch = dir < 0 ? lineObj.text.length - 1 : 0\n        let targetTop = measureCharPrepared(cm, prep, ch).top\n        ch = findFirst(ch => measureCharPrepared(cm, prep, ch).top == targetTop, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch)\n        if (sticky == \"before\") ch = moveCharLogically(lineObj, ch, 1, true)\n      } else ch = dir < 0 ? part.to : part.from\n      return new Pos(lineNo, ch, sticky)\n    }\n  }\n  return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n}\n\nexport function moveVisually(cm, line, start, dir) {\n  let bidi = getOrder(line, cm.doc.direction)\n  if (!bidi) return moveLogically(line, start, dir)\n  if (start.ch >= line.text.length) {\n    start.ch = line.text.length\n    start.sticky = \"before\"\n  } else if (start.ch <= 0) {\n    start.ch = 0\n    start.sticky = \"after\"\n  }\n  let partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos]\n  if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n    // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n    // nothing interesting happens.\n    return moveLogically(line, start, dir)\n  }\n\n  let mv = (pos, dir) => moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir)\n  let prep\n  let getWrappedLineExtent = ch => {\n    if (!cm.options.lineWrapping) return {begin: 0, end: line.text.length}\n    prep = prep || prepareMeasureForLine(cm, line)\n    return wrappedLineExtentChar(cm, line, prep, ch)\n  }\n  let wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch)\n\n  if (cm.doc.direction == \"rtl\" || part.level == 1) {\n    let moveInStorageOrder = (part.level == 1) == (dir < 0)\n    let ch = mv(start, moveInStorageOrder ? 1 : -1)\n    if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n      // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n      let sticky = moveInStorageOrder ? \"before\" : \"after\"\n      return new Pos(start.line, ch, sticky)\n    }\n  }\n\n  // Case 3: Could not move within this bidi part in this visual line, so leave\n  // the current bidi part\n\n  let searchInVisualLine = (partPos, dir, wrappedLineExtent) => {\n    let getRes = (ch, moveInStorageOrder) => moveInStorageOrder\n      ? new Pos(start.line, mv(ch, 1), \"before\")\n      : new Pos(start.line, ch, \"after\")\n\n    for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n      let part = bidi[partPos]\n      let moveInStorageOrder = (dir > 0) == (part.level != 1)\n      let ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1)\n      if (part.from <= ch && ch < part.to) return getRes(ch, moveInStorageOrder)\n      ch = moveInStorageOrder ? part.from : mv(part.to, -1)\n      if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) return getRes(ch, moveInStorageOrder)\n    }\n  }\n\n  // Case 3a: Look for other bidi parts on the same visual line\n  let res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent)\n  if (res) return res\n\n  // Case 3b: Look for other bidi parts on the next visual line\n  let nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1)\n  if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n    res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh))\n    if (res) return res\n  }\n\n  // Case 4: Nowhere to move\n  return null\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/line/highlight.js",
    "content": "import { countColumn } from \"../util/misc\"\nimport { copyState, innerMode, startState } from \"../modes\"\nimport StringStream from \"../util/StringStream\"\n\nimport { getLine, lineNo } from \"./utils_line\"\nimport { clipPos } from \"./pos\"\n\n// Compute a style array (an array starting with a mode generation\n// -- for invalidation -- followed by pairs of end positions and\n// style strings), which is used to highlight the tokens on the\n// line.\nexport function highlightLine(cm, line, state, forceToEnd) {\n  // A styles array always starts with a number identifying the\n  // mode/overlays that it is based on (for easy invalidation).\n  let st = [cm.state.modeGen], lineClasses = {}\n  // Compute the base array of styles\n  runMode(cm, line.text, cm.doc.mode, state, (end, style) => st.push(end, style),\n    lineClasses, forceToEnd)\n\n  // Run overlays, adjust style array.\n  for (let o = 0; o < cm.state.overlays.length; ++o) {\n    let overlay = cm.state.overlays[o], i = 1, at = 0\n    runMode(cm, line.text, overlay.mode, true, (end, style) => {\n      let start = i\n      // Ensure there's a token end at the current position, and that i points at it\n      while (at < end) {\n        let i_end = st[i]\n        if (i_end > end)\n          st.splice(i, 1, end, st[i+1], i_end)\n        i += 2\n        at = Math.min(end, i_end)\n      }\n      if (!style) return\n      if (overlay.opaque) {\n        st.splice(start, i - start, end, \"overlay \" + style)\n        i = start + 2\n      } else {\n        for (; start < i; start += 2) {\n          let cur = st[start+1]\n          st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style\n        }\n      }\n    }, lineClasses)\n  }\n\n  return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n}\n\nexport function getLineStyles(cm, line, updateFrontier) {\n  if (!line.styles || line.styles[0] != cm.state.modeGen) {\n    let state = getStateBefore(cm, lineNo(line))\n    let result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state)\n    line.stateAfter = state\n    line.styles = result.styles\n    if (result.classes) line.styleClasses = result.classes\n    else if (line.styleClasses) line.styleClasses = null\n    if (updateFrontier === cm.doc.frontier) cm.doc.frontier++\n  }\n  return line.styles\n}\n\nexport function getStateBefore(cm, n, precise) {\n  let doc = cm.doc, display = cm.display\n  if (!doc.mode.startState) return true\n  let pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter\n  if (!state) state = startState(doc.mode)\n  else state = copyState(doc.mode, state)\n  doc.iter(pos, n, line => {\n    processLine(cm, line.text, state)\n    let save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo\n    line.stateAfter = save ? copyState(doc.mode, state) : null\n    ++pos\n  })\n  if (precise) doc.frontier = pos\n  return state\n}\n\n// Lightweight form of highlight -- proceed over this line and\n// update state, but don't save a style array. Used for lines that\n// aren't currently visible.\nexport function processLine(cm, text, state, startAt) {\n  let mode = cm.doc.mode\n  let stream = new StringStream(text, cm.options.tabSize)\n  stream.start = stream.pos = startAt || 0\n  if (text == \"\") callBlankLine(mode, state)\n  while (!stream.eol()) {\n    readToken(mode, stream, state)\n    stream.start = stream.pos\n  }\n}\n\nfunction callBlankLine(mode, state) {\n  if (mode.blankLine) return mode.blankLine(state)\n  if (!mode.innerMode) return\n  let inner = innerMode(mode, state)\n  if (inner.mode.blankLine) return inner.mode.blankLine(inner.state)\n}\n\nexport function readToken(mode, stream, state, inner) {\n  for (let i = 0; i < 10; i++) {\n    if (inner) inner[0] = innerMode(mode, state).mode\n    let style = mode.token(stream, state)\n    if (stream.pos > stream.start) return style\n  }\n  throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n}\n\n// Utility for getTokenAt and getLineTokens\nexport function takeToken(cm, pos, precise, asArray) {\n  let getObj = copy => ({\n    start: stream.start, end: stream.pos,\n    string: stream.current(),\n    type: style || null,\n    state: copy ? copyState(doc.mode, state) : state\n  })\n\n  let doc = cm.doc, mode = doc.mode, style\n  pos = clipPos(doc, pos)\n  let line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise)\n  let stream = new StringStream(line.text, cm.options.tabSize), tokens\n  if (asArray) tokens = []\n  while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n    stream.start = stream.pos\n    style = readToken(mode, stream, state)\n    if (asArray) tokens.push(getObj(true))\n  }\n  return asArray ? tokens : getObj()\n}\n\nfunction extractLineClasses(type, output) {\n  if (type) for (;;) {\n    let lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/)\n    if (!lineClass) break\n    type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length)\n    let prop = lineClass[1] ? \"bgClass\" : \"textClass\"\n    if (output[prop] == null)\n      output[prop] = lineClass[2]\n    else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(output[prop]))\n      output[prop] += \" \" + lineClass[2]\n  }\n  return type\n}\n\n// Run the given mode's parser over a line, calling f for each token.\nfunction runMode(cm, text, mode, state, f, lineClasses, forceToEnd) {\n  let flattenSpans = mode.flattenSpans\n  if (flattenSpans == null) flattenSpans = cm.options.flattenSpans\n  let curStart = 0, curStyle = null\n  let stream = new StringStream(text, cm.options.tabSize), style\n  let inner = cm.options.addModeClass && [null]\n  if (text == \"\") extractLineClasses(callBlankLine(mode, state), lineClasses)\n  while (!stream.eol()) {\n    if (stream.pos > cm.options.maxHighlightLength) {\n      flattenSpans = false\n      if (forceToEnd) processLine(cm, text, state, stream.pos)\n      stream.pos = text.length\n      style = null\n    } else {\n      style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses)\n    }\n    if (inner) {\n      let mName = inner[0].name\n      if (mName) style = \"m-\" + (style ? mName + \" \" + style : mName)\n    }\n    if (!flattenSpans || curStyle != style) {\n      while (curStart < stream.start) {\n        curStart = Math.min(stream.start, curStart + 5000)\n        f(curStart, curStyle)\n      }\n      curStyle = style\n    }\n    stream.start = stream.pos\n  }\n  while (curStart < stream.pos) {\n    // Webkit seems to refuse to render text nodes longer than 57444\n    // characters, and returns inaccurate measurements in nodes\n    // starting around 5000 chars.\n    let pos = Math.min(stream.pos, curStart + 5000)\n    f(pos, curStyle)\n    curStart = pos\n  }\n}\n\n// Finds the line to start with when starting a parse. Tries to\n// find a line with a stateAfter, so that it can start with a\n// valid state. If that fails, it returns the line with the\n// smallest indentation, which tends to need the least context to\n// parse correctly.\nfunction findStartLine(cm, n, precise) {\n  let minindent, minline, doc = cm.doc\n  let lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100)\n  for (let search = n; search > lim; --search) {\n    if (search <= doc.first) return doc.first\n    let line = getLine(doc, search - 1)\n    if (line.stateAfter && (!precise || search <= doc.frontier)) return search\n    let indented = countColumn(line.text, null, cm.options.tabSize)\n    if (minline == null || minindent > indented) {\n      minline = search - 1\n      minindent = indented\n    }\n  }\n  return minline\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/line/line_data.js",
    "content": "import { getOrder } from \"../util/bidi\"\nimport { ie, ie_version, webkit } from \"../util/browser\"\nimport { elt, eltP, joinClasses } from \"../util/dom\"\nimport { eventMixin, signal } from \"../util/event\"\nimport { hasBadBidiRects, zeroWidthElement } from \"../util/feature_detection\"\nimport { lst, spaceStr } from \"../util/misc\"\n\nimport { getLineStyles } from \"./highlight\"\nimport { attachMarkedSpans, compareCollapsedMarkers, detachMarkedSpans, lineIsHidden, visualLineContinued } from \"./spans\"\nimport { getLine, lineNo, updateLineHeight } from \"./utils_line\"\n\n// LINE DATA STRUCTURE\n\n// Line objects. These hold state related to a line, including\n// highlighting info (the styles array).\nexport class Line {\n  constructor(text, markedSpans, estimateHeight) {\n    this.text = text\n    attachMarkedSpans(this, markedSpans)\n    this.height = estimateHeight ? estimateHeight(this) : 1\n  }\n\n  lineNo() { return lineNo(this) }\n}\neventMixin(Line)\n\n// Change the content (text, markers) of a line. Automatically\n// invalidates cached information and tries to re-estimate the\n// line's height.\nexport function updateLine(line, text, markedSpans, estimateHeight) {\n  line.text = text\n  if (line.stateAfter) line.stateAfter = null\n  if (line.styles) line.styles = null\n  if (line.order != null) line.order = null\n  detachMarkedSpans(line)\n  attachMarkedSpans(line, markedSpans)\n  let estHeight = estimateHeight ? estimateHeight(line) : 1\n  if (estHeight != line.height) updateLineHeight(line, estHeight)\n}\n\n// Detach a line from the document tree and its markers.\nexport function cleanUpLine(line) {\n  line.parent = null\n  detachMarkedSpans(line)\n}\n\n// Convert a style as returned by a mode (either null, or a string\n// containing one or more styles) to a CSS style. This is cached,\n// and also looks for line-wide styles.\nlet styleToClassCache = {}, styleToClassCacheWithMode = {}\nfunction interpretTokenStyle(style, options) {\n  if (!style || /^\\s*$/.test(style)) return null\n  let cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache\n  return cache[style] ||\n    (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n}\n\n// Render the DOM representation of the text of a line. Also builds\n// up a 'line map', which points at the DOM nodes that represent\n// specific stretches of text, and is used by the measuring code.\n// The returned object contains the DOM node, this map, and\n// information about line-wide styles that were set by the mode.\nexport function buildLineContent(cm, lineView) {\n  // The padding-right forces the element to have a 'border', which\n  // is needed on Webkit to be able to get line-level bounding\n  // rectangles for it (in measureChar).\n  let content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null)\n  let builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n                 col: 0, pos: 0, cm: cm,\n                 trailingSpace: false,\n                 splitSpaces: (ie || webkit) && cm.getOption(\"lineWrapping\")}\n  lineView.measure = {}\n\n  // Iterate over the logical lines that make up this visual line.\n  for (let i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n    let line = i ? lineView.rest[i - 1] : lineView.line, order\n    builder.pos = 0\n    builder.addToken = buildToken\n    // Optionally wire in some hacks into the token-rendering\n    // algorithm, to deal with browser quirks.\n    if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n      builder.addToken = buildTokenBadBidi(builder.addToken, order)\n    builder.map = []\n    let allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line)\n    insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate))\n    if (line.styleClasses) {\n      if (line.styleClasses.bgClass)\n        builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\")\n      if (line.styleClasses.textClass)\n        builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\")\n    }\n\n    // Ensure at least a single node is present, for measuring.\n    if (builder.map.length == 0)\n      builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure)))\n\n    // Store the map and a cache object for the current logical line\n    if (i == 0) {\n      lineView.measure.map = builder.map\n      lineView.measure.cache = {}\n    } else {\n      ;(lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n      ;(lineView.measure.caches || (lineView.measure.caches = [])).push({})\n    }\n  }\n\n  // See issue #2901\n  if (webkit) {\n    let last = builder.content.lastChild\n    if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n      builder.content.className = \"cm-tab-wrap-hack\"\n  }\n\n  signal(cm, \"renderLine\", cm, lineView.line, builder.pre)\n  if (builder.pre.className)\n    builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\")\n\n  return builder\n}\n\nexport function defaultSpecialCharPlaceholder(ch) {\n  let token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\")\n  token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16)\n  token.setAttribute(\"aria-label\", token.title)\n  return token\n}\n\n// Build up the DOM representation for a single token, and add it to\n// the line map. Takes care to render special characters separately.\nfunction buildToken(builder, text, style, startStyle, endStyle, title, css) {\n  if (!text) return\n  let displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text\n  let special = builder.cm.state.specialChars, mustWrap = false\n  let content\n  if (!special.test(text)) {\n    builder.col += text.length\n    content = document.createTextNode(displayText)\n    builder.map.push(builder.pos, builder.pos + text.length, content)\n    if (ie && ie_version < 9) mustWrap = true\n    builder.pos += text.length\n  } else {\n    content = document.createDocumentFragment()\n    let pos = 0\n    while (true) {\n      special.lastIndex = pos\n      let m = special.exec(text)\n      let skipped = m ? m.index - pos : text.length - pos\n      if (skipped) {\n        let txt = document.createTextNode(displayText.slice(pos, pos + skipped))\n        if (ie && ie_version < 9) content.appendChild(elt(\"span\", [txt]))\n        else content.appendChild(txt)\n        builder.map.push(builder.pos, builder.pos + skipped, txt)\n        builder.col += skipped\n        builder.pos += skipped\n      }\n      if (!m) break\n      pos += skipped + 1\n      let txt\n      if (m[0] == \"\\t\") {\n        let tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize\n        txt = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"))\n        txt.setAttribute(\"role\", \"presentation\")\n        txt.setAttribute(\"cm-text\", \"\\t\")\n        builder.col += tabWidth\n      } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n        txt = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"))\n        txt.setAttribute(\"cm-text\", m[0])\n        builder.col += 1\n      } else {\n        txt = builder.cm.options.specialCharPlaceholder(m[0])\n        txt.setAttribute(\"cm-text\", m[0])\n        if (ie && ie_version < 9) content.appendChild(elt(\"span\", [txt]))\n        else content.appendChild(txt)\n        builder.col += 1\n      }\n      builder.map.push(builder.pos, builder.pos + 1, txt)\n      builder.pos++\n    }\n  }\n  builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32\n  if (style || startStyle || endStyle || mustWrap || css) {\n    let fullStyle = style || \"\"\n    if (startStyle) fullStyle += startStyle\n    if (endStyle) fullStyle += endStyle\n    let token = elt(\"span\", [content], fullStyle, css)\n    if (title) token.title = title\n    return builder.content.appendChild(token)\n  }\n  builder.content.appendChild(content)\n}\n\nfunction splitSpaces(text, trailingBefore) {\n  if (text.length > 1 && !/  /.test(text)) return text\n  let spaceBefore = trailingBefore, result = \"\"\n  for (let i = 0; i < text.length; i++) {\n    let ch = text.charAt(i)\n    if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n      ch = \"\\u00a0\"\n    result += ch\n    spaceBefore = ch == \" \"\n  }\n  return result\n}\n\n// Work around nonsense dimensions being reported for stretches of\n// right-to-left text.\nfunction buildTokenBadBidi(inner, order) {\n  return (builder, text, style, startStyle, endStyle, title, css) => {\n    style = style ? style + \" cm-force-border\" : \"cm-force-border\"\n    let start = builder.pos, end = start + text.length\n    for (;;) {\n      // Find the part that overlaps with the start of this text\n      let part\n      for (let i = 0; i < order.length; i++) {\n        part = order[i]\n        if (part.to > start && part.from <= start) break\n      }\n      if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title, css)\n      inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css)\n      startStyle = null\n      text = text.slice(part.to - start)\n      start = part.to\n    }\n  }\n}\n\nfunction buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n  let widget = !ignoreWidget && marker.widgetNode\n  if (widget) builder.map.push(builder.pos, builder.pos + size, widget)\n  if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n    if (!widget)\n      widget = builder.content.appendChild(document.createElement(\"span\"))\n    widget.setAttribute(\"cm-marker\", marker.id)\n  }\n  if (widget) {\n    builder.cm.display.input.setUneditable(widget)\n    builder.content.appendChild(widget)\n  }\n  builder.pos += size\n  builder.trailingSpace = false\n}\n\n// Outputs a number of spans to make up a line, taking highlighting\n// and marked text into account.\nfunction insertLineContent(line, builder, styles) {\n  let spans = line.markedSpans, allText = line.text, at = 0\n  if (!spans) {\n    for (let i = 1; i < styles.length; i+=2)\n      builder.addToken(builder, allText.slice(at, at = styles[i]), interpretTokenStyle(styles[i+1], builder.cm.options))\n    return\n  }\n\n  let len = allText.length, pos = 0, i = 1, text = \"\", style, css\n  let nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed\n  for (;;) {\n    if (nextChange == pos) { // Update current marker set\n      spanStyle = spanEndStyle = spanStartStyle = title = css = \"\"\n      collapsed = null; nextChange = Infinity\n      let foundBookmarks = [], endStyles\n      for (let j = 0; j < spans.length; ++j) {\n        let sp = spans[j], m = sp.marker\n        if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n          foundBookmarks.push(m)\n        } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n          if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n            nextChange = sp.to\n            spanEndStyle = \"\"\n          }\n          if (m.className) spanStyle += \" \" + m.className\n          if (m.css) css = (css ? css + \";\" : \"\") + m.css\n          if (m.startStyle && sp.from == pos) spanStartStyle += \" \" + m.startStyle\n          if (m.endStyle && sp.to == nextChange) (endStyles || (endStyles = [])).push(m.endStyle, sp.to)\n          if (m.title && !title) title = m.title\n          if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n            collapsed = sp\n        } else if (sp.from > pos && nextChange > sp.from) {\n          nextChange = sp.from\n        }\n      }\n      if (endStyles) for (let j = 0; j < endStyles.length; j += 2)\n        if (endStyles[j + 1] == nextChange) spanEndStyle += \" \" + endStyles[j]\n\n      if (!collapsed || collapsed.from == pos) for (let j = 0; j < foundBookmarks.length; ++j)\n        buildCollapsedSpan(builder, 0, foundBookmarks[j])\n      if (collapsed && (collapsed.from || 0) == pos) {\n        buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n                           collapsed.marker, collapsed.from == null)\n        if (collapsed.to == null) return\n        if (collapsed.to == pos) collapsed = false\n      }\n    }\n    if (pos >= len) break\n\n    let upto = Math.min(len, nextChange)\n    while (true) {\n      if (text) {\n        let end = pos + text.length\n        if (!collapsed) {\n          let tokenText = end > upto ? text.slice(0, upto - pos) : text\n          builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n                           spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", title, css)\n        }\n        if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n        pos = end\n        spanStartStyle = \"\"\n      }\n      text = allText.slice(at, at = styles[i++])\n      style = interpretTokenStyle(styles[i++], builder.cm.options)\n    }\n  }\n}\n\n\n// These objects are used to represent the visible (currently drawn)\n// part of the document. A LineView may correspond to multiple\n// logical lines, if those are connected by collapsed ranges.\nexport function LineView(doc, line, lineN) {\n  // The starting line\n  this.line = line\n  // Continuing lines, if any\n  this.rest = visualLineContinued(line)\n  // Number of logical lines in this visual line\n  this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1\n  this.node = this.text = null\n  this.hidden = lineIsHidden(doc, line)\n}\n\n// Create a range of LineView objects for the given lines.\nexport function buildViewArray(cm, from, to) {\n  let array = [], nextPos\n  for (let pos = from; pos < to; pos = nextPos) {\n    let view = new LineView(cm.doc, getLine(cm.doc, pos), pos)\n    nextPos = pos + view.size\n    array.push(view)\n  }\n  return array\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/line/pos.js",
    "content": "import { getLine } from \"./utils_line\"\n\n// A Pos instance represents a position within the text.\nexport function Pos(line, ch, sticky = null) {\n  if (!(this instanceof Pos)) return new Pos(line, ch, sticky)\n  this.line = line\n  this.ch = ch\n  this.sticky = sticky\n}\n\n// Compare two positions, return 0 if they are the same, a negative\n// number when a is less, and a positive number otherwise.\nexport function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\nexport function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\nexport function copyPos(x) {return Pos(x.line, x.ch)}\nexport function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\nexport function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n// Most of the external API clips given positions to make sure they\n// actually exist within the document.\nexport function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\nexport function clipPos(doc, pos) {\n  if (pos.line < doc.first) return Pos(doc.first, 0)\n  let last = doc.first + doc.size - 1\n  if (pos.line > last) return Pos(last, getLine(doc, last).text.length)\n  return clipToLen(pos, getLine(doc, pos.line).text.length)\n}\nfunction clipToLen(pos, linelen) {\n  let ch = pos.ch\n  if (ch == null || ch > linelen) return Pos(pos.line, linelen)\n  else if (ch < 0) return Pos(pos.line, 0)\n  else return pos\n}\nexport function clipPosArray(doc, array) {\n  let out = []\n  for (let i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i])\n  return out\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/line/saw_special_spans.js",
    "content": "// Optimize some code when these features are not used.\nexport let sawReadOnlySpans = false, sawCollapsedSpans = false\n\nexport function seeReadOnlySpans() {\n  sawReadOnlySpans = true\n}\n\nexport function seeCollapsedSpans() {\n  sawCollapsedSpans = true\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/line/spans.js",
    "content": "import { indexOf, lst } from \"../util/misc\"\n\nimport { cmp } from \"./pos\"\nimport { sawCollapsedSpans } from \"./saw_special_spans\"\nimport { getLine, isLine, lineNo } from \"./utils_line\"\n\n// TEXTMARKER SPANS\n\nexport function MarkedSpan(marker, from, to) {\n  this.marker = marker\n  this.from = from; this.to = to\n}\n\n// Search an array of spans for a span matching the given marker.\nexport function getMarkedSpanFor(spans, marker) {\n  if (spans) for (let i = 0; i < spans.length; ++i) {\n    let span = spans[i]\n    if (span.marker == marker) return span\n  }\n}\n// Remove a span from an array, returning undefined if no spans are\n// left (we don't store arrays for lines without spans).\nexport function removeMarkedSpan(spans, span) {\n  let r\n  for (let i = 0; i < spans.length; ++i)\n    if (spans[i] != span) (r || (r = [])).push(spans[i])\n  return r\n}\n// Add a span to a line.\nexport function addMarkedSpan(line, span) {\n  line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span]\n  span.marker.attachLine(line)\n}\n\n// Used for the algorithm that adjusts markers for a change in the\n// document. These functions cut an array of spans at a given\n// character position, returning an array of remaining chunks (or\n// undefined if nothing remains).\nfunction markedSpansBefore(old, startCh, isInsert) {\n  let nw\n  if (old) for (let i = 0; i < old.length; ++i) {\n    let span = old[i], marker = span.marker\n    let startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh)\n    if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n      let endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n      ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to))\n    }\n  }\n  return nw\n}\nfunction markedSpansAfter(old, endCh, isInsert) {\n  let nw\n  if (old) for (let i = 0; i < old.length; ++i) {\n    let span = old[i], marker = span.marker\n    let endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh)\n    if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n      let startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n      ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n                                            span.to == null ? null : span.to - endCh))\n    }\n  }\n  return nw\n}\n\n// Given a change object, compute the new set of marker spans that\n// cover the line in which the change took place. Removes spans\n// entirely within the change, reconnects spans belonging to the\n// same marker that appear on both sides of the change, and cuts off\n// spans partially within the change. Returns an array of span\n// arrays with one element for each line in (after) the change.\nexport function stretchSpansOverChange(doc, change) {\n  if (change.full) return null\n  let oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans\n  let oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans\n  if (!oldFirst && !oldLast) return null\n\n  let startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0\n  // Get the spans that 'stick out' on both sides\n  let first = markedSpansBefore(oldFirst, startCh, isInsert)\n  let last = markedSpansAfter(oldLast, endCh, isInsert)\n\n  // Next, merge those two ends\n  let sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0)\n  if (first) {\n    // Fix up .to properties of first\n    for (let i = 0; i < first.length; ++i) {\n      let span = first[i]\n      if (span.to == null) {\n        let found = getMarkedSpanFor(last, span.marker)\n        if (!found) span.to = startCh\n        else if (sameLine) span.to = found.to == null ? null : found.to + offset\n      }\n    }\n  }\n  if (last) {\n    // Fix up .from in last (or move them into first in case of sameLine)\n    for (let i = 0; i < last.length; ++i) {\n      let span = last[i]\n      if (span.to != null) span.to += offset\n      if (span.from == null) {\n        let found = getMarkedSpanFor(first, span.marker)\n        if (!found) {\n          span.from = offset\n          if (sameLine) (first || (first = [])).push(span)\n        }\n      } else {\n        span.from += offset\n        if (sameLine) (first || (first = [])).push(span)\n      }\n    }\n  }\n  // Make sure we didn't create any zero-length spans\n  if (first) first = clearEmptySpans(first)\n  if (last && last != first) last = clearEmptySpans(last)\n\n  let newMarkers = [first]\n  if (!sameLine) {\n    // Fill gap with whole-line-spans\n    let gap = change.text.length - 2, gapMarkers\n    if (gap > 0 && first)\n      for (let i = 0; i < first.length; ++i)\n        if (first[i].to == null)\n          (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i].marker, null, null))\n    for (let i = 0; i < gap; ++i)\n      newMarkers.push(gapMarkers)\n    newMarkers.push(last)\n  }\n  return newMarkers\n}\n\n// Remove spans that are empty and don't have a clearWhenEmpty\n// option of false.\nfunction clearEmptySpans(spans) {\n  for (let i = 0; i < spans.length; ++i) {\n    let span = spans[i]\n    if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n      spans.splice(i--, 1)\n  }\n  if (!spans.length) return null\n  return spans\n}\n\n// Used to 'clip' out readOnly ranges when making a change.\nexport function removeReadOnlyRanges(doc, from, to) {\n  let markers = null\n  doc.iter(from.line, to.line + 1, line => {\n    if (line.markedSpans) for (let i = 0; i < line.markedSpans.length; ++i) {\n      let mark = line.markedSpans[i].marker\n      if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n        (markers || (markers = [])).push(mark)\n    }\n  })\n  if (!markers) return null\n  let parts = [{from: from, to: to}]\n  for (let i = 0; i < markers.length; ++i) {\n    let mk = markers[i], m = mk.find(0)\n    for (let j = 0; j < parts.length; ++j) {\n      let p = parts[j]\n      if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue\n      let newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to)\n      if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n        newParts.push({from: p.from, to: m.from})\n      if (dto > 0 || !mk.inclusiveRight && !dto)\n        newParts.push({from: m.to, to: p.to})\n      parts.splice.apply(parts, newParts)\n      j += newParts.length - 3\n    }\n  }\n  return parts\n}\n\n// Connect or disconnect spans from a line.\nexport function detachMarkedSpans(line) {\n  let spans = line.markedSpans\n  if (!spans) return\n  for (let i = 0; i < spans.length; ++i)\n    spans[i].marker.detachLine(line)\n  line.markedSpans = null\n}\nexport function attachMarkedSpans(line, spans) {\n  if (!spans) return\n  for (let i = 0; i < spans.length; ++i)\n    spans[i].marker.attachLine(line)\n  line.markedSpans = spans\n}\n\n// Helpers used when computing which overlapping collapsed span\n// counts as the larger one.\nfunction extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\nfunction extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n// Returns a number indicating which of two overlapping collapsed\n// spans is larger (and thus includes the other). Falls back to\n// comparing ids when the spans cover exactly the same range.\nexport function compareCollapsedMarkers(a, b) {\n  let lenDiff = a.lines.length - b.lines.length\n  if (lenDiff != 0) return lenDiff\n  let aPos = a.find(), bPos = b.find()\n  let fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b)\n  if (fromCmp) return -fromCmp\n  let toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b)\n  if (toCmp) return toCmp\n  return b.id - a.id\n}\n\n// Find out whether a line ends or starts in a collapsed span. If\n// so, return the marker for that span.\nfunction collapsedSpanAtSide(line, start) {\n  let sps = sawCollapsedSpans && line.markedSpans, found\n  if (sps) for (let sp, i = 0; i < sps.length; ++i) {\n    sp = sps[i]\n    if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n        (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n      found = sp.marker\n  }\n  return found\n}\nexport function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\nexport function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n// Test whether there exists a collapsed span that partially\n// overlaps (covers the start or end, but not both) of a new span.\n// Such overlap is not allowed.\nexport function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n  let line = getLine(doc, lineNo)\n  let sps = sawCollapsedSpans && line.markedSpans\n  if (sps) for (let i = 0; i < sps.length; ++i) {\n    let sp = sps[i]\n    if (!sp.marker.collapsed) continue\n    let found = sp.marker.find(0)\n    let fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker)\n    let toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker)\n    if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue\n    if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n        fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n      return true\n  }\n}\n\n// A visual line is a line as drawn on the screen. Folding, for\n// example, can cause multiple logical lines to appear on the same\n// visual line. This finds the start of the visual line that the\n// given line is part of (usually that is the line itself).\nexport function visualLine(line) {\n  let merged\n  while (merged = collapsedSpanAtStart(line))\n    line = merged.find(-1, true).line\n  return line\n}\n\nexport function visualLineEnd(line) {\n  let merged\n  while (merged = collapsedSpanAtEnd(line))\n    line = merged.find(1, true).line\n  return line\n}\n\n// Returns an array of logical lines that continue the visual line\n// started by the argument, or undefined if there are no such lines.\nexport function visualLineContinued(line) {\n  let merged, lines\n  while (merged = collapsedSpanAtEnd(line)) {\n    line = merged.find(1, true).line\n    ;(lines || (lines = [])).push(line)\n  }\n  return lines\n}\n\n// Get the line number of the start of the visual line that the\n// given line number is part of.\nexport function visualLineNo(doc, lineN) {\n  let line = getLine(doc, lineN), vis = visualLine(line)\n  if (line == vis) return lineN\n  return lineNo(vis)\n}\n\n// Get the line number of the start of the next visual line after\n// the given line.\nexport function visualLineEndNo(doc, lineN) {\n  if (lineN > doc.lastLine()) return lineN\n  let line = getLine(doc, lineN), merged\n  if (!lineIsHidden(doc, line)) return lineN\n  while (merged = collapsedSpanAtEnd(line))\n    line = merged.find(1, true).line\n  return lineNo(line) + 1\n}\n\n// Compute whether a line is hidden. Lines count as hidden when they\n// are part of a visual line that starts with another line, or when\n// they are entirely covered by collapsed, non-widget span.\nexport function lineIsHidden(doc, line) {\n  let sps = sawCollapsedSpans && line.markedSpans\n  if (sps) for (let sp, i = 0; i < sps.length; ++i) {\n    sp = sps[i]\n    if (!sp.marker.collapsed) continue\n    if (sp.from == null) return true\n    if (sp.marker.widgetNode) continue\n    if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n      return true\n  }\n}\nfunction lineIsHiddenInner(doc, line, span) {\n  if (span.to == null) {\n    let end = span.marker.find(1, true)\n    return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n  }\n  if (span.marker.inclusiveRight && span.to == line.text.length)\n    return true\n  for (let sp, i = 0; i < line.markedSpans.length; ++i) {\n    sp = line.markedSpans[i]\n    if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n        (sp.to == null || sp.to != span.from) &&\n        (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n        lineIsHiddenInner(doc, line, sp)) return true\n  }\n}\n\n// Find the height above the given line.\nexport function heightAtLine(lineObj) {\n  lineObj = visualLine(lineObj)\n\n  let h = 0, chunk = lineObj.parent\n  for (let i = 0; i < chunk.lines.length; ++i) {\n    let line = chunk.lines[i]\n    if (line == lineObj) break\n    else h += line.height\n  }\n  for (let p = chunk.parent; p; chunk = p, p = chunk.parent) {\n    for (let i = 0; i < p.children.length; ++i) {\n      let cur = p.children[i]\n      if (cur == chunk) break\n      else h += cur.height\n    }\n  }\n  return h\n}\n\n// Compute the character length of a line, taking into account\n// collapsed ranges (see markText) that might hide parts, and join\n// other lines onto it.\nexport function lineLength(line) {\n  if (line.height == 0) return 0\n  let len = line.text.length, merged, cur = line\n  while (merged = collapsedSpanAtStart(cur)) {\n    let found = merged.find(0, true)\n    cur = found.from.line\n    len += found.from.ch - found.to.ch\n  }\n  cur = line\n  while (merged = collapsedSpanAtEnd(cur)) {\n    let found = merged.find(0, true)\n    len -= cur.text.length - found.from.ch\n    cur = found.to.line\n    len += cur.text.length - found.to.ch\n  }\n  return len\n}\n\n// Find the longest line in the document.\nexport function findMaxLine(cm) {\n  let d = cm.display, doc = cm.doc\n  d.maxLine = getLine(doc, doc.first)\n  d.maxLineLength = lineLength(d.maxLine)\n  d.maxLineChanged = true\n  doc.iter(line => {\n    let len = lineLength(line)\n    if (len > d.maxLineLength) {\n      d.maxLineLength = len\n      d.maxLine = line\n    }\n  })\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/line/utils_line.js",
    "content": "import { indexOf } from \"../util/misc\"\n\n// Find the line object corresponding to the given line number.\nexport function getLine(doc, n) {\n  n -= doc.first\n  if (n < 0 || n >= doc.size) throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\")\n  let chunk = doc\n  while (!chunk.lines) {\n    for (let i = 0;; ++i) {\n      let child = chunk.children[i], sz = child.chunkSize()\n      if (n < sz) { chunk = child; break }\n      n -= sz\n    }\n  }\n  return chunk.lines[n]\n}\n\n// Get the part of a document between two positions, as an array of\n// strings.\nexport function getBetween(doc, start, end) {\n  let out = [], n = start.line\n  doc.iter(start.line, end.line + 1, line => {\n    let text = line.text\n    if (n == end.line) text = text.slice(0, end.ch)\n    if (n == start.line) text = text.slice(start.ch)\n    out.push(text)\n    ++n\n  })\n  return out\n}\n// Get the lines between from and to, as array of strings.\nexport function getLines(doc, from, to) {\n  let out = []\n  doc.iter(from, to, line => { out.push(line.text) }) // iter aborts when callback returns truthy value\n  return out\n}\n\n// Update the height of a line, propagating the height change\n// upwards to parent nodes.\nexport function updateLineHeight(line, height) {\n  let diff = height - line.height\n  if (diff) for (let n = line; n; n = n.parent) n.height += diff\n}\n\n// Given a line object, find its line number by walking up through\n// its parent links.\nexport function lineNo(line) {\n  if (line.parent == null) return null\n  let cur = line.parent, no = indexOf(cur.lines, line)\n  for (let chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n    for (let i = 0;; ++i) {\n      if (chunk.children[i] == cur) break\n      no += chunk.children[i].chunkSize()\n    }\n  }\n  return no + cur.first\n}\n\n// Find the line at the given vertical position, using the height\n// information in the document tree.\nexport function lineAtHeight(chunk, h) {\n  let n = chunk.first\n  outer: do {\n    for (let i = 0; i < chunk.children.length; ++i) {\n      let child = chunk.children[i], ch = child.height\n      if (h < ch) { chunk = child; continue outer }\n      h -= ch\n      n += child.chunkSize()\n    }\n    return n\n  } while (!chunk.lines)\n  let i = 0\n  for (; i < chunk.lines.length; ++i) {\n    let line = chunk.lines[i], lh = line.height\n    if (h < lh) break\n    h -= lh\n  }\n  return n + i\n}\n\nexport function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\nexport function lineNumberFor(options, i) {\n  return String(options.lineNumberFormatter(i + options.firstLineNumber))\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/measurement/position_measurement.js",
    "content": "import { moveVisually } from \"../input/movement\"\nimport { buildLineContent, LineView } from \"../line/line_data\"\nimport { clipPos, Pos } from \"../line/pos\"\nimport { collapsedSpanAtEnd, heightAtLine, lineIsHidden, visualLine } from \"../line/spans\"\nimport { getLine, lineAtHeight, lineNo, updateLineHeight } from \"../line/utils_line\"\nimport { bidiOther, getBidiPartAt, getOrder } from \"../util/bidi\"\nimport { chrome, android, ie, ie_version } from \"../util/browser\"\nimport { elt, removeChildren, range, removeChildrenAndAdd } from \"../util/dom\"\nimport { e_target } from \"../util/event\"\nimport { hasBadZoomedRects } from \"../util/feature_detection\"\nimport { countColumn, findFirst, isExtendingChar, scrollerGap, skipExtendingChars } from \"../util/misc\"\nimport { updateLineForChanges } from \"../display/update_line\"\n\nimport { widgetHeight } from \"./widgets\"\n\n// POSITION MEASUREMENT\n\nexport function paddingTop(display) {return display.lineSpace.offsetTop}\nexport function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\nexport function paddingH(display) {\n  if (display.cachedPaddingH) return display.cachedPaddingH\n  let e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\"))\n  let style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle\n  let data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)}\n  if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data\n  return data\n}\n\nexport function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\nexport function displayWidth(cm) {\n  return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n}\nexport function displayHeight(cm) {\n  return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n}\n\n// Ensure the lineView.wrapping.heights array is populated. This is\n// an array of bottom offsets for the lines that make up a drawn\n// line. When lineWrapping is on, there might be more than one\n// height.\nfunction ensureLineHeights(cm, lineView, rect) {\n  let wrapping = cm.options.lineWrapping\n  let curWidth = wrapping && displayWidth(cm)\n  if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n    let heights = lineView.measure.heights = []\n    if (wrapping) {\n      lineView.measure.width = curWidth\n      let rects = lineView.text.firstChild.getClientRects()\n      for (let i = 0; i < rects.length - 1; i++) {\n        let cur = rects[i], next = rects[i + 1]\n        if (Math.abs(cur.bottom - next.bottom) > 2)\n          heights.push((cur.bottom + next.top) / 2 - rect.top)\n      }\n    }\n    heights.push(rect.bottom - rect.top)\n  }\n}\n\n// Find a line map (mapping character offsets to text nodes) and a\n// measurement cache for the given line number. (A line view might\n// contain multiple lines when collapsed ranges are present.)\nexport function mapFromLineView(lineView, line, lineN) {\n  if (lineView.line == line)\n    return {map: lineView.measure.map, cache: lineView.measure.cache}\n  for (let i = 0; i < lineView.rest.length; i++)\n    if (lineView.rest[i] == line)\n      return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]}\n  for (let i = 0; i < lineView.rest.length; i++)\n    if (lineNo(lineView.rest[i]) > lineN)\n      return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true}\n}\n\n// Render a line into the hidden node display.externalMeasured. Used\n// when measurement is needed for a line that's not in the viewport.\nfunction updateExternalMeasurement(cm, line) {\n  line = visualLine(line)\n  let lineN = lineNo(line)\n  let view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN)\n  view.lineN = lineN\n  let built = view.built = buildLineContent(cm, view)\n  view.text = built.pre\n  removeChildrenAndAdd(cm.display.lineMeasure, built.pre)\n  return view\n}\n\n// Get a {top, bottom, left, right} box (in line-local coordinates)\n// for a given character.\nexport function measureChar(cm, line, ch, bias) {\n  return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n}\n\n// Find a line view that corresponds to the given line number.\nexport function findViewForLine(cm, lineN) {\n  if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n    return cm.display.view[findViewIndex(cm, lineN)]\n  let ext = cm.display.externalMeasured\n  if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n    return ext\n}\n\n// Measurement can be split in two steps, the set-up work that\n// applies to the whole line, and the measurement of the actual\n// character. Functions like coordsChar, that need to do a lot of\n// measurements in a row, can thus ensure that the set-up work is\n// only done once.\nexport function prepareMeasureForLine(cm, line) {\n  let lineN = lineNo(line)\n  let view = findViewForLine(cm, lineN)\n  if (view && !view.text) {\n    view = null\n  } else if (view && view.changes) {\n    updateLineForChanges(cm, view, lineN, getDimensions(cm))\n    cm.curOp.forceUpdate = true\n  }\n  if (!view)\n    view = updateExternalMeasurement(cm, line)\n\n  let info = mapFromLineView(view, line, lineN)\n  return {\n    line: line, view: view, rect: null,\n    map: info.map, cache: info.cache, before: info.before,\n    hasHeights: false\n  }\n}\n\n// Given a prepared measurement object, measures the position of an\n// actual character (or fetches it from the cache).\nexport function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n  if (prepared.before) ch = -1\n  let key = ch + (bias || \"\"), found\n  if (prepared.cache.hasOwnProperty(key)) {\n    found = prepared.cache[key]\n  } else {\n    if (!prepared.rect)\n      prepared.rect = prepared.view.text.getBoundingClientRect()\n    if (!prepared.hasHeights) {\n      ensureLineHeights(cm, prepared.view, prepared.rect)\n      prepared.hasHeights = true\n    }\n    found = measureCharInner(cm, prepared, ch, bias)\n    if (!found.bogus) prepared.cache[key] = found\n  }\n  return {left: found.left, right: found.right,\n          top: varHeight ? found.rtop : found.top,\n          bottom: varHeight ? found.rbottom : found.bottom}\n}\n\nlet nullRect = {left: 0, right: 0, top: 0, bottom: 0}\n\nexport function nodeAndOffsetInLineMap(map, ch, bias) {\n  let node, start, end, collapse, mStart, mEnd\n  // First, search the line map for the text node corresponding to,\n  // or closest to, the target character.\n  for (let i = 0; i < map.length; i += 3) {\n    mStart = map[i]\n    mEnd = map[i + 1]\n    if (ch < mStart) {\n      start = 0; end = 1\n      collapse = \"left\"\n    } else if (ch < mEnd) {\n      start = ch - mStart\n      end = start + 1\n    } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n      end = mEnd - mStart\n      start = end - 1\n      if (ch >= mEnd) collapse = \"right\"\n    }\n    if (start != null) {\n      node = map[i + 2]\n      if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n        collapse = bias\n      if (bias == \"left\" && start == 0)\n        while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n          node = map[(i -= 3) + 2]\n          collapse = \"left\"\n        }\n      if (bias == \"right\" && start == mEnd - mStart)\n        while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n          node = map[(i += 3) + 2]\n          collapse = \"right\"\n        }\n      break\n    }\n  }\n  return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n}\n\nfunction getUsefulRect(rects, bias) {\n  let rect = nullRect\n  if (bias == \"left\") for (let i = 0; i < rects.length; i++) {\n    if ((rect = rects[i]).left != rect.right) break\n  } else for (let i = rects.length - 1; i >= 0; i--) {\n    if ((rect = rects[i]).left != rect.right) break\n  }\n  return rect\n}\n\nfunction measureCharInner(cm, prepared, ch, bias) {\n  let place = nodeAndOffsetInLineMap(prepared.map, ch, bias)\n  let node = place.node, start = place.start, end = place.end, collapse = place.collapse\n\n  let rect\n  if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n    for (let i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n      while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) --start\n      while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) ++end\n      if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n        rect = node.parentNode.getBoundingClientRect()\n      else\n        rect = getUsefulRect(range(node, start, end).getClientRects(), bias)\n      if (rect.left || rect.right || start == 0) break\n      end = start\n      start = start - 1\n      collapse = \"right\"\n    }\n    if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect)\n  } else { // If it is a widget, simply get the box for the whole widget.\n    if (start > 0) collapse = bias = \"right\"\n    let rects\n    if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n      rect = rects[bias == \"right\" ? rects.length - 1 : 0]\n    else\n      rect = node.getBoundingClientRect()\n  }\n  if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n    let rSpan = node.parentNode.getClientRects()[0]\n    if (rSpan)\n      rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}\n    else\n      rect = nullRect\n  }\n\n  let rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top\n  let mid = (rtop + rbot) / 2\n  let heights = prepared.view.measure.heights\n  let i = 0\n  for (; i < heights.length - 1; i++)\n    if (mid < heights[i]) break\n  let top = i ? heights[i - 1] : 0, bot = heights[i]\n  let result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n                right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n                top: top, bottom: bot}\n  if (!rect.left && !rect.right) result.bogus = true\n  if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot }\n\n  return result\n}\n\n// Work around problem with bounding client rects on ranges being\n// returned incorrectly when zoomed on IE10 and below.\nfunction maybeUpdateRectForZooming(measure, rect) {\n  if (!window.screen || screen.logicalXDPI == null ||\n      screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n    return rect\n  let scaleX = screen.logicalXDPI / screen.deviceXDPI\n  let scaleY = screen.logicalYDPI / screen.deviceYDPI\n  return {left: rect.left * scaleX, right: rect.right * scaleX,\n          top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n}\n\nexport function clearLineMeasurementCacheFor(lineView) {\n  if (lineView.measure) {\n    lineView.measure.cache = {}\n    lineView.measure.heights = null\n    if (lineView.rest) for (let i = 0; i < lineView.rest.length; i++)\n      lineView.measure.caches[i] = {}\n  }\n}\n\nexport function clearLineMeasurementCache(cm) {\n  cm.display.externalMeasure = null\n  removeChildren(cm.display.lineMeasure)\n  for (let i = 0; i < cm.display.view.length; i++)\n    clearLineMeasurementCacheFor(cm.display.view[i])\n}\n\nexport function clearCaches(cm) {\n  clearLineMeasurementCache(cm)\n  cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null\n  if (!cm.options.lineWrapping) cm.display.maxLineChanged = true\n  cm.display.lineNumChars = null\n}\n\nfunction pageScrollX() {\n  // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n  // which causes page_Offset and bounding client rects to use\n  // different reference viewports and invalidate our calculations.\n  if (chrome && android) return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft))\n  return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n}\nfunction pageScrollY() {\n  if (chrome && android) return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop))\n  return window.pageYOffset || (document.documentElement || document.body).scrollTop\n}\n\n// Converts a {top, bottom, left, right} box from line-local\n// coordinates into another coordinate system. Context may be one of\n// \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n// or \"page\".\nexport function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n  if (!includeWidgets && lineObj.widgets) for (let i = 0; i < lineObj.widgets.length; ++i) if (lineObj.widgets[i].above) {\n    let size = widgetHeight(lineObj.widgets[i])\n    rect.top += size; rect.bottom += size\n  }\n  if (context == \"line\") return rect\n  if (!context) context = \"local\"\n  let yOff = heightAtLine(lineObj)\n  if (context == \"local\") yOff += paddingTop(cm.display)\n  else yOff -= cm.display.viewOffset\n  if (context == \"page\" || context == \"window\") {\n    let lOff = cm.display.lineSpace.getBoundingClientRect()\n    yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY())\n    let xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX())\n    rect.left += xOff; rect.right += xOff\n  }\n  rect.top += yOff; rect.bottom += yOff\n  return rect\n}\n\n// Coverts a box from \"div\" coords to another coordinate system.\n// Context may be \"window\", \"page\", \"div\", or \"local\"./null.\nexport function fromCoordSystem(cm, coords, context) {\n  if (context == \"div\") return coords\n  let left = coords.left, top = coords.top\n  // First move into \"page\" coordinate system\n  if (context == \"page\") {\n    left -= pageScrollX()\n    top -= pageScrollY()\n  } else if (context == \"local\" || !context) {\n    let localBox = cm.display.sizer.getBoundingClientRect()\n    left += localBox.left\n    top += localBox.top\n  }\n\n  let lineSpaceBox = cm.display.lineSpace.getBoundingClientRect()\n  return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n}\n\nexport function charCoords(cm, pos, context, lineObj, bias) {\n  if (!lineObj) lineObj = getLine(cm.doc, pos.line)\n  return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n}\n\n// Returns a box for a given cursor position, which may have an\n// 'other' property containing the position of the secondary cursor\n// on a bidi boundary.\n// A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n// and after `char - 1` in writing order of `char - 1`\n// A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n// and before `char` in writing order of `char`\n// Examples (upper-case letters are RTL, lower-case are LTR):\n//     Pos(0, 1, ...)\n//     before   after\n// ab     a|b     a|b\n// aB     a|B     aB|\n// Ab     |Ab     A|b\n// AB     B|A     B|A\n// Every position after the last character on a line is considered to stick\n// to the last character on the line.\nexport function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n  lineObj = lineObj || getLine(cm.doc, pos.line)\n  if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj)\n  function get(ch, right) {\n    let m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight)\n    if (right) m.left = m.right; else m.right = m.left\n    return intoCoordSystem(cm, lineObj, m, context)\n  }\n  let order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky\n  if (ch >= lineObj.text.length) {\n    ch = lineObj.text.length\n    sticky = \"before\"\n  } else if (ch <= 0) {\n    ch = 0\n    sticky = \"after\"\n  }\n  if (!order) return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\")\n\n  function getBidi(ch, partPos, invert) {\n    let part = order[partPos], right = (part.level % 2) != 0\n    return get(invert ? ch - 1 : ch, right != invert)\n  }\n  let partPos = getBidiPartAt(order, ch, sticky)\n  let other = bidiOther\n  let val = getBidi(ch, partPos, sticky == \"before\")\n  if (other != null) val.other = getBidi(ch, other, sticky != \"before\")\n  return val\n}\n\n// Used to cheaply estimate the coordinates for a position. Used for\n// intermediate scroll updates.\nexport function estimateCoords(cm, pos) {\n  let left = 0\n  pos = clipPos(cm.doc, pos)\n  if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch\n  let lineObj = getLine(cm.doc, pos.line)\n  let top = heightAtLine(lineObj) + paddingTop(cm.display)\n  return {left: left, right: left, top: top, bottom: top + lineObj.height}\n}\n\n// Positions returned by coordsChar contain some extra information.\n// xRel is the relative x position of the input coordinates compared\n// to the found position (so xRel > 0 means the coordinates are to\n// the right of the character position, for example). When outside\n// is true, that means the coordinates lie outside the line's\n// vertical range.\nfunction PosWithInfo(line, ch, sticky, outside, xRel) {\n  let pos = Pos(line, ch, sticky)\n  pos.xRel = xRel\n  if (outside) pos.outside = true\n  return pos\n}\n\n// Compute the character position closest to the given coordinates.\n// Input must be lineSpace-local (\"div\" coordinate system).\nexport function coordsChar(cm, x, y) {\n  let doc = cm.doc\n  y += cm.display.viewOffset\n  if (y < 0) return PosWithInfo(doc.first, 0, null, true, -1)\n  let lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1\n  if (lineN > last)\n    return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1)\n  if (x < 0) x = 0\n\n  let lineObj = getLine(doc, lineN)\n  for (;;) {\n    let found = coordsCharInner(cm, lineObj, lineN, x, y)\n    let merged = collapsedSpanAtEnd(lineObj)\n    let mergedPos = merged && merged.find(0, true)\n    if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))\n      lineN = lineNo(lineObj = mergedPos.to.line)\n    else\n      return found\n  }\n}\n\nfunction wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n  let measure = ch => intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, ch), \"line\")\n  let end = lineObj.text.length\n  let begin = findFirst(ch => measure(ch - 1).bottom <= y, end, 0)\n  end = findFirst(ch => measure(ch).top > y, begin, end)\n  return {begin, end}\n}\n\nexport function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n  let targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top\n  return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n}\n\nfunction coordsCharInner(cm, lineObj, lineNo, x, y) {\n  y -= heightAtLine(lineObj)\n  let begin = 0, end = lineObj.text.length\n  let preparedMeasure = prepareMeasureForLine(cm, lineObj)\n  let pos\n  let order = getOrder(lineObj, cm.doc.direction)\n  if (order) {\n    if (cm.options.lineWrapping) {\n      ;({begin, end} = wrappedLineExtent(cm, lineObj, preparedMeasure, y))\n    }\n    pos = new Pos(lineNo, begin)\n    let beginLeft = cursorCoords(cm, pos, \"line\", lineObj, preparedMeasure).left\n    let dir = beginLeft < x ? 1 : -1\n    let prevDiff, diff = beginLeft - x, prevPos\n    do {\n      prevDiff = diff\n      prevPos = pos\n      pos = moveVisually(cm, lineObj, pos, dir)\n      if (pos == null || pos.ch < begin || end <= (pos.sticky == \"before\" ? pos.ch - 1 : pos.ch)) {\n        pos = prevPos\n        break\n      }\n      diff = cursorCoords(cm, pos, \"line\", lineObj, preparedMeasure).left - x\n    } while ((dir < 0) != (diff < 0) && (Math.abs(diff) <= Math.abs(prevDiff)))\n    if (Math.abs(diff) > Math.abs(prevDiff)) {\n      if ((diff < 0) == (prevDiff < 0)) throw new Error(\"Broke out of infinite loop in coordsCharInner\")\n      pos = prevPos\n    }\n  } else {\n    let ch = findFirst(ch => {\n      let box = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, ch), \"line\")\n      if (box.top > y) {\n        // For the cursor stickiness\n        end = Math.min(ch, end)\n        return true\n      }\n      else if (box.bottom <= y) return false\n      else if (box.left > x) return true\n      else if (box.right < x) return false\n      else return (x - box.left < box.right - x)\n    }, begin, end)\n    ch = skipExtendingChars(lineObj.text, ch, 1)\n    pos = new Pos(lineNo, ch, ch == end ? \"before\" : \"after\")\n  }\n  let coords = cursorCoords(cm, pos, \"line\", lineObj, preparedMeasure)\n  if (y < coords.top || coords.bottom < y) pos.outside = true\n  pos.xRel = x < coords.left ? -1 : (x > coords.right ? 1 : 0)\n  return pos\n}\n\nlet measureText\n// Compute the default text height.\nexport function textHeight(display) {\n  if (display.cachedTextHeight != null) return display.cachedTextHeight\n  if (measureText == null) {\n    measureText = elt(\"pre\")\n    // Measure a bunch of lines, for browsers that compute\n    // fractional heights.\n    for (let i = 0; i < 49; ++i) {\n      measureText.appendChild(document.createTextNode(\"x\"))\n      measureText.appendChild(elt(\"br\"))\n    }\n    measureText.appendChild(document.createTextNode(\"x\"))\n  }\n  removeChildrenAndAdd(display.measure, measureText)\n  let height = measureText.offsetHeight / 50\n  if (height > 3) display.cachedTextHeight = height\n  removeChildren(display.measure)\n  return height || 1\n}\n\n// Compute the default character width.\nexport function charWidth(display) {\n  if (display.cachedCharWidth != null) return display.cachedCharWidth\n  let anchor = elt(\"span\", \"xxxxxxxxxx\")\n  let pre = elt(\"pre\", [anchor])\n  removeChildrenAndAdd(display.measure, pre)\n  let rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10\n  if (width > 2) display.cachedCharWidth = width\n  return width || 10\n}\n\n// Do a bulk-read of the DOM positions and sizes needed to draw the\n// view, so that we don't interleave reading and writing to the DOM.\nexport function getDimensions(cm) {\n  let d = cm.display, left = {}, width = {}\n  let gutterLeft = d.gutters.clientLeft\n  for (let n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n    left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft\n    width[cm.options.gutters[i]] = n.clientWidth\n  }\n  return {fixedPos: compensateForHScroll(d),\n          gutterTotalWidth: d.gutters.offsetWidth,\n          gutterLeft: left,\n          gutterWidth: width,\n          wrapperWidth: d.wrapper.clientWidth}\n}\n\n// Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n// but using getBoundingClientRect to get a sub-pixel-accurate\n// result.\nexport function compensateForHScroll(display) {\n  return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n}\n\n// Returns a function that estimates the height of a line, to use as\n// first approximation until the line becomes visible (and is thus\n// properly measurable).\nexport function estimateHeight(cm) {\n  let th = textHeight(cm.display), wrapping = cm.options.lineWrapping\n  let perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3)\n  return line => {\n    if (lineIsHidden(cm.doc, line)) return 0\n\n    let widgetsHeight = 0\n    if (line.widgets) for (let i = 0; i < line.widgets.length; i++) {\n      if (line.widgets[i].height) widgetsHeight += line.widgets[i].height\n    }\n\n    if (wrapping)\n      return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th\n    else\n      return widgetsHeight + th\n  }\n}\n\nexport function estimateLineHeights(cm) {\n  let doc = cm.doc, est = estimateHeight(cm)\n  doc.iter(line => {\n    let estHeight = est(line)\n    if (estHeight != line.height) updateLineHeight(line, estHeight)\n  })\n}\n\n// Given a mouse event, find the corresponding position. If liberal\n// is false, it checks whether a gutter or scrollbar was clicked,\n// and returns null if it was. forRect is used by rectangular\n// selections, and tries to estimate a character position even for\n// coordinates beyond the right of the text.\nexport function posFromMouse(cm, e, liberal, forRect) {\n  let display = cm.display\n  if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") return null\n\n  let x, y, space = display.lineSpace.getBoundingClientRect()\n  // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n  try { x = e.clientX - space.left; y = e.clientY - space.top }\n  catch (e) { return null }\n  let coords = coordsChar(cm, x, y), line\n  if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n    let colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length\n    coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff))\n  }\n  return coords\n}\n\n// Find the view element corresponding to a given line. Return null\n// when the line isn't visible.\nexport function findViewIndex(cm, n) {\n  if (n >= cm.display.viewTo) return null\n  n -= cm.display.viewFrom\n  if (n < 0) return null\n  let view = cm.display.view\n  for (let i = 0; i < view.length; i++) {\n    n -= view[i].size\n    if (n < 0) return i\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/measurement/widgets.js",
    "content": "import { contains, elt, removeChildrenAndAdd } from \"../util/dom\"\nimport { e_target } from \"../util/event\"\n\nexport function widgetHeight(widget) {\n  if (widget.height != null) return widget.height\n  let cm = widget.doc.cm\n  if (!cm) return 0\n  if (!contains(document.body, widget.node)) {\n    let parentStyle = \"position: relative;\"\n    if (widget.coverGutter)\n      parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"\n    if (widget.noHScroll)\n      parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"\n    removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle))\n  }\n  return widget.height = widget.node.parentNode.offsetHeight\n}\n\n// Return true when the given mouse event happened in a widget\nexport function eventInWidget(display, e) {\n  for (let n = e_target(e); n != display.wrapper; n = n.parentNode) {\n    if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n        (n.parentNode == display.sizer && n != display.mover))\n      return true\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/model/Doc.js",
    "content": "import CodeMirror from \"../edit/CodeMirror\"\nimport { docMethodOp } from \"../display/operations\"\nimport { Line } from \"../line/line_data\"\nimport { clipPos, clipPosArray, Pos } from \"../line/pos\"\nimport { visualLine } from \"../line/spans\"\nimport { getBetween, getLine, getLines, isLine, lineNo } from \"../line/utils_line\"\nimport { classTest } from \"../util/dom\"\nimport { splitLinesAuto } from \"../util/feature_detection\"\nimport { createObj, map, isEmpty, sel_dontScroll } from \"../util/misc\"\nimport { ensureCursorVisible } from \"../display/scrolling\"\n\nimport { changeLine, makeChange, makeChangeFromHistory, replaceRange } from \"./changes\"\nimport { computeReplacedSel } from \"./change_measurement\"\nimport { BranchChunk, LeafChunk } from \"./chunk\"\nimport { directionChanged, linkedDocs, updateDoc } from \"./document_data\"\nimport { copyHistoryArray, History } from \"./history\"\nimport { addLineWidget } from \"./line_widget\"\nimport { copySharedMarkers, detachSharedMarkers, findSharedMarkers, markText } from \"./mark_text\"\nimport { normalizeSelection, Range, simpleSelection } from \"./selection\"\nimport { extendSelection, extendSelections, setSelection, setSelectionReplaceHistory, setSimpleSelection } from \"./selection_updates\"\n\nlet nextDocId = 0\nlet Doc = function(text, mode, firstLine, lineSep, direction) {\n  if (!(this instanceof Doc)) return new Doc(text, mode, firstLine, lineSep, direction)\n  if (firstLine == null) firstLine = 0\n\n  BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])])\n  this.first = firstLine\n  this.scrollTop = this.scrollLeft = 0\n  this.cantEdit = false\n  this.cleanGeneration = 1\n  this.frontier = firstLine\n  let start = Pos(firstLine, 0)\n  this.sel = simpleSelection(start)\n  this.history = new History(null)\n  this.id = ++nextDocId\n  this.modeOption = mode\n  this.lineSep = lineSep\n  this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\"\n  this.extend = false\n\n  if (typeof text == \"string\") text = this.splitLines(text)\n  updateDoc(this, {from: start, to: start, text: text})\n  setSelection(this, simpleSelection(start), sel_dontScroll)\n}\n\nDoc.prototype = createObj(BranchChunk.prototype, {\n  constructor: Doc,\n  // Iterate over the document. Supports two forms -- with only one\n  // argument, it calls that for each line in the document. With\n  // three, it iterates over the range given by the first two (with\n  // the second being non-inclusive).\n  iter: function(from, to, op) {\n    if (op) this.iterN(from - this.first, to - from, op)\n    else this.iterN(this.first, this.first + this.size, from)\n  },\n\n  // Non-public interface for adding and removing lines.\n  insert: function(at, lines) {\n    let height = 0\n    for (let i = 0; i < lines.length; ++i) height += lines[i].height\n    this.insertInner(at - this.first, lines, height)\n  },\n  remove: function(at, n) { this.removeInner(at - this.first, n) },\n\n  // From here, the methods are part of the public interface. Most\n  // are also available from CodeMirror (editor) instances.\n\n  getValue: function(lineSep) {\n    let lines = getLines(this, this.first, this.first + this.size)\n    if (lineSep === false) return lines\n    return lines.join(lineSep || this.lineSeparator())\n  },\n  setValue: docMethodOp(function(code) {\n    let top = Pos(this.first, 0), last = this.first + this.size - 1\n    makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n                      text: this.splitLines(code), origin: \"setValue\", full: true}, true)\n    if (this.cm) this.cm.scrollTo(0, 0)\n    setSelection(this, simpleSelection(top), sel_dontScroll)\n  }),\n  replaceRange: function(code, from, to, origin) {\n    from = clipPos(this, from)\n    to = to ? clipPos(this, to) : from\n    replaceRange(this, code, from, to, origin)\n  },\n  getRange: function(from, to, lineSep) {\n    let lines = getBetween(this, clipPos(this, from), clipPos(this, to))\n    if (lineSep === false) return lines\n    return lines.join(lineSep || this.lineSeparator())\n  },\n\n  getLine: function(line) {let l = this.getLineHandle(line); return l && l.text},\n\n  getLineHandle: function(line) {if (isLine(this, line)) return getLine(this, line)},\n  getLineNumber: function(line) {return lineNo(line)},\n\n  getLineHandleVisualStart: function(line) {\n    if (typeof line == \"number\") line = getLine(this, line)\n    return visualLine(line)\n  },\n\n  lineCount: function() {return this.size},\n  firstLine: function() {return this.first},\n  lastLine: function() {return this.first + this.size - 1},\n\n  clipPos: function(pos) {return clipPos(this, pos)},\n\n  getCursor: function(start) {\n    let range = this.sel.primary(), pos\n    if (start == null || start == \"head\") pos = range.head\n    else if (start == \"anchor\") pos = range.anchor\n    else if (start == \"end\" || start == \"to\" || start === false) pos = range.to()\n    else pos = range.from()\n    return pos\n  },\n  listSelections: function() { return this.sel.ranges },\n  somethingSelected: function() {return this.sel.somethingSelected()},\n\n  setCursor: docMethodOp(function(line, ch, options) {\n    setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options)\n  }),\n  setSelection: docMethodOp(function(anchor, head, options) {\n    setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options)\n  }),\n  extendSelection: docMethodOp(function(head, other, options) {\n    extendSelection(this, clipPos(this, head), other && clipPos(this, other), options)\n  }),\n  extendSelections: docMethodOp(function(heads, options) {\n    extendSelections(this, clipPosArray(this, heads), options)\n  }),\n  extendSelectionsBy: docMethodOp(function(f, options) {\n    let heads = map(this.sel.ranges, f)\n    extendSelections(this, clipPosArray(this, heads), options)\n  }),\n  setSelections: docMethodOp(function(ranges, primary, options) {\n    if (!ranges.length) return\n    let out = []\n    for (let i = 0; i < ranges.length; i++)\n      out[i] = new Range(clipPos(this, ranges[i].anchor),\n                         clipPos(this, ranges[i].head))\n    if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex)\n    setSelection(this, normalizeSelection(out, primary), options)\n  }),\n  addSelection: docMethodOp(function(anchor, head, options) {\n    let ranges = this.sel.ranges.slice(0)\n    ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)))\n    setSelection(this, normalizeSelection(ranges, ranges.length - 1), options)\n  }),\n\n  getSelection: function(lineSep) {\n    let ranges = this.sel.ranges, lines\n    for (let i = 0; i < ranges.length; i++) {\n      let sel = getBetween(this, ranges[i].from(), ranges[i].to())\n      lines = lines ? lines.concat(sel) : sel\n    }\n    if (lineSep === false) return lines\n    else return lines.join(lineSep || this.lineSeparator())\n  },\n  getSelections: function(lineSep) {\n    let parts = [], ranges = this.sel.ranges\n    for (let i = 0; i < ranges.length; i++) {\n      let sel = getBetween(this, ranges[i].from(), ranges[i].to())\n      if (lineSep !== false) sel = sel.join(lineSep || this.lineSeparator())\n      parts[i] = sel\n    }\n    return parts\n  },\n  replaceSelection: function(code, collapse, origin) {\n    let dup = []\n    for (let i = 0; i < this.sel.ranges.length; i++)\n      dup[i] = code\n    this.replaceSelections(dup, collapse, origin || \"+input\")\n  },\n  replaceSelections: docMethodOp(function(code, collapse, origin) {\n    let changes = [], sel = this.sel\n    for (let i = 0; i < sel.ranges.length; i++) {\n      let range = sel.ranges[i]\n      changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin}\n    }\n    let newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse)\n    for (let i = changes.length - 1; i >= 0; i--)\n      makeChange(this, changes[i])\n    if (newSel) setSelectionReplaceHistory(this, newSel)\n    else if (this.cm) ensureCursorVisible(this.cm)\n  }),\n  undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\")}),\n  redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\")}),\n  undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true)}),\n  redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true)}),\n\n  setExtending: function(val) {this.extend = val},\n  getExtending: function() {return this.extend},\n\n  historySize: function() {\n    let hist = this.history, done = 0, undone = 0\n    for (let i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done\n    for (let i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone\n    return {undo: done, redo: undone}\n  },\n  clearHistory: function() {this.history = new History(this.history.maxGeneration)},\n\n  markClean: function() {\n    this.cleanGeneration = this.changeGeneration(true)\n  },\n  changeGeneration: function(forceSplit) {\n    if (forceSplit)\n      this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null\n    return this.history.generation\n  },\n  isClean: function (gen) {\n    return this.history.generation == (gen || this.cleanGeneration)\n  },\n\n  getHistory: function() {\n    return {done: copyHistoryArray(this.history.done),\n            undone: copyHistoryArray(this.history.undone)}\n  },\n  setHistory: function(histData) {\n    let hist = this.history = new History(this.history.maxGeneration)\n    hist.done = copyHistoryArray(histData.done.slice(0), null, true)\n    hist.undone = copyHistoryArray(histData.undone.slice(0), null, true)\n  },\n\n  setGutterMarker: docMethodOp(function(line, gutterID, value) {\n    return changeLine(this, line, \"gutter\", line => {\n      let markers = line.gutterMarkers || (line.gutterMarkers = {})\n      markers[gutterID] = value\n      if (!value && isEmpty(markers)) line.gutterMarkers = null\n      return true\n    })\n  }),\n\n  clearGutter: docMethodOp(function(gutterID) {\n    this.iter(line => {\n      if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n        changeLine(this, line, \"gutter\", () => {\n          line.gutterMarkers[gutterID] = null\n          if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null\n          return true\n        })\n      }\n    })\n  }),\n\n  lineInfo: function(line) {\n    let n\n    if (typeof line == \"number\") {\n      if (!isLine(this, line)) return null\n      n = line\n      line = getLine(this, line)\n      if (!line) return null\n    } else {\n      n = lineNo(line)\n      if (n == null) return null\n    }\n    return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n            textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n            widgets: line.widgets}\n  },\n\n  addLineClass: docMethodOp(function(handle, where, cls) {\n    return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", line => {\n      let prop = where == \"text\" ? \"textClass\"\n               : where == \"background\" ? \"bgClass\"\n               : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\"\n      if (!line[prop]) line[prop] = cls\n      else if (classTest(cls).test(line[prop])) return false\n      else line[prop] += \" \" + cls\n      return true\n    })\n  }),\n  removeLineClass: docMethodOp(function(handle, where, cls) {\n    return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", line => {\n      let prop = where == \"text\" ? \"textClass\"\n               : where == \"background\" ? \"bgClass\"\n               : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\"\n      let cur = line[prop]\n      if (!cur) return false\n      else if (cls == null) line[prop] = null\n      else {\n        let found = cur.match(classTest(cls))\n        if (!found) return false\n        let end = found.index + found[0].length\n        line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null\n      }\n      return true\n    })\n  }),\n\n  addLineWidget: docMethodOp(function(handle, node, options) {\n    return addLineWidget(this, handle, node, options)\n  }),\n  removeLineWidget: function(widget) { widget.clear() },\n\n  markText: function(from, to, options) {\n    return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n  },\n  setBookmark: function(pos, options) {\n    let realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n                    insertLeft: options && options.insertLeft,\n                    clearWhenEmpty: false, shared: options && options.shared,\n                    handleMouseEvents: options && options.handleMouseEvents}\n    pos = clipPos(this, pos)\n    return markText(this, pos, pos, realOpts, \"bookmark\")\n  },\n  findMarksAt: function(pos) {\n    pos = clipPos(this, pos)\n    let markers = [], spans = getLine(this, pos.line).markedSpans\n    if (spans) for (let i = 0; i < spans.length; ++i) {\n      let span = spans[i]\n      if ((span.from == null || span.from <= pos.ch) &&\n          (span.to == null || span.to >= pos.ch))\n        markers.push(span.marker.parent || span.marker)\n    }\n    return markers\n  },\n  findMarks: function(from, to, filter) {\n    from = clipPos(this, from); to = clipPos(this, to)\n    let found = [], lineNo = from.line\n    this.iter(from.line, to.line + 1, line => {\n      let spans = line.markedSpans\n      if (spans) for (let i = 0; i < spans.length; i++) {\n        let span = spans[i]\n        if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n              span.from == null && lineNo != from.line ||\n              span.from != null && lineNo == to.line && span.from >= to.ch) &&\n            (!filter || filter(span.marker)))\n          found.push(span.marker.parent || span.marker)\n      }\n      ++lineNo\n    })\n    return found\n  },\n  getAllMarks: function() {\n    let markers = []\n    this.iter(line => {\n      let sps = line.markedSpans\n      if (sps) for (let i = 0; i < sps.length; ++i)\n        if (sps[i].from != null) markers.push(sps[i].marker)\n    })\n    return markers\n  },\n\n  posFromIndex: function(off) {\n    let ch, lineNo = this.first, sepSize = this.lineSeparator().length\n    this.iter(line => {\n      let sz = line.text.length + sepSize\n      if (sz > off) { ch = off; return true }\n      off -= sz\n      ++lineNo\n    })\n    return clipPos(this, Pos(lineNo, ch))\n  },\n  indexFromPos: function (coords) {\n    coords = clipPos(this, coords)\n    let index = coords.ch\n    if (coords.line < this.first || coords.ch < 0) return 0\n    let sepSize = this.lineSeparator().length\n    this.iter(this.first, coords.line, line => { // iter aborts when callback returns a truthy value\n      index += line.text.length + sepSize\n    })\n    return index\n  },\n\n  copy: function(copyHistory) {\n    let doc = new Doc(getLines(this, this.first, this.first + this.size),\n                      this.modeOption, this.first, this.lineSep, this.direction)\n    doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft\n    doc.sel = this.sel\n    doc.extend = false\n    if (copyHistory) {\n      doc.history.undoDepth = this.history.undoDepth\n      doc.setHistory(this.getHistory())\n    }\n    return doc\n  },\n\n  linkedDoc: function(options) {\n    if (!options) options = {}\n    let from = this.first, to = this.first + this.size\n    if (options.from != null && options.from > from) from = options.from\n    if (options.to != null && options.to < to) to = options.to\n    let copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction)\n    if (options.sharedHist) copy.history = this.history\n    ;(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist})\n    copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}]\n    copySharedMarkers(copy, findSharedMarkers(this))\n    return copy\n  },\n  unlinkDoc: function(other) {\n    if (other instanceof CodeMirror) other = other.doc\n    if (this.linked) for (let i = 0; i < this.linked.length; ++i) {\n      let link = this.linked[i]\n      if (link.doc != other) continue\n      this.linked.splice(i, 1)\n      other.unlinkDoc(this)\n      detachSharedMarkers(findSharedMarkers(this))\n      break\n    }\n    // If the histories were shared, split them again\n    if (other.history == this.history) {\n      let splitIds = [other.id]\n      linkedDocs(other, doc => splitIds.push(doc.id), true)\n      other.history = new History(null)\n      other.history.done = copyHistoryArray(this.history.done, splitIds)\n      other.history.undone = copyHistoryArray(this.history.undone, splitIds)\n    }\n  },\n  iterLinkedDocs: function(f) {linkedDocs(this, f)},\n\n  getMode: function() {return this.mode},\n  getEditor: function() {return this.cm},\n\n  splitLines: function(str) {\n    if (this.lineSep) return str.split(this.lineSep)\n    return splitLinesAuto(str)\n  },\n  lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n  setDirection: docMethodOp(function (dir) {\n    if (dir != \"rtl\") dir = \"ltr\"\n    if (dir == this.direction) return\n    this.direction = dir\n    this.iter(line => line.order = null)\n    if (this.cm) directionChanged(this.cm)\n  })\n})\n\n// Public alias.\nDoc.prototype.eachLine = Doc.prototype.iter\n\nexport default Doc\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/model/change_measurement.js",
    "content": "import { cmp, Pos } from \"../line/pos\"\nimport { lst } from \"../util/misc\"\n\nimport { normalizeSelection, Range, Selection } from \"./selection\"\n\n// Compute the position of the end of a change (its 'to' property\n// refers to the pre-change end).\nexport function changeEnd(change) {\n  if (!change.text) return change.to\n  return Pos(change.from.line + change.text.length - 1,\n             lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n}\n\n// Adjust a position to refer to the post-change position of the\n// same text, or the end of the change if the change covers it.\nfunction adjustForChange(pos, change) {\n  if (cmp(pos, change.from) < 0) return pos\n  if (cmp(pos, change.to) <= 0) return changeEnd(change)\n\n  let line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch\n  if (pos.line == change.to.line) ch += changeEnd(change).ch - change.to.ch\n  return Pos(line, ch)\n}\n\nexport function computeSelAfterChange(doc, change) {\n  let out = []\n  for (let i = 0; i < doc.sel.ranges.length; i++) {\n    let range = doc.sel.ranges[i]\n    out.push(new Range(adjustForChange(range.anchor, change),\n                       adjustForChange(range.head, change)))\n  }\n  return normalizeSelection(out, doc.sel.primIndex)\n}\n\nfunction offsetPos(pos, old, nw) {\n  if (pos.line == old.line)\n    return Pos(nw.line, pos.ch - old.ch + nw.ch)\n  else\n    return Pos(nw.line + (pos.line - old.line), pos.ch)\n}\n\n// Used by replaceSelections to allow moving the selection to the\n// start or around the replaced test. Hint may be \"start\" or \"around\".\nexport function computeReplacedSel(doc, changes, hint) {\n  let out = []\n  let oldPrev = Pos(doc.first, 0), newPrev = oldPrev\n  for (let i = 0; i < changes.length; i++) {\n    let change = changes[i]\n    let from = offsetPos(change.from, oldPrev, newPrev)\n    let to = offsetPos(changeEnd(change), oldPrev, newPrev)\n    oldPrev = change.to\n    newPrev = to\n    if (hint == \"around\") {\n      let range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0\n      out[i] = new Range(inv ? to : from, inv ? from : to)\n    } else {\n      out[i] = new Range(from, from)\n    }\n  }\n  return new Selection(out, doc.sel.primIndex)\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/model/changes.js",
    "content": "import { startWorker } from \"../display/highlight_worker\"\nimport { operation } from \"../display/operations\"\nimport { regChange, regLineChange } from \"../display/view_tracking\"\nimport { clipLine, clipPos, cmp, Pos } from \"../line/pos\"\nimport { sawReadOnlySpans } from \"../line/saw_special_spans\"\nimport { lineLength, removeReadOnlyRanges, stretchSpansOverChange, visualLine } from \"../line/spans\"\nimport { getBetween, getLine, lineNo } from \"../line/utils_line\"\nimport { estimateHeight } from \"../measurement/position_measurement\"\nimport { hasHandler, signal, signalCursorActivity } from \"../util/event\"\nimport { indexOf, lst, map, sel_dontScroll } from \"../util/misc\"\nimport { signalLater } from \"../util/operation_group\"\n\nimport { changeEnd, computeSelAfterChange } from \"./change_measurement\"\nimport { isWholeLineUpdate, linkedDocs, updateDoc } from \"./document_data\"\nimport { addChangeToHistory, historyChangeFromChange, mergeOldSpans, pushSelectionToHistory } from \"./history\"\nimport { Range, Selection } from \"./selection\"\nimport { setSelection, setSelectionNoUndo } from \"./selection_updates\"\n\n// UPDATING\n\n// Allow \"beforeChange\" event handlers to influence a change\nfunction filterChange(doc, change, update) {\n  let obj = {\n    canceled: false,\n    from: change.from,\n    to: change.to,\n    text: change.text,\n    origin: change.origin,\n    cancel: () => obj.canceled = true\n  }\n  if (update) obj.update = (from, to, text, origin) => {\n    if (from) obj.from = clipPos(doc, from)\n    if (to) obj.to = clipPos(doc, to)\n    if (text) obj.text = text\n    if (origin !== undefined) obj.origin = origin\n  }\n  signal(doc, \"beforeChange\", doc, obj)\n  if (doc.cm) signal(doc.cm, \"beforeChange\", doc.cm, obj)\n\n  if (obj.canceled) return null\n  return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n}\n\n// Apply a change to a document, and add it to the document's\n// history, and propagating it to all linked documents.\nexport function makeChange(doc, change, ignoreReadOnly) {\n  if (doc.cm) {\n    if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly)\n    if (doc.cm.state.suppressEdits) return\n  }\n\n  if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n    change = filterChange(doc, change, true)\n    if (!change) return\n  }\n\n  // Possibly split or suppress the update based on the presence\n  // of read-only spans in its range.\n  let split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to)\n  if (split) {\n    for (let i = split.length - 1; i >= 0; --i)\n      makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text})\n  } else {\n    makeChangeInner(doc, change)\n  }\n}\n\nfunction makeChangeInner(doc, change) {\n  if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) return\n  let selAfter = computeSelAfterChange(doc, change)\n  addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN)\n\n  makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change))\n  let rebased = []\n\n  linkedDocs(doc, (doc, sharedHist) => {\n    if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n      rebaseHist(doc.history, change)\n      rebased.push(doc.history)\n    }\n    makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change))\n  })\n}\n\n// Revert a change stored in a document's history.\nexport function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n  if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) return\n\n  let hist = doc.history, event, selAfter = doc.sel\n  let source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done\n\n  // Verify that there is a useable event (so that ctrl-z won't\n  // needlessly clear selection events)\n  let i = 0\n  for (; i < source.length; i++) {\n    event = source[i]\n    if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n      break\n  }\n  if (i == source.length) return\n  hist.lastOrigin = hist.lastSelOrigin = null\n\n  for (;;) {\n    event = source.pop()\n    if (event.ranges) {\n      pushSelectionToHistory(event, dest)\n      if (allowSelectionOnly && !event.equals(doc.sel)) {\n        setSelection(doc, event, {clearRedo: false})\n        return\n      }\n      selAfter = event\n    }\n    else break\n  }\n\n  // Build up a reverse change object to add to the opposite history\n  // stack (redo when undoing, and vice versa).\n  let antiChanges = []\n  pushSelectionToHistory(selAfter, dest)\n  dest.push({changes: antiChanges, generation: hist.generation})\n  hist.generation = event.generation || ++hist.maxGeneration\n\n  let filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")\n\n  for (let i = event.changes.length - 1; i >= 0; --i) {\n    let change = event.changes[i]\n    change.origin = type\n    if (filter && !filterChange(doc, change, false)) {\n      source.length = 0\n      return\n    }\n\n    antiChanges.push(historyChangeFromChange(doc, change))\n\n    let after = i ? computeSelAfterChange(doc, change) : lst(source)\n    makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change))\n    if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)})\n    let rebased = []\n\n    // Propagate to the linked documents\n    linkedDocs(doc, (doc, sharedHist) => {\n      if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n        rebaseHist(doc.history, change)\n        rebased.push(doc.history)\n      }\n      makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change))\n    })\n  }\n}\n\n// Sub-views need their line numbers shifted when text is added\n// above or below them in the parent document.\nfunction shiftDoc(doc, distance) {\n  if (distance == 0) return\n  doc.first += distance\n  doc.sel = new Selection(map(doc.sel.ranges, range => new Range(\n    Pos(range.anchor.line + distance, range.anchor.ch),\n    Pos(range.head.line + distance, range.head.ch)\n  )), doc.sel.primIndex)\n  if (doc.cm) {\n    regChange(doc.cm, doc.first, doc.first - distance, distance)\n    for (let d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n      regLineChange(doc.cm, l, \"gutter\")\n  }\n}\n\n// More lower-level change function, handling only a single document\n// (not linked ones).\nfunction makeChangeSingleDoc(doc, change, selAfter, spans) {\n  if (doc.cm && !doc.cm.curOp)\n    return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans)\n\n  if (change.to.line < doc.first) {\n    shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line))\n    return\n  }\n  if (change.from.line > doc.lastLine()) return\n\n  // Clip the change to the size of this doc\n  if (change.from.line < doc.first) {\n    let shift = change.text.length - 1 - (doc.first - change.from.line)\n    shiftDoc(doc, shift)\n    change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n              text: [lst(change.text)], origin: change.origin}\n  }\n  let last = doc.lastLine()\n  if (change.to.line > last) {\n    change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n              text: [change.text[0]], origin: change.origin}\n  }\n\n  change.removed = getBetween(doc, change.from, change.to)\n\n  if (!selAfter) selAfter = computeSelAfterChange(doc, change)\n  if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans)\n  else updateDoc(doc, change, spans)\n  setSelectionNoUndo(doc, selAfter, sel_dontScroll)\n}\n\n// Handle the interaction of a change to a document with the editor\n// that this document is part of.\nfunction makeChangeSingleDocInEditor(cm, change, spans) {\n  let doc = cm.doc, display = cm.display, from = change.from, to = change.to\n\n  let recomputeMaxLength = false, checkWidthStart = from.line\n  if (!cm.options.lineWrapping) {\n    checkWidthStart = lineNo(visualLine(getLine(doc, from.line)))\n    doc.iter(checkWidthStart, to.line + 1, line => {\n      if (line == display.maxLine) {\n        recomputeMaxLength = true\n        return true\n      }\n    })\n  }\n\n  if (doc.sel.contains(change.from, change.to) > -1)\n    signalCursorActivity(cm)\n\n  updateDoc(doc, change, spans, estimateHeight(cm))\n\n  if (!cm.options.lineWrapping) {\n    doc.iter(checkWidthStart, from.line + change.text.length, line => {\n      let len = lineLength(line)\n      if (len > display.maxLineLength) {\n        display.maxLine = line\n        display.maxLineLength = len\n        display.maxLineChanged = true\n        recomputeMaxLength = false\n      }\n    })\n    if (recomputeMaxLength) cm.curOp.updateMaxLine = true\n  }\n\n  // Adjust frontier, schedule worker\n  doc.frontier = Math.min(doc.frontier, from.line)\n  startWorker(cm, 400)\n\n  let lendiff = change.text.length - (to.line - from.line) - 1\n  // Remember that these lines changed, for updating the display\n  if (change.full)\n    regChange(cm)\n  else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n    regLineChange(cm, from.line, \"text\")\n  else\n    regChange(cm, from.line, to.line + 1, lendiff)\n\n  let changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\")\n  if (changeHandler || changesHandler) {\n    let obj = {\n      from: from, to: to,\n      text: change.text,\n      removed: change.removed,\n      origin: change.origin\n    }\n    if (changeHandler) signalLater(cm, \"change\", cm, obj)\n    if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj)\n  }\n  cm.display.selForContextMenu = null\n}\n\nexport function replaceRange(doc, code, from, to, origin) {\n  if (!to) to = from\n  if (cmp(to, from) < 0) { let tmp = to; to = from; from = tmp }\n  if (typeof code == \"string\") code = doc.splitLines(code)\n  makeChange(doc, {from: from, to: to, text: code, origin: origin})\n}\n\n// Rebasing/resetting history to deal with externally-sourced changes\n\nfunction rebaseHistSelSingle(pos, from, to, diff) {\n  if (to < pos.line) {\n    pos.line += diff\n  } else if (from < pos.line) {\n    pos.line = from\n    pos.ch = 0\n  }\n}\n\n// Tries to rebase an array of history events given a change in the\n// document. If the change touches the same lines as the event, the\n// event, and everything 'behind' it, is discarded. If the change is\n// before the event, the event's positions are updated. Uses a\n// copy-on-write scheme for the positions, to avoid having to\n// reallocate them all on every rebase, but also avoid problems with\n// shared position objects being unsafely updated.\nfunction rebaseHistArray(array, from, to, diff) {\n  for (let i = 0; i < array.length; ++i) {\n    let sub = array[i], ok = true\n    if (sub.ranges) {\n      if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true }\n      for (let j = 0; j < sub.ranges.length; j++) {\n        rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff)\n        rebaseHistSelSingle(sub.ranges[j].head, from, to, diff)\n      }\n      continue\n    }\n    for (let j = 0; j < sub.changes.length; ++j) {\n      let cur = sub.changes[j]\n      if (to < cur.from.line) {\n        cur.from = Pos(cur.from.line + diff, cur.from.ch)\n        cur.to = Pos(cur.to.line + diff, cur.to.ch)\n      } else if (from <= cur.to.line) {\n        ok = false\n        break\n      }\n    }\n    if (!ok) {\n      array.splice(0, i + 1)\n      i = 0\n    }\n  }\n}\n\nfunction rebaseHist(hist, change) {\n  let from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1\n  rebaseHistArray(hist.done, from, to, diff)\n  rebaseHistArray(hist.undone, from, to, diff)\n}\n\n// Utility for applying a change to a line by handle or number,\n// returning the number and optionally registering the line as\n// changed.\nexport function changeLine(doc, handle, changeType, op) {\n  let no = handle, line = handle\n  if (typeof handle == \"number\") line = getLine(doc, clipLine(doc, handle))\n  else no = lineNo(handle)\n  if (no == null) return null\n  if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType)\n  return line\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/model/chunk.js",
    "content": "import { cleanUpLine } from \"../line/line_data\"\nimport { indexOf } from \"../util/misc\"\nimport { signalLater } from \"../util/operation_group\"\n\n// The document is represented as a BTree consisting of leaves, with\n// chunk of lines in them, and branches, with up to ten leaves or\n// other branch nodes below them. The top node is always a branch\n// node, and is the document object itself (meaning it has\n// additional methods and properties).\n//\n// All nodes have parent links. The tree is used both to go from\n// line numbers to line objects, and to go from objects to numbers.\n// It also indexes by height, and is used to convert between height\n// and line object, and to find the total height of the document.\n//\n// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\nexport class LeafChunk {\n  constructor(lines) {\n    this.lines = lines\n    this.parent = null\n    let height = 0\n    for (let i = 0; i < lines.length; ++i) {\n      lines[i].parent = this\n      height += lines[i].height\n    }\n    this.height = height\n  }\n\n  chunkSize() { return this.lines.length }\n\n  // Remove the n lines at offset 'at'.\n  removeInner(at, n) {\n    for (let i = at, e = at + n; i < e; ++i) {\n      let line = this.lines[i]\n      this.height -= line.height\n      cleanUpLine(line)\n      signalLater(line, \"delete\")\n    }\n    this.lines.splice(at, n)\n  }\n\n  // Helper used to collapse a small branch into a single leaf.\n  collapse(lines) {\n    lines.push.apply(lines, this.lines)\n  }\n\n  // Insert the given array of lines at offset 'at', count them as\n  // having the given height.\n  insertInner(at, lines, height) {\n    this.height += height\n    this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at))\n    for (let i = 0; i < lines.length; ++i) lines[i].parent = this\n  }\n\n  // Used to iterate over a part of the tree.\n  iterN(at, n, op) {\n    for (let e = at + n; at < e; ++at)\n      if (op(this.lines[at])) return true\n  }\n}\n\nexport class BranchChunk {\n  constructor(children) {\n    this.children = children\n    let size = 0, height = 0\n    for (let i = 0; i < children.length; ++i) {\n      let ch = children[i]\n      size += ch.chunkSize(); height += ch.height\n      ch.parent = this\n    }\n    this.size = size\n    this.height = height\n    this.parent = null\n  }\n\n  chunkSize() { return this.size }\n\n  removeInner(at, n) {\n    this.size -= n\n    for (let i = 0; i < this.children.length; ++i) {\n      let child = this.children[i], sz = child.chunkSize()\n      if (at < sz) {\n        let rm = Math.min(n, sz - at), oldHeight = child.height\n        child.removeInner(at, rm)\n        this.height -= oldHeight - child.height\n        if (sz == rm) { this.children.splice(i--, 1); child.parent = null }\n        if ((n -= rm) == 0) break\n        at = 0\n      } else at -= sz\n    }\n    // If the result is smaller than 25 lines, ensure that it is a\n    // single leaf node.\n    if (this.size - n < 25 &&\n        (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n      let lines = []\n      this.collapse(lines)\n      this.children = [new LeafChunk(lines)]\n      this.children[0].parent = this\n    }\n  }\n\n  collapse(lines) {\n    for (let i = 0; i < this.children.length; ++i) this.children[i].collapse(lines)\n  }\n\n  insertInner(at, lines, height) {\n    this.size += lines.length\n    this.height += height\n    for (let i = 0; i < this.children.length; ++i) {\n      let child = this.children[i], sz = child.chunkSize()\n      if (at <= sz) {\n        child.insertInner(at, lines, height)\n        if (child.lines && child.lines.length > 50) {\n          // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n          // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n          let remaining = child.lines.length % 25 + 25\n          for (let pos = remaining; pos < child.lines.length;) {\n            let leaf = new LeafChunk(child.lines.slice(pos, pos += 25))\n            child.height -= leaf.height\n            this.children.splice(++i, 0, leaf)\n            leaf.parent = this\n          }\n          child.lines = child.lines.slice(0, remaining)\n          this.maybeSpill()\n        }\n        break\n      }\n      at -= sz\n    }\n  }\n\n  // When a node has grown, check whether it should be split.\n  maybeSpill() {\n    if (this.children.length <= 10) return\n    let me = this\n    do {\n      let spilled = me.children.splice(me.children.length - 5, 5)\n      let sibling = new BranchChunk(spilled)\n      if (!me.parent) { // Become the parent node\n        let copy = new BranchChunk(me.children)\n        copy.parent = me\n        me.children = [copy, sibling]\n        me = copy\n     } else {\n        me.size -= sibling.size\n        me.height -= sibling.height\n        let myIndex = indexOf(me.parent.children, me)\n        me.parent.children.splice(myIndex + 1, 0, sibling)\n      }\n      sibling.parent = me.parent\n    } while (me.children.length > 10)\n    me.parent.maybeSpill()\n  }\n\n  iterN(at, n, op) {\n    for (let i = 0; i < this.children.length; ++i) {\n      let child = this.children[i], sz = child.chunkSize()\n      if (at < sz) {\n        let used = Math.min(n, sz - at)\n        if (child.iterN(at, used, op)) return true\n        if ((n -= used) == 0) break\n        at = 0\n      } else at -= sz\n    }\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/model/document_data.js",
    "content": "import { loadMode } from \"../display/mode_state\"\nimport { runInOp } from \"../display/operations\"\nimport { regChange } from \"../display/view_tracking\"\nimport { Line, updateLine } from \"../line/line_data\"\nimport { findMaxLine } from \"../line/spans\"\nimport { getLine } from \"../line/utils_line\"\nimport { estimateLineHeights } from \"../measurement/position_measurement\"\nimport { addClass, rmClass } from \"../util/dom\"\nimport { lst } from \"../util/misc\"\nimport { signalLater } from \"../util/operation_group\"\n\n// DOCUMENT DATA STRUCTURE\n\n// By default, updates that start and end at the beginning of a line\n// are treated specially, in order to make the association of line\n// widgets and marker elements with the text behave more intuitive.\nexport function isWholeLineUpdate(doc, change) {\n  return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n    (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n}\n\n// Perform a change on the document data structure.\nexport function updateDoc(doc, change, markedSpans, estimateHeight) {\n  function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n  function update(line, text, spans) {\n    updateLine(line, text, spans, estimateHeight)\n    signalLater(line, \"change\", line, change)\n  }\n  function linesFor(start, end) {\n    let result = []\n    for (let i = start; i < end; ++i)\n      result.push(new Line(text[i], spansFor(i), estimateHeight))\n    return result\n  }\n\n  let from = change.from, to = change.to, text = change.text\n  let firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line)\n  let lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line\n\n  // Adjust the line structure\n  if (change.full) {\n    doc.insert(0, linesFor(0, text.length))\n    doc.remove(text.length, doc.size - text.length)\n  } else if (isWholeLineUpdate(doc, change)) {\n    // This is a whole-line replace. Treated specially to make\n    // sure line objects move the way they are supposed to.\n    let added = linesFor(0, text.length - 1)\n    update(lastLine, lastLine.text, lastSpans)\n    if (nlines) doc.remove(from.line, nlines)\n    if (added.length) doc.insert(from.line, added)\n  } else if (firstLine == lastLine) {\n    if (text.length == 1) {\n      update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans)\n    } else {\n      let added = linesFor(1, text.length - 1)\n      added.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight))\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0))\n      doc.insert(from.line + 1, added)\n    }\n  } else if (text.length == 1) {\n    update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0))\n    doc.remove(from.line + 1, nlines)\n  } else {\n    update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0))\n    update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans)\n    let added = linesFor(1, text.length - 1)\n    if (nlines > 1) doc.remove(from.line + 1, nlines - 1)\n    doc.insert(from.line + 1, added)\n  }\n\n  signalLater(doc, \"change\", doc, change)\n}\n\n// Call f for all linked documents.\nexport function linkedDocs(doc, f, sharedHistOnly) {\n  function propagate(doc, skip, sharedHist) {\n    if (doc.linked) for (let i = 0; i < doc.linked.length; ++i) {\n      let rel = doc.linked[i]\n      if (rel.doc == skip) continue\n      let shared = sharedHist && rel.sharedHist\n      if (sharedHistOnly && !shared) continue\n      f(rel.doc, shared)\n      propagate(rel.doc, doc, shared)\n    }\n  }\n  propagate(doc, null, true)\n}\n\n// Attach a document to an editor.\nexport function attachDoc(cm, doc) {\n  if (doc.cm) throw new Error(\"This document is already in use.\")\n  cm.doc = doc\n  doc.cm = cm\n  estimateLineHeights(cm)\n  loadMode(cm)\n  setDirectionClass(cm)\n  if (!cm.options.lineWrapping) findMaxLine(cm)\n  cm.options.mode = doc.modeOption\n  regChange(cm)\n}\n\nfunction setDirectionClass(cm) {\n  ;(cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\")\n}\n\nexport function directionChanged(cm) {\n  runInOp(cm, () => {\n    setDirectionClass(cm)\n    regChange(cm)\n  })\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/model/history.js",
    "content": "import { cmp, copyPos } from \"../line/pos\"\nimport { stretchSpansOverChange } from \"../line/spans\"\nimport { getBetween } from \"../line/utils_line\"\nimport { signal } from \"../util/event\"\nimport { indexOf, lst } from \"../util/misc\"\n\nimport { changeEnd } from \"./change_measurement\"\nimport { linkedDocs } from \"./document_data\"\nimport { Selection } from \"./selection\"\n\nexport function History(startGen) {\n  // Arrays of change events and selections. Doing something adds an\n  // event to done and clears undo. Undoing moves events from done\n  // to undone, redoing moves them in the other direction.\n  this.done = []; this.undone = []\n  this.undoDepth = Infinity\n  // Used to track when changes can be merged into a single undo\n  // event\n  this.lastModTime = this.lastSelTime = 0\n  this.lastOp = this.lastSelOp = null\n  this.lastOrigin = this.lastSelOrigin = null\n  // Used by the isClean() method\n  this.generation = this.maxGeneration = startGen || 1\n}\n\n// Create a history change event from an updateDoc-style change\n// object.\nexport function historyChangeFromChange(doc, change) {\n  let histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)}\n  attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1)\n  linkedDocs(doc, doc => attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1), true)\n  return histChange\n}\n\n// Pop all selection events off the end of a history array. Stop at\n// a change event.\nfunction clearSelectionEvents(array) {\n  while (array.length) {\n    let last = lst(array)\n    if (last.ranges) array.pop()\n    else break\n  }\n}\n\n// Find the top change event in the history. Pop off selection\n// events that are in the way.\nfunction lastChangeEvent(hist, force) {\n  if (force) {\n    clearSelectionEvents(hist.done)\n    return lst(hist.done)\n  } else if (hist.done.length && !lst(hist.done).ranges) {\n    return lst(hist.done)\n  } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n    hist.done.pop()\n    return lst(hist.done)\n  }\n}\n\n// Register a change in the history. Merges changes that are within\n// a single operation, or are close together with an origin that\n// allows merging (starting with \"+\") into a single event.\nexport function addChangeToHistory(doc, change, selAfter, opId) {\n  let hist = doc.history\n  hist.undone.length = 0\n  let time = +new Date, cur\n  let last\n\n  if ((hist.lastOp == opId ||\n       hist.lastOrigin == change.origin && change.origin &&\n       ((change.origin.charAt(0) == \"+\" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) ||\n        change.origin.charAt(0) == \"*\")) &&\n      (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n    // Merge this change into the last event\n    last = lst(cur.changes)\n    if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n      // Optimized case for simple insertion -- don't want to add\n      // new changesets for every character typed\n      last.to = changeEnd(change)\n    } else {\n      // Add new sub-event\n      cur.changes.push(historyChangeFromChange(doc, change))\n    }\n  } else {\n    // Can not be merged, start a new event.\n    let before = lst(hist.done)\n    if (!before || !before.ranges)\n      pushSelectionToHistory(doc.sel, hist.done)\n    cur = {changes: [historyChangeFromChange(doc, change)],\n           generation: hist.generation}\n    hist.done.push(cur)\n    while (hist.done.length > hist.undoDepth) {\n      hist.done.shift()\n      if (!hist.done[0].ranges) hist.done.shift()\n    }\n  }\n  hist.done.push(selAfter)\n  hist.generation = ++hist.maxGeneration\n  hist.lastModTime = hist.lastSelTime = time\n  hist.lastOp = hist.lastSelOp = opId\n  hist.lastOrigin = hist.lastSelOrigin = change.origin\n\n  if (!last) signal(doc, \"historyAdded\")\n}\n\nfunction selectionEventCanBeMerged(doc, origin, prev, sel) {\n  let ch = origin.charAt(0)\n  return ch == \"*\" ||\n    ch == \"+\" &&\n    prev.ranges.length == sel.ranges.length &&\n    prev.somethingSelected() == sel.somethingSelected() &&\n    new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n}\n\n// Called whenever the selection changes, sets the new selection as\n// the pending selection in the history, and pushes the old pending\n// selection into the 'done' array when it was significantly\n// different (in number of selected ranges, emptiness, or time).\nexport function addSelectionToHistory(doc, sel, opId, options) {\n  let hist = doc.history, origin = options && options.origin\n\n  // A new event is started when the previous origin does not match\n  // the current, or the origins don't allow matching. Origins\n  // starting with * are always merged, those starting with + are\n  // merged when similar and close together in time.\n  if (opId == hist.lastSelOp ||\n      (origin && hist.lastSelOrigin == origin &&\n       (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n        selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n    hist.done[hist.done.length - 1] = sel\n  else\n    pushSelectionToHistory(sel, hist.done)\n\n  hist.lastSelTime = +new Date\n  hist.lastSelOrigin = origin\n  hist.lastSelOp = opId\n  if (options && options.clearRedo !== false)\n    clearSelectionEvents(hist.undone)\n}\n\nexport function pushSelectionToHistory(sel, dest) {\n  let top = lst(dest)\n  if (!(top && top.ranges && top.equals(sel)))\n    dest.push(sel)\n}\n\n// Used to store marked span information in the history.\nfunction attachLocalSpans(doc, change, from, to) {\n  let existing = change[\"spans_\" + doc.id], n = 0\n  doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), line => {\n    if (line.markedSpans)\n      (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans\n    ++n\n  })\n}\n\n// When un/re-doing restores text containing marked spans, those\n// that have been explicitly cleared should not be restored.\nfunction removeClearedSpans(spans) {\n  if (!spans) return null\n  let out\n  for (let i = 0; i < spans.length; ++i) {\n    if (spans[i].marker.explicitlyCleared) { if (!out) out = spans.slice(0, i) }\n    else if (out) out.push(spans[i])\n  }\n  return !out ? spans : out.length ? out : null\n}\n\n// Retrieve and filter the old marked spans stored in a change event.\nfunction getOldSpans(doc, change) {\n  let found = change[\"spans_\" + doc.id]\n  if (!found) return null\n  let nw = []\n  for (let i = 0; i < change.text.length; ++i)\n    nw.push(removeClearedSpans(found[i]))\n  return nw\n}\n\n// Used for un/re-doing changes from the history. Combines the\n// result of computing the existing spans with the set of spans that\n// existed in the history (so that deleting around a span and then\n// undoing brings back the span).\nexport function mergeOldSpans(doc, change) {\n  let old = getOldSpans(doc, change)\n  let stretched = stretchSpansOverChange(doc, change)\n  if (!old) return stretched\n  if (!stretched) return old\n\n  for (let i = 0; i < old.length; ++i) {\n    let oldCur = old[i], stretchCur = stretched[i]\n    if (oldCur && stretchCur) {\n      spans: for (let j = 0; j < stretchCur.length; ++j) {\n        let span = stretchCur[j]\n        for (let k = 0; k < oldCur.length; ++k)\n          if (oldCur[k].marker == span.marker) continue spans\n        oldCur.push(span)\n      }\n    } else if (stretchCur) {\n      old[i] = stretchCur\n    }\n  }\n  return old\n}\n\n// Used both to provide a JSON-safe object in .getHistory, and, when\n// detaching a document, to split the history in two\nexport function copyHistoryArray(events, newGroup, instantiateSel) {\n  let copy = []\n  for (let i = 0; i < events.length; ++i) {\n    let event = events[i]\n    if (event.ranges) {\n      copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event)\n      continue\n    }\n    let changes = event.changes, newChanges = []\n    copy.push({changes: newChanges})\n    for (let j = 0; j < changes.length; ++j) {\n      let change = changes[j], m\n      newChanges.push({from: change.from, to: change.to, text: change.text})\n      if (newGroup) for (var prop in change) if (m = prop.match(/^spans_(\\d+)$/)) {\n        if (indexOf(newGroup, Number(m[1])) > -1) {\n          lst(newChanges)[prop] = change[prop]\n          delete change[prop]\n        }\n      }\n    }\n  }\n  return copy\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/model/line_widget.js",
    "content": "import { runInOp } from \"../display/operations\"\nimport { addToScrollPos } from \"../display/scrolling\"\nimport { regLineChange } from \"../display/view_tracking\"\nimport { heightAtLine, lineIsHidden } from \"../line/spans\"\nimport { lineNo, updateLineHeight } from \"../line/utils_line\"\nimport { widgetHeight } from \"../measurement/widgets\"\nimport { changeLine } from \"./changes\"\nimport { eventMixin } from \"../util/event\"\nimport { signalLater } from \"../util/operation_group\"\n\n// Line widgets are block elements displayed above or below a line.\n\nexport class LineWidget {\n  constructor(doc, node, options) {\n    if (options) for (let opt in options) if (options.hasOwnProperty(opt))\n      this[opt] = options[opt]\n    this.doc = doc\n    this.node = node\n  }\n\n  clear() {\n    let cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line)\n    if (no == null || !ws) return\n    for (let i = 0; i < ws.length; ++i) if (ws[i] == this) ws.splice(i--, 1)\n    if (!ws.length) line.widgets = null\n    let height = widgetHeight(this)\n    updateLineHeight(line, Math.max(0, line.height - height))\n    if (cm) {\n      runInOp(cm, () => {\n        adjustScrollWhenAboveVisible(cm, line, -height)\n        regLineChange(cm, no, \"widget\")\n      })\n      signalLater(cm, \"lineWidgetCleared\", cm, this, no)\n    }\n  }\n\n  changed() {\n    let oldH = this.height, cm = this.doc.cm, line = this.line\n    this.height = null\n    let diff = widgetHeight(this) - oldH\n    if (!diff) return\n    updateLineHeight(line, line.height + diff)\n    if (cm) {\n      runInOp(cm, () => {\n        cm.curOp.forceUpdate = true\n        adjustScrollWhenAboveVisible(cm, line, diff)\n        signalLater(cm, \"lineWidgetChanged\", cm, this, lineNo(line))\n      })\n    }\n  }\n}\neventMixin(LineWidget)\n\nfunction adjustScrollWhenAboveVisible(cm, line, diff) {\n  if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n    addToScrollPos(cm, null, diff)\n}\n\nexport function addLineWidget(doc, handle, node, options) {\n  let widget = new LineWidget(doc, node, options)\n  let cm = doc.cm\n  if (cm && widget.noHScroll) cm.display.alignWidgets = true\n  changeLine(doc, handle, \"widget\", line => {\n    let widgets = line.widgets || (line.widgets = [])\n    if (widget.insertAt == null) widgets.push(widget)\n    else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget)\n    widget.line = line\n    if (cm && !lineIsHidden(doc, line)) {\n      let aboveVisible = heightAtLine(line) < doc.scrollTop\n      updateLineHeight(line, line.height + widgetHeight(widget))\n      if (aboveVisible) addToScrollPos(cm, null, widget.height)\n      cm.curOp.forceUpdate = true\n    }\n    return true\n  })\n  signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle))\n  return widget\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/model/mark_text.js",
    "content": "import { eltP } from \"../util/dom\"\nimport { eventMixin, hasHandler, on } from \"../util/event\"\nimport { endOperation, operation, runInOp, startOperation } from \"../display/operations\"\nimport { clipPos, cmp, Pos } from \"../line/pos\"\nimport { lineNo, updateLineHeight } from \"../line/utils_line\"\nimport { clearLineMeasurementCacheFor, findViewForLine, textHeight } from \"../measurement/position_measurement\"\nimport { seeReadOnlySpans, seeCollapsedSpans } from \"../line/saw_special_spans\"\nimport { addMarkedSpan, conflictingCollapsedRange, getMarkedSpanFor, lineIsHidden, lineLength, MarkedSpan, removeMarkedSpan, visualLine } from \"../line/spans\"\nimport { copyObj, indexOf, lst } from \"../util/misc\"\nimport { signalLater } from \"../util/operation_group\"\nimport { widgetHeight } from \"../measurement/widgets\"\nimport { regChange, regLineChange } from \"../display/view_tracking\"\n\nimport { linkedDocs } from \"./document_data\"\nimport { addChangeToHistory } from \"./history\"\nimport { reCheckSelection } from \"./selection_updates\"\n\n// TEXTMARKERS\n\n// Created with markText and setBookmark methods. A TextMarker is a\n// handle that can be used to clear or find a marked position in the\n// document. Line objects hold arrays (markedSpans) containing\n// {from, to, marker} object pointing to such marker objects, and\n// indicating that such a marker is present on that line. Multiple\n// lines may point to the same marker when it spans across lines.\n// The spans will have null for their from/to properties when the\n// marker continues beyond the start/end of the line. Markers have\n// links back to the lines they currently touch.\n\n// Collapsed markers have unique ids, in order to be able to order\n// them, which is needed for uniquely determining an outer marker\n// when they overlap (they may nest, but not partially overlap).\nlet nextMarkerId = 0\n\nexport class TextMarker {\n  constructor(doc, type) {\n    this.lines = []\n    this.type = type\n    this.doc = doc\n    this.id = ++nextMarkerId\n  }\n\n  // Clear the marker.\n  clear() {\n    if (this.explicitlyCleared) return\n    let cm = this.doc.cm, withOp = cm && !cm.curOp\n    if (withOp) startOperation(cm)\n    if (hasHandler(this, \"clear\")) {\n      let found = this.find()\n      if (found) signalLater(this, \"clear\", found.from, found.to)\n    }\n    let min = null, max = null\n    for (let i = 0; i < this.lines.length; ++i) {\n      let line = this.lines[i]\n      let span = getMarkedSpanFor(line.markedSpans, this)\n      if (cm && !this.collapsed) regLineChange(cm, lineNo(line), \"text\")\n      else if (cm) {\n        if (span.to != null) max = lineNo(line)\n        if (span.from != null) min = lineNo(line)\n      }\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span)\n      if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n        updateLineHeight(line, textHeight(cm.display))\n    }\n    if (cm && this.collapsed && !cm.options.lineWrapping) for (let i = 0; i < this.lines.length; ++i) {\n      let visual = visualLine(this.lines[i]), len = lineLength(visual)\n      if (len > cm.display.maxLineLength) {\n        cm.display.maxLine = visual\n        cm.display.maxLineLength = len\n        cm.display.maxLineChanged = true\n      }\n    }\n\n    if (min != null && cm && this.collapsed) regChange(cm, min, max + 1)\n    this.lines.length = 0\n    this.explicitlyCleared = true\n    if (this.atomic && this.doc.cantEdit) {\n      this.doc.cantEdit = false\n      if (cm) reCheckSelection(cm.doc)\n    }\n    if (cm) signalLater(cm, \"markerCleared\", cm, this, min, max)\n    if (withOp) endOperation(cm)\n    if (this.parent) this.parent.clear()\n  }\n\n  // Find the position of the marker in the document. Returns a {from,\n  // to} object by default. Side can be passed to get a specific side\n  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n  // Pos objects returned contain a line object, rather than a line\n  // number (used to prevent looking up the same line twice).\n  find(side, lineObj) {\n    if (side == null && this.type == \"bookmark\") side = 1\n    let from, to\n    for (let i = 0; i < this.lines.length; ++i) {\n      let line = this.lines[i]\n      let span = getMarkedSpanFor(line.markedSpans, this)\n      if (span.from != null) {\n        from = Pos(lineObj ? line : lineNo(line), span.from)\n        if (side == -1) return from\n      }\n      if (span.to != null) {\n        to = Pos(lineObj ? line : lineNo(line), span.to)\n        if (side == 1) return to\n      }\n    }\n    return from && {from: from, to: to}\n  }\n\n  // Signals that the marker's widget changed, and surrounding layout\n  // should be recomputed.\n  changed() {\n    let pos = this.find(-1, true), widget = this, cm = this.doc.cm\n    if (!pos || !cm) return\n    runInOp(cm, () => {\n      let line = pos.line, lineN = lineNo(pos.line)\n      let view = findViewForLine(cm, lineN)\n      if (view) {\n        clearLineMeasurementCacheFor(view)\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true\n      }\n      cm.curOp.updateMaxLine = true\n      if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n        let oldHeight = widget.height\n        widget.height = null\n        let dHeight = widgetHeight(widget) - oldHeight\n        if (dHeight)\n          updateLineHeight(line, line.height + dHeight)\n      }\n      signalLater(cm, \"markerChanged\", cm, this)\n    })\n  }\n\n  attachLine(line) {\n    if (!this.lines.length && this.doc.cm) {\n      let op = this.doc.cm.curOp\n      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n        (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this)\n    }\n    this.lines.push(line)\n  }\n\n  detachLine(line) {\n    this.lines.splice(indexOf(this.lines, line), 1)\n    if (!this.lines.length && this.doc.cm) {\n      let op = this.doc.cm.curOp\n      ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this)\n    }\n  }\n}\neventMixin(TextMarker)\n\n// Create a marker, wire it up to the right lines, and\nexport function markText(doc, from, to, options, type) {\n  // Shared markers (across linked documents) are handled separately\n  // (markTextShared will call out to this again, once per\n  // document).\n  if (options && options.shared) return markTextShared(doc, from, to, options, type)\n  // Ensure we are in an operation.\n  if (doc.cm && !doc.cm.curOp) return operation(doc.cm, markText)(doc, from, to, options, type)\n\n  let marker = new TextMarker(doc, type), diff = cmp(from, to)\n  if (options) copyObj(options, marker, false)\n  // Don't connect empty markers unless clearWhenEmpty is false\n  if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n    return marker\n  if (marker.replacedWith) {\n    // Showing up as a widget implies collapsed (widget replaces text)\n    marker.collapsed = true\n    marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\")\n    if (!options.handleMouseEvents) marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\")\n    if (options.insertLeft) marker.widgetNode.insertLeft = true\n  }\n  if (marker.collapsed) {\n    if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n        from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n      throw new Error(\"Inserting collapsed marker partially overlapping an existing one\")\n    seeCollapsedSpans()\n  }\n\n  if (marker.addToHistory)\n    addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN)\n\n  let curLine = from.line, cm = doc.cm, updateMaxLine\n  doc.iter(curLine, to.line + 1, line => {\n    if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n      updateMaxLine = true\n    if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0)\n    addMarkedSpan(line, new MarkedSpan(marker,\n                                       curLine == from.line ? from.ch : null,\n                                       curLine == to.line ? to.ch : null))\n    ++curLine\n  })\n  // lineIsHidden depends on the presence of the spans, so needs a second pass\n  if (marker.collapsed) doc.iter(from.line, to.line + 1, line => {\n    if (lineIsHidden(doc, line)) updateLineHeight(line, 0)\n  })\n\n  if (marker.clearOnEnter) on(marker, \"beforeCursorEnter\", () => marker.clear())\n\n  if (marker.readOnly) {\n    seeReadOnlySpans()\n    if (doc.history.done.length || doc.history.undone.length)\n      doc.clearHistory()\n  }\n  if (marker.collapsed) {\n    marker.id = ++nextMarkerId\n    marker.atomic = true\n  }\n  if (cm) {\n    // Sync editor state\n    if (updateMaxLine) cm.curOp.updateMaxLine = true\n    if (marker.collapsed)\n      regChange(cm, from.line, to.line + 1)\n    else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css)\n      for (let i = from.line; i <= to.line; i++) regLineChange(cm, i, \"text\")\n    if (marker.atomic) reCheckSelection(cm.doc)\n    signalLater(cm, \"markerAdded\", cm, marker)\n  }\n  return marker\n}\n\n// SHARED TEXTMARKERS\n\n// A shared marker spans multiple linked documents. It is\n// implemented as a meta-marker-object controlling multiple normal\n// markers.\nexport class SharedTextMarker {\n  constructor(markers, primary) {\n    this.markers = markers\n    this.primary = primary\n    for (let i = 0; i < markers.length; ++i)\n      markers[i].parent = this\n  }\n\n  clear() {\n    if (this.explicitlyCleared) return\n    this.explicitlyCleared = true\n    for (let i = 0; i < this.markers.length; ++i)\n      this.markers[i].clear()\n    signalLater(this, \"clear\")\n  }\n\n  find(side, lineObj) {\n    return this.primary.find(side, lineObj)\n  }\n}\neventMixin(SharedTextMarker)\n\nfunction markTextShared(doc, from, to, options, type) {\n  options = copyObj(options)\n  options.shared = false\n  let markers = [markText(doc, from, to, options, type)], primary = markers[0]\n  let widget = options.widgetNode\n  linkedDocs(doc, doc => {\n    if (widget) options.widgetNode = widget.cloneNode(true)\n    markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type))\n    for (let i = 0; i < doc.linked.length; ++i)\n      if (doc.linked[i].isParent) return\n    primary = lst(markers)\n  })\n  return new SharedTextMarker(markers, primary)\n}\n\nexport function findSharedMarkers(doc) {\n  return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), m => m.parent)\n}\n\nexport function copySharedMarkers(doc, markers) {\n  for (let i = 0; i < markers.length; i++) {\n    let marker = markers[i], pos = marker.find()\n    let mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to)\n    if (cmp(mFrom, mTo)) {\n      let subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type)\n      marker.markers.push(subMark)\n      subMark.parent = marker\n    }\n  }\n}\n\nexport function detachSharedMarkers(markers) {\n  for (let i = 0; i < markers.length; i++) {\n    let marker = markers[i], linked = [marker.primary.doc]\n    linkedDocs(marker.primary.doc, d => linked.push(d))\n    for (let j = 0; j < marker.markers.length; j++) {\n      let subMarker = marker.markers[j]\n      if (indexOf(linked, subMarker.doc) == -1) {\n        subMarker.parent = null\n        marker.markers.splice(j--, 1)\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/model/selection.js",
    "content": "import { cmp, copyPos, equalCursorPos, maxPos, minPos } from \"../line/pos\"\nimport { indexOf } from \"../util/misc\"\n\n// Selection objects are immutable. A new one is created every time\n// the selection changes. A selection is one or more non-overlapping\n// (and non-touching) ranges, sorted, and an integer that indicates\n// which one is the primary selection (the one that's scrolled into\n// view, that getCursor returns, etc).\nexport class Selection {\n  constructor(ranges, primIndex) {\n    this.ranges = ranges\n    this.primIndex = primIndex\n  }\n\n  primary() { return this.ranges[this.primIndex] }\n\n  equals(other) {\n    if (other == this) return true\n    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false\n    for (let i = 0; i < this.ranges.length; i++) {\n      let here = this.ranges[i], there = other.ranges[i]\n      if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) return false\n    }\n    return true\n  }\n\n  deepCopy() {\n    let out = []\n    for (let i = 0; i < this.ranges.length; i++)\n      out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head))\n    return new Selection(out, this.primIndex)\n  }\n\n  somethingSelected() {\n    for (let i = 0; i < this.ranges.length; i++)\n      if (!this.ranges[i].empty()) return true\n    return false\n  }\n\n  contains(pos, end) {\n    if (!end) end = pos\n    for (let i = 0; i < this.ranges.length; i++) {\n      let range = this.ranges[i]\n      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n        return i\n    }\n    return -1\n  }\n}\n\nexport class Range {\n  constructor(anchor, head) {\n    this.anchor = anchor; this.head = head\n  }\n\n  from() { return minPos(this.anchor, this.head) }\n  to() { return maxPos(this.anchor, this.head) }\n  empty() { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch }\n}\n\n// Take an unsorted, potentially overlapping set of ranges, and\n// build a selection out of it. 'Consumes' ranges array (modifying\n// it).\nexport function normalizeSelection(ranges, primIndex) {\n  let prim = ranges[primIndex]\n  ranges.sort((a, b) => cmp(a.from(), b.from()))\n  primIndex = indexOf(ranges, prim)\n  for (let i = 1; i < ranges.length; i++) {\n    let cur = ranges[i], prev = ranges[i - 1]\n    if (cmp(prev.to(), cur.from()) >= 0) {\n      let from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to())\n      let inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head\n      if (i <= primIndex) --primIndex\n      ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to))\n    }\n  }\n  return new Selection(ranges, primIndex)\n}\n\nexport function simpleSelection(anchor, head) {\n  return new Selection([new Range(anchor, head || anchor)], 0)\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/model/selection_updates.js",
    "content": "import { signalLater } from \"../util/operation_group\"\nimport { ensureCursorVisible } from \"../display/scrolling\"\nimport { clipPos, cmp, Pos } from \"../line/pos\"\nimport { getLine } from \"../line/utils_line\"\nimport { hasHandler, signal, signalCursorActivity } from \"../util/event\"\nimport { lst, sel_dontScroll } from \"../util/misc\"\n\nimport { addSelectionToHistory } from \"./history\"\nimport { normalizeSelection, Range, Selection, simpleSelection } from \"./selection\"\n\n// The 'scroll' parameter given to many of these indicated whether\n// the new cursor position should be scrolled into view after\n// modifying the selection.\n\n// If shift is held or the extend flag is set, extends a range to\n// include a given position (and optionally a second position).\n// Otherwise, simply returns the range between the given positions.\n// Used for cursor motion and such.\nexport function extendRange(doc, range, head, other) {\n  if (doc.cm && doc.cm.display.shift || doc.extend) {\n    let anchor = range.anchor\n    if (other) {\n      let posBefore = cmp(head, anchor) < 0\n      if (posBefore != (cmp(other, anchor) < 0)) {\n        anchor = head\n        head = other\n      } else if (posBefore != (cmp(head, other) < 0)) {\n        head = other\n      }\n    }\n    return new Range(anchor, head)\n  } else {\n    return new Range(other || head, head)\n  }\n}\n\n// Extend the primary selection range, discard the rest.\nexport function extendSelection(doc, head, other, options) {\n  setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options)\n}\n\n// Extend all selections (pos is an array of selections with length\n// equal the number of selections)\nexport function extendSelections(doc, heads, options) {\n  let out = []\n  for (let i = 0; i < doc.sel.ranges.length; i++)\n    out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null)\n  let newSel = normalizeSelection(out, doc.sel.primIndex)\n  setSelection(doc, newSel, options)\n}\n\n// Updates a single range in the selection.\nexport function replaceOneSelection(doc, i, range, options) {\n  let ranges = doc.sel.ranges.slice(0)\n  ranges[i] = range\n  setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options)\n}\n\n// Reset the selection to a single range.\nexport function setSimpleSelection(doc, anchor, head, options) {\n  setSelection(doc, simpleSelection(anchor, head), options)\n}\n\n// Give beforeSelectionChange handlers a change to influence a\n// selection update.\nfunction filterSelectionChange(doc, sel, options) {\n  let obj = {\n    ranges: sel.ranges,\n    update: function(ranges) {\n      this.ranges = []\n      for (let i = 0; i < ranges.length; i++)\n        this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n                                   clipPos(doc, ranges[i].head))\n    },\n    origin: options && options.origin\n  }\n  signal(doc, \"beforeSelectionChange\", doc, obj)\n  if (doc.cm) signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj)\n  if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1)\n  else return sel\n}\n\nexport function setSelectionReplaceHistory(doc, sel, options) {\n  let done = doc.history.done, last = lst(done)\n  if (last && last.ranges) {\n    done[done.length - 1] = sel\n    setSelectionNoUndo(doc, sel, options)\n  } else {\n    setSelection(doc, sel, options)\n  }\n}\n\n// Set a new selection.\nexport function setSelection(doc, sel, options) {\n  setSelectionNoUndo(doc, sel, options)\n  addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options)\n}\n\nexport function setSelectionNoUndo(doc, sel, options) {\n  if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n    sel = filterSelectionChange(doc, sel, options)\n\n  let bias = options && options.bias ||\n    (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1)\n  setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true))\n\n  if (!(options && options.scroll === false) && doc.cm)\n    ensureCursorVisible(doc.cm)\n}\n\nfunction setSelectionInner(doc, sel) {\n  if (sel.equals(doc.sel)) return\n\n  doc.sel = sel\n\n  if (doc.cm) {\n    doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true\n    signalCursorActivity(doc.cm)\n  }\n  signalLater(doc, \"cursorActivity\", doc)\n}\n\n// Verify that the selection does not partially select any atomic\n// marked ranges.\nexport function reCheckSelection(doc) {\n  setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll)\n}\n\n// Return a selection that does not partially select any atomic\n// ranges.\nfunction skipAtomicInSelection(doc, sel, bias, mayClear) {\n  let out\n  for (let i = 0; i < sel.ranges.length; i++) {\n    let range = sel.ranges[i]\n    let old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i]\n    let newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear)\n    let newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear)\n    if (out || newAnchor != range.anchor || newHead != range.head) {\n      if (!out) out = sel.ranges.slice(0, i)\n      out[i] = new Range(newAnchor, newHead)\n    }\n  }\n  return out ? normalizeSelection(out, sel.primIndex) : sel\n}\n\nfunction skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n  let line = getLine(doc, pos.line)\n  if (line.markedSpans) for (let i = 0; i < line.markedSpans.length; ++i) {\n    let sp = line.markedSpans[i], m = sp.marker\n    if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n        (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n      if (mayClear) {\n        signal(m, \"beforeCursorEnter\")\n        if (m.explicitlyCleared) {\n          if (!line.markedSpans) break\n          else {--i; continue}\n        }\n      }\n      if (!m.atomic) continue\n\n      if (oldPos) {\n        let near = m.find(dir < 0 ? 1 : -1), diff\n        if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)\n          near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null)\n        if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n          return skipAtomicInner(doc, near, pos, dir, mayClear)\n      }\n\n      let far = m.find(dir < 0 ? -1 : 1)\n      if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)\n        far = movePos(doc, far, dir, far.line == pos.line ? line : null)\n      return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n    }\n  }\n  return pos\n}\n\n// Ensure a given position is not inside an atomic range.\nexport function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n  let dir = bias || 1\n  let found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n      (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n      skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n      (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true))\n  if (!found) {\n    doc.cantEdit = true\n    return Pos(doc.first, 0)\n  }\n  return found\n}\n\nfunction movePos(doc, pos, dir, line) {\n  if (dir < 0 && pos.ch == 0) {\n    if (pos.line > doc.first) return clipPos(doc, Pos(pos.line - 1))\n    else return null\n  } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n    if (pos.line < doc.first + doc.size - 1) return Pos(pos.line + 1, 0)\n    else return null\n  } else {\n    return new Pos(pos.line, pos.ch + dir)\n  }\n}\n\nexport function selectAll(cm) {\n  cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll)\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/modes.js",
    "content": "import { copyObj, createObj } from \"./util/misc\"\n\n// Known modes, by name and by MIME\nexport let modes = {}, mimeModes = {}\n\n// Extra arguments are stored as the mode's dependencies, which is\n// used by (legacy) mechanisms like loadmode.js to automatically\n// load a mode. (Preferred mechanism is the require/define calls.)\nexport function defineMode(name, mode) {\n  if (arguments.length > 2)\n    mode.dependencies = Array.prototype.slice.call(arguments, 2)\n  modes[name] = mode\n}\n\nexport function defineMIME(mime, spec) {\n  mimeModes[mime] = spec\n}\n\n// Given a MIME type, a {name, ...options} config object, or a name\n// string, return a mode config object.\nexport function resolveMode(spec) {\n  if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n    spec = mimeModes[spec]\n  } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n    let found = mimeModes[spec.name]\n    if (typeof found == \"string\") found = {name: found}\n    spec = createObj(found, spec)\n    spec.name = found.name\n  } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n    return resolveMode(\"application/xml\")\n  } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n    return resolveMode(\"application/json\")\n  }\n  if (typeof spec == \"string\") return {name: spec}\n  else return spec || {name: \"null\"}\n}\n\n// Given a mode spec (anything that resolveMode accepts), find and\n// initialize an actual mode object.\nexport function getMode(options, spec) {\n  spec = resolveMode(spec)\n  let mfactory = modes[spec.name]\n  if (!mfactory) return getMode(options, \"text/plain\")\n  let modeObj = mfactory(options, spec)\n  if (modeExtensions.hasOwnProperty(spec.name)) {\n    let exts = modeExtensions[spec.name]\n    for (let prop in exts) {\n      if (!exts.hasOwnProperty(prop)) continue\n      if (modeObj.hasOwnProperty(prop)) modeObj[\"_\" + prop] = modeObj[prop]\n      modeObj[prop] = exts[prop]\n    }\n  }\n  modeObj.name = spec.name\n  if (spec.helperType) modeObj.helperType = spec.helperType\n  if (spec.modeProps) for (let prop in spec.modeProps)\n    modeObj[prop] = spec.modeProps[prop]\n\n  return modeObj\n}\n\n// This can be used to attach properties to mode objects from\n// outside the actual mode definition.\nexport let modeExtensions = {}\nexport function extendMode(mode, properties) {\n  let exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {})\n  copyObj(properties, exts)\n}\n\nexport function copyState(mode, state) {\n  if (state === true) return state\n  if (mode.copyState) return mode.copyState(state)\n  let nstate = {}\n  for (let n in state) {\n    let val = state[n]\n    if (val instanceof Array) val = val.concat([])\n    nstate[n] = val\n  }\n  return nstate\n}\n\n// Given a mode and a state (for that mode), find the inner mode and\n// state at the position that the state refers to.\nexport function innerMode(mode, state) {\n  let info\n  while (mode.innerMode) {\n    info = mode.innerMode(state)\n    if (!info || info.mode == mode) break\n    state = info.state\n    mode = info.mode\n  }\n  return info || {mode: mode, state: state}\n}\n\nexport function startState(mode, a1, a2) {\n  return mode.startState ? mode.startState(a1, a2) : true\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/util/StringStream.js",
    "content": "import { countColumn } from \"./misc\"\n\n// STRING STREAM\n\n// Fed to the mode parsers, provides helper functions to make\n// parsers more succinct.\n\nclass StringStream {\n  constructor(string, tabSize) {\n    this.pos = this.start = 0\n    this.string = string\n    this.tabSize = tabSize || 8\n    this.lastColumnPos = this.lastColumnValue = 0\n    this.lineStart = 0\n  }\n\n  eol() {return this.pos >= this.string.length}\n  sol() {return this.pos == this.lineStart}\n  peek() {return this.string.charAt(this.pos) || undefined}\n  next() {\n    if (this.pos < this.string.length)\n      return this.string.charAt(this.pos++)\n  }\n  eat(match) {\n    let ch = this.string.charAt(this.pos)\n    let ok\n    if (typeof match == \"string\") ok = ch == match\n    else ok = ch && (match.test ? match.test(ch) : match(ch))\n    if (ok) {++this.pos; return ch}\n  }\n  eatWhile(match) {\n    let start = this.pos\n    while (this.eat(match)){}\n    return this.pos > start\n  }\n  eatSpace() {\n    let start = this.pos\n    while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos\n    return this.pos > start\n  }\n  skipToEnd() {this.pos = this.string.length}\n  skipTo(ch) {\n    let found = this.string.indexOf(ch, this.pos)\n    if (found > -1) {this.pos = found; return true}\n  }\n  backUp(n) {this.pos -= n}\n  column() {\n    if (this.lastColumnPos < this.start) {\n      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue)\n      this.lastColumnPos = this.start\n    }\n    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  }\n  indentation() {\n    return countColumn(this.string, null, this.tabSize) -\n      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  }\n  match(pattern, consume, caseInsensitive) {\n    if (typeof pattern == \"string\") {\n      let cased = str => caseInsensitive ? str.toLowerCase() : str\n      let substr = this.string.substr(this.pos, pattern.length)\n      if (cased(substr) == cased(pattern)) {\n        if (consume !== false) this.pos += pattern.length\n        return true\n      }\n    } else {\n      let match = this.string.slice(this.pos).match(pattern)\n      if (match && match.index > 0) return null\n      if (match && consume !== false) this.pos += match[0].length\n      return match\n    }\n  }\n  current(){return this.string.slice(this.start, this.pos)}\n  hideFirstChars(n, inner) {\n    this.lineStart += n\n    try { return inner() }\n    finally { this.lineStart -= n }\n  }\n}\n\nexport default StringStream\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/util/bidi.js",
    "content": "import { lst } from \"./misc\"\n\n// BIDI HELPERS\n\nexport function iterateBidiSections(order, from, to, f) {\n  if (!order) return f(from, to, \"ltr\")\n  let found = false\n  for (let i = 0; i < order.length; ++i) {\n    let part = order[i]\n    if (part.from < to && part.to > from || from == to && part.to == from) {\n      f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\")\n      found = true\n    }\n  }\n  if (!found) f(from, to, \"ltr\")\n}\n\nexport let bidiOther = null\nexport function getBidiPartAt(order, ch, sticky) {\n  let found\n  bidiOther = null\n  for (let i = 0; i < order.length; ++i) {\n    let cur = order[i]\n    if (cur.from < ch && cur.to > ch) return i\n    if (cur.to == ch) {\n      if (cur.from != cur.to && sticky == \"before\") found = i\n      else bidiOther = i\n    }\n    if (cur.from == ch) {\n      if (cur.from != cur.to && sticky != \"before\") found = i\n      else bidiOther = i\n    }\n  }\n  return found != null ? found : bidiOther\n}\n\n// Bidirectional ordering algorithm\n// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n// that this (partially) implements.\n\n// One-char codes used for character types:\n// L (L):   Left-to-Right\n// R (R):   Right-to-Left\n// r (AL):  Right-to-Left Arabic\n// 1 (EN):  European Number\n// + (ES):  European Number Separator\n// % (ET):  European Number Terminator\n// n (AN):  Arabic Number\n// , (CS):  Common Number Separator\n// m (NSM): Non-Spacing Mark\n// b (BN):  Boundary Neutral\n// s (B):   Paragraph Separator\n// t (S):   Segment Separator\n// w (WS):  Whitespace\n// N (ON):  Other Neutrals\n\n// Returns null if characters are ordered as they appear\n// (left-to-right), or an array of sections ({from, to, level}\n// objects) in the order in which they occur visually.\nlet bidiOrdering = (function() {\n  // Character types for codepoints 0 to 0xff\n  let lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\"\n  // Character types for codepoints 0x600 to 0x6f9\n  let arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\"\n  function charType(code) {\n    if (code <= 0xf7) return lowTypes.charAt(code)\n    else if (0x590 <= code && code <= 0x5f4) return \"R\"\n    else if (0x600 <= code && code <= 0x6f9) return arabicTypes.charAt(code - 0x600)\n    else if (0x6ee <= code && code <= 0x8ac) return \"r\"\n    else if (0x2000 <= code && code <= 0x200b) return \"w\"\n    else if (code == 0x200c) return \"b\"\n    else return \"L\"\n  }\n\n  let bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/\n  let isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/\n\n  function BidiSpan(level, from, to) {\n    this.level = level\n    this.from = from; this.to = to\n  }\n\n  return function(str, direction) {\n    let outerType = direction == \"ltr\" ? \"L\" : \"R\"\n\n    if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) return false\n    let len = str.length, types = []\n    for (let i = 0; i < len; ++i)\n      types.push(charType(str.charCodeAt(i)))\n\n    // W1. Examine each non-spacing mark (NSM) in the level run, and\n    // change the type of the NSM to the type of the previous\n    // character. If the NSM is at the start of the level run, it will\n    // get the type of sor.\n    for (let i = 0, prev = outerType; i < len; ++i) {\n      let type = types[i]\n      if (type == \"m\") types[i] = prev\n      else prev = type\n    }\n\n    // W2. Search backwards from each instance of a European number\n    // until the first strong type (R, L, AL, or sor) is found. If an\n    // AL is found, change the type of the European number to Arabic\n    // number.\n    // W3. Change all ALs to R.\n    for (let i = 0, cur = outerType; i < len; ++i) {\n      let type = types[i]\n      if (type == \"1\" && cur == \"r\") types[i] = \"n\"\n      else if (isStrong.test(type)) { cur = type; if (type == \"r\") types[i] = \"R\" }\n    }\n\n    // W4. A single European separator between two European numbers\n    // changes to a European number. A single common separator between\n    // two numbers of the same type changes to that type.\n    for (let i = 1, prev = types[0]; i < len - 1; ++i) {\n      let type = types[i]\n      if (type == \"+\" && prev == \"1\" && types[i+1] == \"1\") types[i] = \"1\"\n      else if (type == \",\" && prev == types[i+1] &&\n               (prev == \"1\" || prev == \"n\")) types[i] = prev\n      prev = type\n    }\n\n    // W5. A sequence of European terminators adjacent to European\n    // numbers changes to all European numbers.\n    // W6. Otherwise, separators and terminators change to Other\n    // Neutral.\n    for (let i = 0; i < len; ++i) {\n      let type = types[i]\n      if (type == \",\") types[i] = \"N\"\n      else if (type == \"%\") {\n        let end\n        for (end = i + 1; end < len && types[end] == \"%\"; ++end) {}\n        let replace = (i && types[i-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\"\n        for (let j = i; j < end; ++j) types[j] = replace\n        i = end - 1\n      }\n    }\n\n    // W7. Search backwards from each instance of a European number\n    // until the first strong type (R, L, or sor) is found. If an L is\n    // found, then change the type of the European number to L.\n    for (let i = 0, cur = outerType; i < len; ++i) {\n      let type = types[i]\n      if (cur == \"L\" && type == \"1\") types[i] = \"L\"\n      else if (isStrong.test(type)) cur = type\n    }\n\n    // N1. A sequence of neutrals takes the direction of the\n    // surrounding strong text if the text on both sides has the same\n    // direction. European and Arabic numbers act as if they were R in\n    // terms of their influence on neutrals. Start-of-level-run (sor)\n    // and end-of-level-run (eor) are used at level run boundaries.\n    // N2. Any remaining neutrals take the embedding direction.\n    for (let i = 0; i < len; ++i) {\n      if (isNeutral.test(types[i])) {\n        let end\n        for (end = i + 1; end < len && isNeutral.test(types[end]); ++end) {}\n        let before = (i ? types[i-1] : outerType) == \"L\"\n        let after = (end < len ? types[end] : outerType) == \"L\"\n        let replace = before == after ? (before ? \"L\" : \"R\") : outerType\n        for (let j = i; j < end; ++j) types[j] = replace\n        i = end - 1\n      }\n    }\n\n    // Here we depart from the documented algorithm, in order to avoid\n    // building up an actual levels array. Since there are only three\n    // levels (0, 1, 2) in an implementation that doesn't take\n    // explicit embedding into account, we can build up the order on\n    // the fly, without following the level-based algorithm.\n    let order = [], m\n    for (let i = 0; i < len;) {\n      if (countsAsLeft.test(types[i])) {\n        let start = i\n        for (++i; i < len && countsAsLeft.test(types[i]); ++i) {}\n        order.push(new BidiSpan(0, start, i))\n      } else {\n        let pos = i, at = order.length\n        for (++i; i < len && types[i] != \"L\"; ++i) {}\n        for (let j = pos; j < i;) {\n          if (countsAsNum.test(types[j])) {\n            if (pos < j) order.splice(at, 0, new BidiSpan(1, pos, j))\n            let nstart = j\n            for (++j; j < i && countsAsNum.test(types[j]); ++j) {}\n            order.splice(at, 0, new BidiSpan(2, nstart, j))\n            pos = j\n          } else ++j\n        }\n        if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i))\n      }\n    }\n    if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n      order[0].from = m[0].length\n      order.unshift(new BidiSpan(0, 0, m[0].length))\n    }\n    if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n      lst(order).to -= m[0].length\n      order.push(new BidiSpan(0, len - m[0].length, len))\n    }\n\n    return direction == \"rtl\" ? order.reverse() : order\n  }\n})()\n\n// Get the bidi ordering for the given line (and cache it). Returns\n// false for lines that are fully left-to-right, and an array of\n// BidiSpan objects otherwise.\nexport function getOrder(line, direction) {\n  let order = line.order\n  if (order == null) order = line.order = bidiOrdering(line.text, direction)\n  return order\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/util/browser.js",
    "content": "// Kludges for bugs and behavior differences that can't be feature\n// detected are enabled based on userAgent etc sniffing.\nlet userAgent = navigator.userAgent\nlet platform = navigator.platform\n\nexport let gecko = /gecko\\/\\d/i.test(userAgent)\nlet ie_upto10 = /MSIE \\d/.test(userAgent)\nlet ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent)\nlet edge = /Edge\\/(\\d+)/.exec(userAgent)\nexport let ie = ie_upto10 || ie_11up || edge\nexport let ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1])\nexport let webkit = !edge && /WebKit\\//.test(userAgent)\nlet qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent)\nexport let chrome = !edge && /Chrome\\//.test(userAgent)\nexport let presto = /Opera\\//.test(userAgent)\nexport let safari = /Apple Computer/.test(navigator.vendor)\nexport let mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent)\nexport let phantom = /PhantomJS/.test(userAgent)\n\nexport let ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent)\nexport let android = /Android/.test(userAgent)\n// This is woefully incomplete. Suggestions for alternative methods welcome.\nexport let mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent)\nexport let mac = ios || /Mac/.test(platform)\nexport let chromeOS = /\\bCrOS\\b/.test(userAgent)\nexport let windows = /win/i.test(platform)\n\nlet presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/)\nif (presto_version) presto_version = Number(presto_version[1])\nif (presto_version && presto_version >= 15) { presto = false; webkit = true }\n// Some browsers use the wrong event properties to signal cmd/ctrl on OS X\nexport let flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11))\nexport let captureRightClick = gecko || (ie && ie_version >= 9)\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/util/dom.js",
    "content": "import { ie, ios } from \"./browser\"\n\nexport function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\nexport let rmClass = function(node, cls) {\n  let current = node.className\n  let match = classTest(cls).exec(current)\n  if (match) {\n    let after = current.slice(match.index + match[0].length)\n    node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\")\n  }\n}\n\nexport function removeChildren(e) {\n  for (let count = e.childNodes.length; count > 0; --count)\n    e.removeChild(e.firstChild)\n  return e\n}\n\nexport function removeChildrenAndAdd(parent, e) {\n  return removeChildren(parent).appendChild(e)\n}\n\nexport function elt(tag, content, className, style) {\n  let e = document.createElement(tag)\n  if (className) e.className = className\n  if (style) e.style.cssText = style\n  if (typeof content == \"string\") e.appendChild(document.createTextNode(content))\n  else if (content) for (let i = 0; i < content.length; ++i) e.appendChild(content[i])\n  return e\n}\n// wrapper for elt, which removes the elt from the accessibility tree\nexport function eltP(tag, content, className, style) {\n  let e = elt(tag, content, className, style)\n  e.setAttribute(\"role\", \"presentation\")\n  return e\n}\n\nexport let range\nif (document.createRange) range = function(node, start, end, endNode) {\n  let r = document.createRange()\n  r.setEnd(endNode || node, end)\n  r.setStart(node, start)\n  return r\n}\nelse range = function(node, start, end) {\n  let r = document.body.createTextRange()\n  try { r.moveToElementText(node.parentNode) }\n  catch(e) { return r }\n  r.collapse(true)\n  r.moveEnd(\"character\", end)\n  r.moveStart(\"character\", start)\n  return r\n}\n\nexport function contains(parent, child) {\n  if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n    child = child.parentNode\n  if (parent.contains)\n    return parent.contains(child)\n  do {\n    if (child.nodeType == 11) child = child.host\n    if (child == parent) return true\n  } while (child = child.parentNode)\n}\n\nexport function activeElt() {\n  // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n  // IE < 10 will throw when accessed while the page is loading or in an iframe.\n  // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n  let activeElement\n  try {\n    activeElement = document.activeElement\n  } catch(e) {\n    activeElement = document.body || null\n  }\n  while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n    activeElement = activeElement.shadowRoot.activeElement\n  return activeElement\n}\n\nexport function addClass(node, cls) {\n  let current = node.className\n  if (!classTest(cls).test(current)) node.className += (current ? \" \" : \"\") + cls\n}\nexport function joinClasses(a, b) {\n  let as = a.split(\" \")\n  for (let i = 0; i < as.length; i++)\n    if (as[i] && !classTest(as[i]).test(b)) b += \" \" + as[i]\n  return b\n}\n\nexport let selectInput = function(node) { node.select() }\nif (ios) // Mobile Safari apparently has a bug where select() is broken.\n  selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length }\nelse if (ie) // Suppress mysterious IE10 errors\n  selectInput = function(node) { try { node.select() } catch(_e) {} }\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/util/event.js",
    "content": "import { mac } from \"./browser\"\nimport { indexOf } from \"./misc\"\n\n// EVENT HANDLING\n\n// Lightweight event framework. on/off also work on DOM nodes,\n// registering native DOM handlers.\n\nconst noHandlers = []\n\nexport let on = function(emitter, type, f) {\n  if (emitter.addEventListener) {\n    emitter.addEventListener(type, f, false)\n  } else if (emitter.attachEvent) {\n    emitter.attachEvent(\"on\" + type, f)\n  } else {\n    let map = emitter._handlers || (emitter._handlers = {})\n    map[type] = (map[type] || noHandlers).concat(f)\n  }\n}\n\nexport function getHandlers(emitter, type) {\n  return emitter._handlers && emitter._handlers[type] || noHandlers\n}\n\nexport function off(emitter, type, f) {\n  if (emitter.removeEventListener) {\n    emitter.removeEventListener(type, f, false)\n  } else if (emitter.detachEvent) {\n    emitter.detachEvent(\"on\" + type, f)\n  } else {\n    let map = emitter._handlers, arr = map && map[type]\n    if (arr) {\n      let index = indexOf(arr, f)\n      if (index > -1)\n        map[type] = arr.slice(0, index).concat(arr.slice(index + 1))\n    }\n  }\n}\n\nexport function signal(emitter, type /*, values...*/) {\n  let handlers = getHandlers(emitter, type)\n  if (!handlers.length) return\n  let args = Array.prototype.slice.call(arguments, 2)\n  for (let i = 0; i < handlers.length; ++i) handlers[i].apply(null, args)\n}\n\n// The DOM events that CodeMirror handles can be overridden by\n// registering a (non-DOM) handler on the editor for the event name,\n// and preventDefault-ing the event in that handler.\nexport function signalDOMEvent(cm, e, override) {\n  if (typeof e == \"string\")\n    e = {type: e, preventDefault: function() { this.defaultPrevented = true }}\n  signal(cm, override || e.type, cm, e)\n  return e_defaultPrevented(e) || e.codemirrorIgnore\n}\n\nexport function signalCursorActivity(cm) {\n  let arr = cm._handlers && cm._handlers.cursorActivity\n  if (!arr) return\n  let set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = [])\n  for (let i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1)\n    set.push(arr[i])\n}\n\nexport function hasHandler(emitter, type) {\n  return getHandlers(emitter, type).length > 0\n}\n\n// Add on and off methods to a constructor's prototype, to make\n// registering events on such objects more convenient.\nexport function eventMixin(ctor) {\n  ctor.prototype.on = function(type, f) {on(this, type, f)}\n  ctor.prototype.off = function(type, f) {off(this, type, f)}\n}\n\n// Due to the fact that we still support jurassic IE versions, some\n// compatibility wrappers are needed.\n\nexport function e_preventDefault(e) {\n  if (e.preventDefault) e.preventDefault()\n  else e.returnValue = false\n}\nexport function e_stopPropagation(e) {\n  if (e.stopPropagation) e.stopPropagation()\n  else e.cancelBubble = true\n}\nexport function e_defaultPrevented(e) {\n  return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n}\nexport function e_stop(e) {e_preventDefault(e); e_stopPropagation(e)}\n\nexport function e_target(e) {return e.target || e.srcElement}\nexport function e_button(e) {\n  let b = e.which\n  if (b == null) {\n    if (e.button & 1) b = 1\n    else if (e.button & 2) b = 3\n    else if (e.button & 4) b = 2\n  }\n  if (mac && e.ctrlKey && b == 1) b = 3\n  return b\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/util/feature_detection.js",
    "content": "import { elt, range, removeChildren, removeChildrenAndAdd } from \"./dom\"\nimport { ie, ie_version } from \"./browser\"\n\n// Detect drag-and-drop\nexport let dragAndDrop = function() {\n  // There is *some* kind of drag-and-drop support in IE6-8, but I\n  // couldn't get it to work yet.\n  if (ie && ie_version < 9) return false\n  let div = elt('div')\n  return \"draggable\" in div || \"dragDrop\" in div\n}()\n\nlet zwspSupported\nexport function zeroWidthElement(measure) {\n  if (zwspSupported == null) {\n    let test = elt(\"span\", \"\\u200b\")\n    removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]))\n    if (measure.firstChild.offsetHeight != 0)\n      zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8)\n  }\n  let node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n    elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\")\n  node.setAttribute(\"cm-text\", \"\")\n  return node\n}\n\n// Feature-detect IE's crummy client rect reporting for bidi text\nlet badBidiRects\nexport function hasBadBidiRects(measure) {\n  if (badBidiRects != null) return badBidiRects\n  let txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"))\n  let r0 = range(txt, 0, 1).getBoundingClientRect()\n  let r1 = range(txt, 1, 2).getBoundingClientRect()\n  removeChildren(measure)\n  if (!r0 || r0.left == r0.right) return false // Safari returns null in some cases (#2780)\n  return badBidiRects = (r1.right - r0.right < 3)\n}\n\n// See if \"\".split is the broken IE version, if so, provide an\n// alternative way to split lines.\nexport let splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? string => {\n  let pos = 0, result = [], l = string.length\n  while (pos <= l) {\n    let nl = string.indexOf(\"\\n\", pos)\n    if (nl == -1) nl = string.length\n    let line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl)\n    let rt = line.indexOf(\"\\r\")\n    if (rt != -1) {\n      result.push(line.slice(0, rt))\n      pos += rt + 1\n    } else {\n      result.push(line)\n      pos = nl + 1\n    }\n  }\n  return result\n} : string => string.split(/\\r\\n?|\\n/)\n\nexport let hasSelection = window.getSelection ? te => {\n  try { return te.selectionStart != te.selectionEnd }\n  catch(e) { return false }\n} : te => {\n  let range\n  try {range = te.ownerDocument.selection.createRange()}\n  catch(e) {}\n  if (!range || range.parentElement() != te) return false\n  return range.compareEndPoints(\"StartToEnd\", range) != 0\n}\n\nexport let hasCopyEvent = (() => {\n  let e = elt(\"div\")\n  if (\"oncopy\" in e) return true\n  e.setAttribute(\"oncopy\", \"return;\")\n  return typeof e.oncopy == \"function\"\n})()\n\nlet badZoomedRects = null\nexport function hasBadZoomedRects(measure) {\n  if (badZoomedRects != null) return badZoomedRects\n  let node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"))\n  let normal = node.getBoundingClientRect()\n  let fromRange = range(node, 0, 1).getBoundingClientRect()\n  return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/util/misc.js",
    "content": "export function bind(f) {\n  let args = Array.prototype.slice.call(arguments, 1)\n  return function(){return f.apply(null, args)}\n}\n\nexport function copyObj(obj, target, overwrite) {\n  if (!target) target = {}\n  for (let prop in obj)\n    if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n      target[prop] = obj[prop]\n  return target\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nexport function countColumn(string, end, tabSize, startIndex, startValue) {\n  if (end == null) {\n    end = string.search(/[^\\s\\u00a0]/)\n    if (end == -1) end = string.length\n  }\n  for (let i = startIndex || 0, n = startValue || 0;;) {\n    let nextTab = string.indexOf(\"\\t\", i)\n    if (nextTab < 0 || nextTab >= end)\n      return n + (end - i)\n    n += nextTab - i\n    n += tabSize - (n % tabSize)\n    i = nextTab + 1\n  }\n}\n\nexport class Delayed {\n  constructor() {this.id = null}\n  set(ms, f) {\n    clearTimeout(this.id)\n    this.id = setTimeout(f, ms)\n  }\n}\n\nexport function indexOf(array, elt) {\n  for (let i = 0; i < array.length; ++i)\n    if (array[i] == elt) return i\n  return -1\n}\n\n// Number of pixels added to scroller and sizer to hide scrollbar\nexport let scrollerGap = 30\n\n// Returned or thrown by various protocols to signal 'I'm not\n// handling this'.\nexport let Pass = {toString: function(){return \"CodeMirror.Pass\"}}\n\n// Reused option objects for setSelection & friends\nexport let sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"}\n\n// The inverse of countColumn -- find the offset that corresponds to\n// a particular column.\nexport function findColumn(string, goal, tabSize) {\n  for (let pos = 0, col = 0;;) {\n    let nextTab = string.indexOf(\"\\t\", pos)\n    if (nextTab == -1) nextTab = string.length\n    let skipped = nextTab - pos\n    if (nextTab == string.length || col + skipped >= goal)\n      return pos + Math.min(skipped, goal - col)\n    col += nextTab - pos\n    col += tabSize - (col % tabSize)\n    pos = nextTab + 1\n    if (col >= goal) return pos\n  }\n}\n\nlet spaceStrs = [\"\"]\nexport function spaceStr(n) {\n  while (spaceStrs.length <= n)\n    spaceStrs.push(lst(spaceStrs) + \" \")\n  return spaceStrs[n]\n}\n\nexport function lst(arr) { return arr[arr.length-1] }\n\nexport function map(array, f) {\n  let out = []\n  for (let i = 0; i < array.length; i++) out[i] = f(array[i], i)\n  return out\n}\n\nexport function insertSorted(array, value, score) {\n  let pos = 0, priority = score(value)\n  while (pos < array.length && score(array[pos]) <= priority) pos++\n  array.splice(pos, 0, value)\n}\n\nfunction nothing() {}\n\nexport function createObj(base, props) {\n  let inst\n  if (Object.create) {\n    inst = Object.create(base)\n  } else {\n    nothing.prototype = base\n    inst = new nothing()\n  }\n  if (props) copyObj(props, inst)\n  return inst\n}\n\nlet nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/\nexport function isWordCharBasic(ch) {\n  return /\\w/.test(ch) || ch > \"\\x80\" &&\n    (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n}\nexport function isWordChar(ch, helper) {\n  if (!helper) return isWordCharBasic(ch)\n  if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) return true\n  return helper.test(ch)\n}\n\nexport function isEmpty(obj) {\n  for (let n in obj) if (obj.hasOwnProperty(n) && obj[n]) return false\n  return true\n}\n\n// Extending unicode characters. A series of a non-extending char +\n// any number of extending chars is treated as a single unit as far\n// as editing and measuring is concerned. This is not fully correct,\n// since some scripts/fonts/browsers also treat other configurations\n// of code points as a group.\nlet extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/\nexport function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n// Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\nexport function skipExtendingChars(str, pos, dir) {\n  while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) pos += dir\n  return pos\n}\n\n// Returns the value from the range [`from`; `to`] that satisfies\n// `pred` and is closest to `from`. Assumes that at least `to` satisfies `pred`.\nexport function findFirst(pred, from, to) {\n  for (;;) {\n    if (Math.abs(from - to) <= 1) return pred(from) ? from : to\n    let mid = Math.floor((from + to) / 2)\n    if (pred(mid)) to = mid\n    else from = mid\n  }\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/lib/util/operation_group.js",
    "content": "import { getHandlers } from \"./event\"\n\nlet operationGroup = null\n\nexport function pushOperation(op) {\n  if (operationGroup) {\n    operationGroup.ops.push(op)\n  } else {\n    op.ownsGroup = operationGroup = {\n      ops: [op],\n      delayedCallbacks: []\n    }\n  }\n}\n\nfunction fireCallbacksForOps(group) {\n  // Calls delayed callbacks and cursorActivity handlers until no\n  // new ones appear\n  let callbacks = group.delayedCallbacks, i = 0\n  do {\n    for (; i < callbacks.length; i++)\n      callbacks[i].call(null)\n    for (let j = 0; j < group.ops.length; j++) {\n      let op = group.ops[j]\n      if (op.cursorActivityHandlers)\n        while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n          op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm)\n    }\n  } while (i < callbacks.length)\n}\n\nexport function finishOperation(op, endCb) {\n  let group = op.ownsGroup\n  if (!group) return\n\n  try { fireCallbacksForOps(group) }\n  finally {\n    operationGroup = null\n    endCb(group)\n  }\n}\n\nlet orphanDelayedCallbacks = null\n\n// Often, we want to signal events at a point where we are in the\n// middle of some work, but don't want the handler to start calling\n// other methods on the editor, which might be in an inconsistent\n// state or simply not expect any other events to happen.\n// signalLater looks whether there are any handlers, and schedules\n// them to be executed when the last operation ends, or, if no\n// operation is active, when a timeout fires.\nexport function signalLater(emitter, type /*, values...*/) {\n  let arr = getHandlers(emitter, type)\n  if (!arr.length) return\n  let args = Array.prototype.slice.call(arguments, 2), list\n  if (operationGroup) {\n    list = operationGroup.delayedCallbacks\n  } else if (orphanDelayedCallbacks) {\n    list = orphanDelayedCallbacks\n  } else {\n    list = orphanDelayedCallbacks = []\n    setTimeout(fireOrphanDelayed, 0)\n  }\n  for (let i = 0; i < arr.length; ++i)\n    list.push(() => arr[i].apply(null, args))\n}\n\nfunction fireOrphanDelayed() {\n  let delayed = orphanDelayedCallbacks\n  orphanDelayedCallbacks = null\n  for (let i = 0; i < delayed.length; ++i) delayed[i]()\n}\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/mode/javascript.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\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  }\n})(function(CodeMirror) {\n\"use strict\";\n\nfunction expressionAllowed(stream, state, backUp) {\n  return /^(?:operator|sof|keyword c|case|new|export|default|[\\[{}\\(,;:]|=>)$/.test(state.lastType) ||\n    (state.lastType == \"quasi\" && /\\{\\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))\n}\n\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n  var indentUnit = config.indentUnit;\n  var statementIndent = parserConfig.statementIndent;\n  var jsonldMode = parserConfig.jsonld;\n  var jsonMode = parserConfig.json || jsonldMode;\n  var isTS = parserConfig.typescript;\n  var wordRE = parserConfig.wordCharacters || /[\\w$\\xa1-\\uffff]/;\n\n  // Tokenizer\n\n  var keywords = function(){\n    function kw(type) {return {type: type, style: \"keyword\"};}\n    var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\");\n    var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n    var jsKeywords = {\n      \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n      \"return\": C, \"break\": C, \"continue\": C, \"new\": kw(\"new\"), \"delete\": C, \"throw\": C, \"debugger\": C,\n      \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n      \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n      \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n      \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n      \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n      \"this\": kw(\"this\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n      \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C,\n      \"await\": C, \"async\": kw(\"async\")\n    };\n\n    // Extend the 'normal' keywords with the TypeScript language extensions\n    if (isTS) {\n      var type = {type: \"variable\", style: \"variable-3\"};\n      var tsKeywords = {\n        // object-like things\n        \"interface\": kw(\"class\"),\n        \"implements\": C,\n        \"namespace\": C,\n        \"module\": kw(\"module\"),\n        \"enum\": kw(\"module\"),\n\n        // scope modifiers\n        \"public\": kw(\"modifier\"),\n        \"private\": kw(\"modifier\"),\n        \"protected\": kw(\"modifier\"),\n        \"abstract\": kw(\"modifier\"),\n\n        // operators\n        \"as\": operator,\n\n        // types\n        \"string\": type, \"number\": type, \"boolean\": type, \"any\": type\n      };\n\n      for (var attr in tsKeywords) {\n        jsKeywords[attr] = tsKeywords[attr];\n      }\n    }\n\n    return jsKeywords;\n  }();\n\n  var isOperatorChar = /[+\\-*&%=<>!?|~^@]/;\n  var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n  function readRegexp(stream) {\n    var escaped = false, next, inSet = false;\n    while ((next = stream.next()) != null) {\n      if (!escaped) {\n        if (next == \"/\" && !inSet) return;\n        if (next == \"[\") inSet = true;\n        else if (inSet && next == \"]\") inSet = false;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n  }\n\n  // Used as scratch variables to communicate multiple values without\n  // consing up tons of objects.\n  var type, content;\n  function ret(tp, style, cont) {\n    type = tp; content = cont;\n    return style;\n  }\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n    if (ch == '\"' || ch == \"'\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    } else if (ch == \".\" && stream.match(/^\\d+(?:[eE][+\\-]?\\d+)?/)) {\n      return ret(\"number\", \"number\");\n    } else if (ch == \".\" && stream.match(\"..\")) {\n      return ret(\"spread\", \"meta\");\n    } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n      return ret(ch);\n    } else if (ch == \"=\" && stream.eat(\">\")) {\n      return ret(\"=>\", \"operator\");\n    } else if (ch == \"0\" && stream.eat(/x/i)) {\n      stream.eatWhile(/[\\da-f]/i);\n      return ret(\"number\", \"number\");\n    } else if (ch == \"0\" && stream.eat(/o/i)) {\n      stream.eatWhile(/[0-7]/i);\n      return ret(\"number\", \"number\");\n    } else if (ch == \"0\" && stream.eat(/b/i)) {\n      stream.eatWhile(/[01]/i);\n      return ret(\"number\", \"number\");\n    } else if (/\\d/.test(ch)) {\n      stream.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/);\n      return ret(\"number\", \"number\");\n    } else if (ch == \"/\") {\n      if (stream.eat(\"*\")) {\n        state.tokenize = tokenComment;\n        return tokenComment(stream, state);\n      } else if (stream.eat(\"/\")) {\n        stream.skipToEnd();\n        return ret(\"comment\", \"comment\");\n      } else if (expressionAllowed(stream, state, 1)) {\n        readRegexp(stream);\n        stream.match(/^\\b(([gimyu])(?![gimyu]*\\2))+\\b/);\n        return ret(\"regexp\", \"string-2\");\n      } else {\n        stream.eatWhile(isOperatorChar);\n        return ret(\"operator\", \"operator\", stream.current());\n      }\n    } else if (ch == \"`\") {\n      state.tokenize = tokenQuasi;\n      return tokenQuasi(stream, state);\n    } else if (ch == \"#\") {\n      stream.skipToEnd();\n      return ret(\"error\", \"error\");\n    } else if (isOperatorChar.test(ch)) {\n      if (ch != \">\" || !state.lexical || state.lexical.type != \">\")\n        stream.eatWhile(isOperatorChar);\n      return ret(\"operator\", \"operator\", stream.current());\n    } else if (wordRE.test(ch)) {\n      stream.eatWhile(wordRE);\n      var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];\n      return (known && state.lastType != \".\") ? ret(known.type, known.style, word) :\n                     ret(\"variable\", \"variable\", word);\n    }\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, next;\n      if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n        state.tokenize = tokenBase;\n        return ret(\"jsonld-keyword\", \"meta\");\n      }\n      while ((next = stream.next()) != null) {\n        if (next == quote && !escaped) break;\n        escaped = !escaped && next == \"\\\\\";\n      }\n      if (!escaped) state.tokenize = tokenBase;\n      return ret(\"string\", \"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 = tokenBase;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return ret(\"comment\", \"comment\");\n  }\n\n  function tokenQuasi(stream, state) {\n    var escaped = false, next;\n    while ((next = stream.next()) != null) {\n      if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    return ret(\"quasi\", \"string-2\", stream.current());\n  }\n\n  var brackets = \"([{}])\";\n  // This is a crude lookahead trick to try and notice that we're\n  // parsing the argument patterns for a fat-arrow function before we\n  // actually hit the arrow token. It only works if the arrow is on\n  // the same line as the arguments and there's no strange noise\n  // (comments) in between. Fallback is to only notice when we hit the\n  // arrow, and not declare the arguments as locals for the arrow\n  // body.\n  function findFatArrow(stream, state) {\n    if (state.fatArrowAt) state.fatArrowAt = null;\n    var arrow = stream.string.indexOf(\"=>\", stream.start);\n    if (arrow < 0) return;\n\n    if (isTS) { // Try to skip TypeScript return type declarations after the arguments\n      var m = /:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(stream.string.slice(stream.start, arrow))\n      if (m) arrow = m.index\n    }\n\n    var depth = 0, sawSomething = false;\n    for (var pos = arrow - 1; pos >= 0; --pos) {\n      var ch = stream.string.charAt(pos);\n      var bracket = brackets.indexOf(ch);\n      if (bracket >= 0 && bracket < 3) {\n        if (!depth) { ++pos; break; }\n        if (--depth == 0) { if (ch == \"(\") sawSomething = true; break; }\n      } else if (bracket >= 3 && bracket < 6) {\n        ++depth;\n      } else if (wordRE.test(ch)) {\n        sawSomething = true;\n      } else if (/[\"'\\/]/.test(ch)) {\n        return;\n      } else if (sawSomething && !depth) {\n        ++pos;\n        break;\n      }\n    }\n    if (sawSomething && !depth) state.fatArrowAt = pos;\n  }\n\n  // Parser\n\n  var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true, \"this\": true, \"jsonld-keyword\": true};\n\n  function JSLexical(indented, column, type, align, prev, info) {\n    this.indented = indented;\n    this.column = column;\n    this.type = type;\n    this.prev = prev;\n    this.info = info;\n    if (align != null) this.align = align;\n  }\n\n  function inScope(state, varname) {\n    for (var v = state.localVars; v; v = v.next)\n      if (v.name == varname) return true;\n    for (var cx = state.context; cx; cx = cx.prev) {\n      for (var v = cx.vars; v; v = v.next)\n        if (v.name == varname) return true;\n    }\n  }\n\n  function parseJS(state, style, type, content, stream) {\n    var cc = state.cc;\n    // Communicate our context to the combinators.\n    // (Less wasteful than consing up a hundred closures on every call.)\n    cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;\n\n    if (!state.lexical.hasOwnProperty(\"align\"))\n      state.lexical.align = true;\n\n    while(true) {\n      var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n      if (combinator(type, content)) {\n        while(cc.length && cc[cc.length - 1].lex)\n          cc.pop()();\n        if (cx.marked) return cx.marked;\n        if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n        return style;\n      }\n    }\n  }\n\n  // Combinator utils\n\n  var cx = {state: null, column: null, marked: null, cc: null};\n  function pass() {\n    for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n  }\n  function cont() {\n    pass.apply(null, arguments);\n    return true;\n  }\n  function register(varname) {\n    function inList(list) {\n      for (var v = list; v; v = v.next)\n        if (v.name == varname) return true;\n      return false;\n    }\n    var state = cx.state;\n    cx.marked = \"def\";\n    if (state.context) {\n      if (inList(state.localVars)) return;\n      state.localVars = {name: varname, next: state.localVars};\n    } else {\n      if (inList(state.globalVars)) return;\n      if (parserConfig.globalVars)\n        state.globalVars = {name: varname, next: state.globalVars};\n    }\n  }\n\n  // Combinators\n\n  var defaultVars = {name: \"this\", next: {name: \"arguments\"}};\n  function pushcontext() {\n    cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};\n    cx.state.localVars = defaultVars;\n  }\n  function popcontext() {\n    cx.state.localVars = cx.state.context.vars;\n    cx.state.context = cx.state.context.prev;\n  }\n  function pushlex(type, info) {\n    var result = function() {\n      var state = cx.state, indent = state.indented;\n      if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n      else for (var outer = state.lexical; outer && outer.type == \")\" && outer.align; outer = outer.prev)\n        indent = outer.indented;\n      state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n    };\n    result.lex = true;\n    return result;\n  }\n  function poplex() {\n    var state = cx.state;\n    if (state.lexical.prev) {\n      if (state.lexical.type == \")\")\n        state.indented = state.lexical.indented;\n      state.lexical = state.lexical.prev;\n    }\n  }\n  poplex.lex = true;\n\n  function expect(wanted) {\n    function exp(type) {\n      if (type == wanted) return cont();\n      else if (wanted == \";\") return pass();\n      else return cont(exp);\n    };\n    return exp;\n  }\n\n  function statement(type, value) {\n    if (type == \"var\") return cont(pushlex(\"vardef\", value.length), vardef, expect(\";\"), poplex);\n    if (type == \"keyword a\") return cont(pushlex(\"form\"), parenExpr, statement, poplex);\n    if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n    if (type == \"{\") return cont(pushlex(\"}\"), block, poplex);\n    if (type == \";\") return cont();\n    if (type == \"if\") {\n      if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex)\n        cx.state.cc.pop()();\n      return cont(pushlex(\"form\"), parenExpr, statement, poplex, maybeelse);\n    }\n    if (type == \"function\") return cont(functiondef);\n    if (type == \"for\") return cont(pushlex(\"form\"), forspec, statement, poplex);\n    if (type == \"variable\") {\n      if (isTS && value == \"type\") {\n        cx.marked = \"keyword\"\n        return cont(typeexpr, expect(\"operator\"), typeexpr, expect(\";\"));\n      } else {\n        return cont(pushlex(\"stat\"), maybelabel);\n      }\n    }\n    if (type == \"switch\") return cont(pushlex(\"form\"), parenExpr, pushlex(\"}\", \"switch\"), expect(\"{\"),\n                                      block, poplex, poplex);\n    if (type == \"case\") return cont(expression, expect(\":\"));\n    if (type == \"default\") return cont(expect(\":\"));\n    if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, expect(\"(\"), funarg, expect(\")\"),\n                                     statement, poplex, popcontext);\n    if (type == \"class\") return cont(pushlex(\"form\"), className, poplex);\n    if (type == \"export\") return cont(pushlex(\"stat\"), afterExport, poplex);\n    if (type == \"import\") return cont(pushlex(\"stat\"), afterImport, poplex);\n    if (type == \"module\") return cont(pushlex(\"form\"), pattern, pushlex(\"}\"), expect(\"{\"), block, poplex, poplex)\n    if (type == \"async\") return cont(statement)\n    if (value == \"@\") return cont(expression, statement)\n    return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n  }\n  function expression(type) {\n    return expressionInner(type, false);\n  }\n  function expressionNoComma(type) {\n    return expressionInner(type, true);\n  }\n  function parenExpr(type) {\n    if (type != \"(\") return pass()\n    return cont(pushlex(\")\"), expression, expect(\")\"), poplex)\n  }\n  function expressionInner(type, noComma) {\n    if (cx.state.fatArrowAt == cx.stream.start) {\n      var body = noComma ? arrowBodyNoComma : arrowBody;\n      if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(pattern, \")\"), poplex, expect(\"=>\"), body, popcontext);\n      else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n    }\n\n    var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n    if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n    if (type == \"function\") return cont(functiondef, maybeop);\n    if (type == \"class\") return cont(pushlex(\"form\"), classExpression, poplex);\n    if (type == \"keyword c\" || type == \"async\") return cont(noComma ? maybeexpressionNoComma : maybeexpression);\n    if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex, maybeop);\n    if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n    if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n    if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n    if (type == \"quasi\") return pass(quasi, maybeop);\n    if (type == \"new\") return cont(maybeTarget(noComma));\n    return cont();\n  }\n  function maybeexpression(type) {\n    if (type.match(/[;\\}\\)\\],]/)) return pass();\n    return pass(expression);\n  }\n  function maybeexpressionNoComma(type) {\n    if (type.match(/[;\\}\\)\\],]/)) return pass();\n    return pass(expressionNoComma);\n  }\n\n  function maybeoperatorComma(type, value) {\n    if (type == \",\") return cont(expression);\n    return maybeoperatorNoComma(type, value, false);\n  }\n  function maybeoperatorNoComma(type, value, noComma) {\n    var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n    var expr = noComma == false ? expression : expressionNoComma;\n    if (type == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n    if (type == \"operator\") {\n      if (/\\+\\+|--/.test(value)) return cont(me);\n      if (value == \"?\") return cont(expression, expect(\":\"), expr);\n      return cont(expr);\n    }\n    if (type == \"quasi\") { return pass(quasi, me); }\n    if (type == \";\") return;\n    if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n    if (type == \".\") return cont(property, me);\n    if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n  }\n  function quasi(type, value) {\n    if (type != \"quasi\") return pass();\n    if (value.slice(value.length - 2) != \"${\") return cont(quasi);\n    return cont(expression, continueQuasi);\n  }\n  function continueQuasi(type) {\n    if (type == \"}\") {\n      cx.marked = \"string-2\";\n      cx.state.tokenize = tokenQuasi;\n      return cont(quasi);\n    }\n  }\n  function arrowBody(type) {\n    findFatArrow(cx.stream, cx.state);\n    return pass(type == \"{\" ? statement : expression);\n  }\n  function arrowBodyNoComma(type) {\n    findFatArrow(cx.stream, cx.state);\n    return pass(type == \"{\" ? statement : expressionNoComma);\n  }\n  function maybeTarget(noComma) {\n    return function(type) {\n      if (type == \".\") return cont(noComma ? targetNoComma : target);\n      else return pass(noComma ? expressionNoComma : expression);\n    };\n  }\n  function target(_, value) {\n    if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorComma); }\n  }\n  function targetNoComma(_, value) {\n    if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorNoComma); }\n  }\n  function maybelabel(type) {\n    if (type == \":\") return cont(poplex, statement);\n    return pass(maybeoperatorComma, expect(\";\"), poplex);\n  }\n  function property(type) {\n    if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n  }\n  function objprop(type, value) {\n    if (type == \"async\") {\n      cx.marked = \"property\";\n      return cont(objprop);\n    } else if (type == \"variable\" || cx.style == \"keyword\") {\n      cx.marked = \"property\";\n      if (value == \"get\" || value == \"set\") return cont(getterSetter);\n      return cont(afterprop);\n    } else if (type == \"number\" || type == \"string\") {\n      cx.marked = jsonldMode ? \"property\" : (cx.style + \" property\");\n      return cont(afterprop);\n    } else if (type == \"jsonld-keyword\") {\n      return cont(afterprop);\n    } else if (type == \"modifier\") {\n      return cont(objprop)\n    } else if (type == \"[\") {\n      return cont(expression, expect(\"]\"), afterprop);\n    } else if (type == \"spread\") {\n      return cont(expression);\n    } else if (type == \":\") {\n      return pass(afterprop)\n    }\n  }\n  function getterSetter(type) {\n    if (type != \"variable\") return pass(afterprop);\n    cx.marked = \"property\";\n    return cont(functiondef);\n  }\n  function afterprop(type) {\n    if (type == \":\") return cont(expressionNoComma);\n    if (type == \"(\") return pass(functiondef);\n  }\n  function commasep(what, end, sep) {\n    function proceed(type, value) {\n      if (sep ? sep.indexOf(type) > -1 : type == \",\") {\n        var lex = cx.state.lexical;\n        if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n        return cont(function(type, value) {\n          if (type == end || value == end) return pass()\n          return pass(what)\n        }, proceed);\n      }\n      if (type == end || value == end) return cont();\n      return cont(expect(end));\n    }\n    return function(type, value) {\n      if (type == end || value == end) return cont();\n      return pass(what, proceed);\n    };\n  }\n  function contCommasep(what, end, info) {\n    for (var i = 3; i < arguments.length; i++)\n      cx.cc.push(arguments[i]);\n    return cont(pushlex(end, info), commasep(what, end), poplex);\n  }\n  function block(type) {\n    if (type == \"}\") return cont();\n    return pass(statement, block);\n  }\n  function maybetype(type, value) {\n    if (isTS) {\n      if (type == \":\") return cont(typeexpr);\n      if (value == \"?\") return cont(maybetype);\n    }\n  }\n  function typeexpr(type) {\n    if (type == \"variable\") {cx.marked = \"variable-3\"; return cont(afterType);}\n    if (type == \"string\" || type == \"number\" || type == \"atom\") return cont(afterType);\n    if (type == \"{\") return cont(pushlex(\"}\"), commasep(typeprop, \"}\", \",;\"), poplex)\n    if (type == \"(\") return cont(commasep(typearg, \")\"), maybeReturnType)\n  }\n  function maybeReturnType(type) {\n    if (type == \"=>\") return cont(typeexpr)\n  }\n  function typeprop(type, value) {\n    if (type == \"variable\" || cx.style == \"keyword\") {\n      cx.marked = \"property\"\n      return cont(typeprop)\n    } else if (value == \"?\") {\n      return cont(typeprop)\n    } else if (type == \":\") {\n      return cont(typeexpr)\n    }\n  }\n  function typearg(type) {\n    if (type == \"variable\") return cont(typearg)\n    else if (type == \":\") return cont(typeexpr)\n  }\n  function afterType(type, value) {\n    if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n    if (value == \"|\" || type == \".\") return cont(typeexpr)\n    if (type == \"[\") return cont(expect(\"]\"), afterType)\n  }\n  function vardef() {\n    return pass(pattern, maybetype, maybeAssign, vardefCont);\n  }\n  function pattern(type, value) {\n    if (type == \"modifier\") return cont(pattern)\n    if (type == \"variable\") { register(value); return cont(); }\n    if (type == \"spread\") return cont(pattern);\n    if (type == \"[\") return contCommasep(pattern, \"]\");\n    if (type == \"{\") return contCommasep(proppattern, \"}\");\n  }\n  function proppattern(type, value) {\n    if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n      register(value);\n      return cont(maybeAssign);\n    }\n    if (type == \"variable\") cx.marked = \"property\";\n    if (type == \"spread\") return cont(pattern);\n    if (type == \"}\") return pass();\n    return cont(expect(\":\"), pattern, maybeAssign);\n  }\n  function maybeAssign(_type, value) {\n    if (value == \"=\") return cont(expressionNoComma);\n  }\n  function vardefCont(type) {\n    if (type == \",\") return cont(vardef);\n  }\n  function maybeelse(type, value) {\n    if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\", \"else\"), statement, poplex);\n  }\n  function forspec(type) {\n    if (type == \"(\") return cont(pushlex(\")\"), forspec1, expect(\")\"), poplex);\n  }\n  function forspec1(type) {\n    if (type == \"var\") return cont(vardef, expect(\";\"), forspec2);\n    if (type == \";\") return cont(forspec2);\n    if (type == \"variable\") return cont(formaybeinof);\n    return pass(expression, expect(\";\"), forspec2);\n  }\n  function formaybeinof(_type, value) {\n    if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n    return cont(maybeoperatorComma, forspec2);\n  }\n  function forspec2(type, value) {\n    if (type == \";\") return cont(forspec3);\n    if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n    return pass(expression, expect(\";\"), forspec3);\n  }\n  function forspec3(type) {\n    if (type != \")\") cont(expression);\n  }\n  function functiondef(type, value) {\n    if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n    if (type == \"variable\") {register(value); return cont(functiondef);}\n    if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, maybetype, statement, popcontext);\n    if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, functiondef)\n  }\n  function funarg(type) {\n    if (type == \"spread\") return cont(funarg);\n    return pass(pattern, maybetype, maybeAssign);\n  }\n  function classExpression(type, value) {\n    // Class expressions may have an optional name.\n    if (type == \"variable\") return className(type, value);\n    return classNameAfter(type, value);\n  }\n  function className(type, value) {\n    if (type == \"variable\") {register(value); return cont(classNameAfter);}\n  }\n  function classNameAfter(type, value) {\n    if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, classNameAfter)\n    if (value == \"extends\" || value == \"implements\" || (isTS && type == \",\"))\n      return cont(isTS ? typeexpr : expression, classNameAfter);\n    if (type == \"{\") return cont(pushlex(\"}\"), classBody, poplex);\n  }\n  function classBody(type, value) {\n    if (type == \"variable\" || cx.style == \"keyword\") {\n      if ((value == \"async\" || value == \"static\" || value == \"get\" || value == \"set\" ||\n           (isTS && (value == \"public\" || value == \"private\" || value == \"protected\" || value == \"readonly\" || value == \"abstract\"))) &&\n          cx.stream.match(/^\\s+[\\w$\\xa1-\\uffff]/, false)) {\n        cx.marked = \"keyword\";\n        return cont(classBody);\n      }\n      cx.marked = \"property\";\n      return cont(isTS ? classfield : functiondef, classBody);\n    }\n    if (type == \"[\")\n      return cont(expression, expect(\"]\"), isTS ? classfield : functiondef, classBody)\n    if (value == \"*\") {\n      cx.marked = \"keyword\";\n      return cont(classBody);\n    }\n    if (type == \";\") return cont(classBody);\n    if (type == \"}\") return cont();\n    if (value == \"@\") return cont(expression, classBody)\n  }\n  function classfield(type, value) {\n    if (value == \"?\") return cont(classfield)\n    if (type == \":\") return cont(typeexpr, maybeAssign)\n    if (value == \"=\") return cont(expressionNoComma)\n    return pass(functiondef)\n  }\n  function afterExport(type, value) {\n    if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n    if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n    if (type == \"{\") return cont(commasep(exportField, \"}\"), maybeFrom, expect(\";\"));\n    return pass(statement);\n  }\n  function exportField(type, value) {\n    if (value == \"as\") { cx.marked = \"keyword\"; return cont(expect(\"variable\")); }\n    if (type == \"variable\") return pass(expressionNoComma, exportField);\n  }\n  function afterImport(type) {\n    if (type == \"string\") return cont();\n    return pass(importSpec, maybeMoreImports, maybeFrom);\n  }\n  function importSpec(type, value) {\n    if (type == \"{\") return contCommasep(importSpec, \"}\");\n    if (type == \"variable\") register(value);\n    if (value == \"*\") cx.marked = \"keyword\";\n    return cont(maybeAs);\n  }\n  function maybeMoreImports(type) {\n    if (type == \",\") return cont(importSpec, maybeMoreImports)\n  }\n  function maybeAs(_type, value) {\n    if (value == \"as\") { cx.marked = \"keyword\"; return cont(importSpec); }\n  }\n  function maybeFrom(_type, value) {\n    if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n  }\n  function arrayLiteral(type) {\n    if (type == \"]\") return cont();\n    return pass(commasep(expressionNoComma, \"]\"));\n  }\n\n  function isContinuedStatement(state, textAfter) {\n    return state.lastType == \"operator\" || state.lastType == \",\" ||\n      isOperatorChar.test(textAfter.charAt(0)) ||\n      /[,.]/.test(textAfter.charAt(0));\n  }\n\n  // Interface\n\n  return {\n    startState: function(basecolumn) {\n      var state = {\n        tokenize: tokenBase,\n        lastType: \"sof\",\n        cc: [],\n        lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n        localVars: parserConfig.localVars,\n        context: parserConfig.localVars && {vars: parserConfig.localVars},\n        indented: basecolumn || 0\n      };\n      if (parserConfig.globalVars && typeof parserConfig.globalVars == \"object\")\n        state.globalVars = parserConfig.globalVars;\n      return state;\n    },\n\n    token: function(stream, state) {\n      if (stream.sol()) {\n        if (!state.lexical.hasOwnProperty(\"align\"))\n          state.lexical.align = false;\n        state.indented = stream.indentation();\n        findFatArrow(stream, state);\n      }\n      if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n      var style = state.tokenize(stream, state);\n      if (type == \"comment\") return style;\n      state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n      return parseJS(state, style, type, content, stream);\n    },\n\n    indent: function(state, textAfter) {\n      if (state.tokenize == tokenComment) return CodeMirror.Pass;\n      if (state.tokenize != tokenBase) return 0;\n      var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top\n      // Kludge to prevent 'maybelse' from blocking lexical scope pops\n      if (!/^\\s*else\\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {\n        var c = state.cc[i];\n        if (c == poplex) lexical = lexical.prev;\n        else if (c != maybeelse) break;\n      }\n      while ((lexical.type == \"stat\" || lexical.type == \"form\") &&\n             (firstChar == \"}\" || ((top = state.cc[state.cc.length - 1]) &&\n                                   (top == maybeoperatorComma || top == maybeoperatorNoComma) &&\n                                   !/^[,\\.=+\\-*:?[\\(]/.test(textAfter))))\n        lexical = lexical.prev;\n      if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n        lexical = lexical.prev;\n      var type = lexical.type, closing = firstChar == type;\n\n      if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info + 1 : 0);\n      else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n      else if (type == \"form\") return lexical.indented + indentUnit;\n      else if (type == \"stat\")\n        return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);\n      else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n        return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n      else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n      else return lexical.indented + (closing ? 0 : indentUnit);\n    },\n\n    electricInput: /^\\s*(?:case .*?:|default:|\\{|\\})$/,\n    blockCommentStart: jsonMode ? null : \"/*\",\n    blockCommentEnd: jsonMode ? null : \"*/\",\n    lineComment: jsonMode ? null : \"//\",\n    fold: \"brace\",\n    closeBrackets: \"()[]{}''\\\"\\\"``\",\n\n    helperType: jsonMode ? \"json\" : \"javascript\",\n    jsonldMode: jsonldMode,\n    jsonMode: jsonMode,\n\n    expressionAllowed: expressionAllowed,\n    skipExpression: function(state) {\n      var top = state.cc[state.cc.length - 1]\n      if (top == expression || top == expressionNoComma) state.cc.pop()\n    }\n  };\n});\n\nCodeMirror.registerHelper(\"wordChars\", \"javascript\", /[\\w$]/);\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/x-javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/x-json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/ld+json\", {name: \"javascript\", jsonld: true});\nCodeMirror.defineMIME(\"text/typescript\", { name: \"javascript\", typescript: true });\nCodeMirror.defineMIME(\"application/typescript\", { name: \"javascript\", typescript: true });\n\n});\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/theme/blackboard.css",
    "content": "/* Port of TextMate's Blackboard theme */\n\n.cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; }\n.cm-s-blackboard div.CodeMirror-selected { background: #253B76; }\n.cm-s-blackboard .CodeMirror-line::selection, .cm-s-blackboard .CodeMirror-line > span::selection, .cm-s-blackboard .CodeMirror-line > span > span::selection { background: rgba(37, 59, 118, .99); }\n.cm-s-blackboard .CodeMirror-line::-moz-selection, .cm-s-blackboard .CodeMirror-line > span::-moz-selection, .cm-s-blackboard .CodeMirror-line > span > span::-moz-selection { background: rgba(37, 59, 118, .99); }\n.cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; }\n.cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; }\n.cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; }\n.cm-s-blackboard .CodeMirror-linenumber { color: #888; }\n.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7; }\n\n.cm-s-blackboard .cm-keyword { color: #FBDE2D; }\n.cm-s-blackboard .cm-atom { color: #D8FA3C; }\n.cm-s-blackboard .cm-number { color: #D8FA3C; }\n.cm-s-blackboard .cm-def { color: #8DA6CE; }\n.cm-s-blackboard .cm-variable { color: #FF6400; }\n.cm-s-blackboard .cm-operator { color: #FBDE2D; }\n.cm-s-blackboard .cm-comment { color: #AEAEAE; }\n.cm-s-blackboard .cm-string { color: #61CE3C; }\n.cm-s-blackboard .cm-string-2 { color: #61CE3C; }\n.cm-s-blackboard .cm-meta { color: #D8FA3C; }\n.cm-s-blackboard .cm-builtin { color: #8DA6CE; }\n.cm-s-blackboard .cm-tag { color: #8DA6CE; }\n.cm-s-blackboard .cm-attribute { color: #8DA6CE; }\n.cm-s-blackboard .cm-header { color: #FF6400; }\n.cm-s-blackboard .cm-hr { color: #AEAEAE; }\n.cm-s-blackboard .cm-link { color: #8DA6CE; }\n.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; }\n\n.cm-s-blackboard .CodeMirror-activeline-background { background: #3C3636; }\n.cm-s-blackboard .CodeMirror-matchingbracket { outline:1px solid grey;color:white !important; }\n"
  },
  {
    "path": "front-vue/src/assets/CodeMirror/theme/erlang-dark.css",
    "content": ".cm-s-erlang-dark.CodeMirror { background: #002240; color: white; }\n.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539; }\n.cm-s-erlang-dark .CodeMirror-line::selection, .cm-s-erlang-dark .CodeMirror-line > span::selection, .cm-s-erlang-dark .CodeMirror-line > span > span::selection { background: rgba(179, 101, 57, .99); }\n.cm-s-erlang-dark .CodeMirror-line::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span::-moz-selection, .cm-s-erlang-dark .CodeMirror-line > span > span::-moz-selection { background: rgba(179, 101, 57, .99); }\n.cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }\n.cm-s-erlang-dark .CodeMirror-guttermarker { color: white; }\n.cm-s-erlang-dark .CodeMirror-guttermarker-subtle { color: #d0d0d0; }\n.cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; }\n.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white; }\n\n.cm-s-erlang-dark span.cm-quote      { color: #ccc; }\n.cm-s-erlang-dark span.cm-atom       { color: #f133f1; }\n.cm-s-erlang-dark span.cm-attribute  { color: #ff80e1; }\n.cm-s-erlang-dark span.cm-bracket    { color: #ff9d00; }\n.cm-s-erlang-dark span.cm-builtin    { color: #eaa; }\n.cm-s-erlang-dark span.cm-comment    { color: #77f; }\n.cm-s-erlang-dark span.cm-def        { color: #e7a; }\n.cm-s-erlang-dark span.cm-keyword    { color: #ffee80; }\n.cm-s-erlang-dark span.cm-meta       { color: #50fefe; }\n.cm-s-erlang-dark span.cm-number     { color: #ffd0d0; }\n.cm-s-erlang-dark span.cm-operator   { color: #d55; }\n.cm-s-erlang-dark span.cm-property   { color: #ccc; }\n.cm-s-erlang-dark span.cm-qualifier  { color: #ccc; }\n.cm-s-erlang-dark span.cm-special    { color: #ffbbbb; }\n.cm-s-erlang-dark span.cm-string     { color: #3ad900; }\n.cm-s-erlang-dark span.cm-string-2   { color: #ccc; }\n.cm-s-erlang-dark span.cm-tag        { color: #9effff; }\n.cm-s-erlang-dark span.cm-variable   { color: #50fe50; }\n.cm-s-erlang-dark span.cm-variable-2 { color: #e0e; }\n.cm-s-erlang-dark span.cm-variable-3 { color: #ccc; }\n.cm-s-erlang-dark span.cm-error      { color: #9d1e15; }\n\n.cm-s-erlang-dark .CodeMirror-activeline-background { background: #013461; }\n.cm-s-erlang-dark .CodeMirror-matchingbracket { outline:1px solid grey; color:white !important; }\n"
  },
  {
    "path": "front-vue/src/assets/style/normalize.css",
    "content": "/*! normalize.css v6.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in\n *    IE on Windows Phone and in iOS.\n */\n\nhtml {\n  line-height: 1.15; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n  display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\n\nfigcaption,\nfigure,\nmain { /* 1 */\n  display: block;\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n  box-sizing: content-box; /* 1 */\n  height: 0; /* 1 */\n  overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n  background-color: transparent; /* 1 */\n  -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n  border-bottom: none; /* 1 */\n  text-decoration: underline; /* 2 */\n  text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n  font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\nvideo {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n  border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n  overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n  text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n *    controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n  box-sizing: border-box; /* 1 */\n  color: inherit; /* 2 */\n  display: table; /* 1 */\n  max-width: 100%; /* 1 */\n  padding: 0; /* 3 */\n  white-space: normal; /* 1 */\n}\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\n\ndetails, /* 1 */\nmenu {\n  display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n  display: list-item;\n}\n\n/* Scripting\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\ncanvas {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in IE.\n */\n\ntemplate {\n  display: none;\n}\n\n/* Hidden\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 10-.\n */\n\n[hidden] {\n  display: none;\n}\n"
  },
  {
    "path": "front-vue/src/components/home.vue",
    "content": "<template>\n  <div class=\"container-home\" :class=\"{noAside:!isShowAside}\">\n    <aside>\n      <button class=\"btn-toggle\"\n              @click=\"isShowAside = !isShowAside\"\n              :class=\"{open:!isShowAside,close:isShowAside}\">\n      </button>\n      <h1 class=\"title\">Javascript Box</h1>\n      <ul class=\"list-project\">\n        <li class=\"item-project\"\n            :class=\"{current: dp.id === currentId}\"\n            v-for=\"(dp,index) in dataProject\"\n            @click=\"loadCode(dp.id)\">\n          {{index + 1}}、{{dp.title}}\n          <img src=\"../assets/image/icon-share.png\"\n               class=\"btn-share\" alt=\"分享\" @click=\"share(dp.id)\">\n        </li>\n      </ul>\n      <button class=\"btn-add\" @click=\"add()\"></button>\n    </aside>\n    <div class=\"box-editor\">\n      <div class=\"box-code\"\n           :style=\"{height: boxCodeHeight + 'px'}\">\n        <textarea\n          spellcheck=\"false\"\n          autocapitalize=\"none\"\n          autocorrect=\"off\"\n          ref=\"codeEditor\">\n        </textarea>\n      </div>\n      <div class=\"box-control\">\n        <a class=\"link-site\" href=\"http://code.smallcfj.club\" target=\"_blank\">Javascript Box</a>\n        <div class=\"box-right\">\n          <label class=\"text-title\">{{currentTitle}}</label>\n          <button class=\"btn-save\" @click=\"popSaveOpen = true\">保存</button>\n          <button @click=\"clearConsole()\">清空</button>\n          <button @click=\"run()\">运行</button>\n        </div>\n      </div>\n      <div class=\"box-console\">\n        <ul class=\"list-console\">\n          <li class=\"item-console\" v-for=\"dc in dataConsole\">\n            <label>{{$util.parseDate(dc.time,'yyyy-MM-dd hh:mm:ss')}}&nbsp;&nbsp;:&nbsp;&nbsp;</label>\n            {{dc.msg}}\n          </li>\n        </ul>\n      </div>\n    </div>\n    <pop-save :open=\"popSaveOpen\"\n      @close=\"popSaveOpen = false\"\n      @sutmit=\"submit\">\n    </pop-save>\n    <pop-alert :text=\"alertText\"\n                 @close=\"alertClose()\">\n    </pop-alert>\n    <pop-share :cid=\"shareCodeId\"\n               @close=\"shareClose()\">\n    </pop-share>\n  </div>\n</template>\n\n<script>\n  import CodeMirror from '../assets/CodeMirror/lib/codemirror'\n  import '../assets/CodeMirror/mode/javascript'\n  import popSave from './popSave.vue'\n  import popAlert from './popAlert.vue'\n  import popShare from './popShare.vue'\n\n  export default {\n    components: {\n      'pop-save': popSave,\n      'pop-alert': popAlert,\n      'pop-share': popShare\n    },\n    data: function () {\n      return {\n        editor: null,\n        dataConsole: [],\n        dataProject: [],\n        preY: 0,\n        boxCodeHeight: 300,\n        currentId: '',\n        currentTitle: '',\n        isShowAside: true,\n        popSaveOpen: false,\n        alertText: '',\n        shareCodeId: ''\n      }\n    },\n    mounted: function () {\n      this.editor = CodeMirror.fromTextArea(this.$refs.codeEditor, {\n        mode: 'text/javascript',\n        lineNumbers: true,\n        lineWrapping: true,\n        indentUnit: 4,  // 缩进\n        foldGutter: true,\n        styleActiveLine: true,\n        theme: 'blackboard',\n        gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter']\n      })\n\n      console.log = this.log\n\n      window.onmousedown = this.ctrlMouseDown\n      window.onmousemove = this.ctrlMouseMove\n      window.onmouseup = this.ctrlMouseUp\n      document.addEventListener('mouseleave', this.mouseLeaveWindow)\n\n      var vm = this\n      this.$store.dispatch('codeList').then(function (data) {\n        if (data.success) {\n          vm.dataProject = data.list\n        }\n      })\n\n      const cid = this.$route.query.Cid\n      if (cid) {\n        this.loadCode(cid)\n      }\n    },\n    methods: {\n      mouseLeaveWindow: function (e) {\n        this.preY = 0\n      },\n      ctrlMouseDown: function (e) {\n        let el = e.target || e.srcElement\n        while (el) {\n          if (el.className && el.className.indexOf('box-control') >= 0) {\n            this.preY = e.clientY\n          }\n          el = el.parentNode\n        }\n      },\n      ctrlMouseMove: function (e) {\n        const nowY = e.clientY\n        if (this.preY <= 0) {\n          return\n        }\n        e.preventDefault()\n        this.boxCodeHeight += nowY - this.preY\n        if (this.boxCodeHeight < 50) {\n          this.boxCodeHeight = 50\n        } else if (this.boxCodeHeight > document.body.clientHeight - 100) {\n          this.boxCodeHeight = document.body.clientHeight - 100\n        } else {\n          this.preY = nowY\n        }\n      },\n      ctrlMouseUp: function (e) {\n        this.preY = 0\n      },\n      run: function () {\n        eval(this.editor.getValue())\n      },\n      log: function (text) {\n        this.dataConsole.unshift({\n          type: 'log',\n          time: parseInt(Date.now() / 1000),\n          msg: text\n        })\n      },\n      clearConsole: function () {\n        this.dataConsole = []\n      },\n      submit: function (data) {\n        const vm = this\n        data.content = this.editor.getValue()\n        this.$store.dispatch('add', data).then(function (res) {\n          if (res.success) {\n            vm.alertText = '提交成功!'\n          } else {\n            vm.alertText = res.msg\n          }\n        })\n      },\n      loadCode: function (id) {\n        const vm = this\n        vm.$store.dispatch('codeDetail', id).then(function (data) {\n          if (data.success) {\n            vm.currentId = id\n            vm.currentTitle = data.title\n            vm.editor.setValue(data.content)\n          }\n        })\n      },\n      add: function () {\n        this.currentTitle = ''\n        this.editor.setValue('')\n        this.clearConsole()\n      },\n      alertClose: function () {\n        this.alertText = ''\n        this.currentId = ''\n        this.currentTitle = ''\n        this.editor.setValue('')\n      },\n      share: function (id) {\n        this.shareCodeId = id\n      },\n      shareClose: function () {\n        this.shareCodeId = ''\n      }\n    }\n  }\n</script>\n\n<style>\n  @import \"../assets/CodeMirror/lib/codemirror.css\";\n  @import \"../assets/CodeMirror/theme/blackboard.css\";\n  .container-home {\n    height: 100%;\n    background-color: #0C1021;\n  }\n  aside {\n    position: fixed;\n    width: 260px;\n    left: 0;\n    top: 0;\n    height: 100%;\n    box-sizing: border-box;\n    background-color: #333;\n    border-right: 1px solid #565656;\n    z-index: 10;\n    transition: transform .5s;\n    will-change: transform;\n  }\n  .btn-toggle {\n    position: absolute;\n    width: 25px;\n    height: 60px;\n    right: -26px;\n    background-color: #222;\n    top: 50%;\n    transform: translateY(-50%);\n    border-top-right-radius: 5px;\n    border-bottom-right-radius: 5px;\n    border-top: 1px solid #565656;\n    border-right: 1px solid #565656;\n    border-bottom: 1px solid #565656;\n    border-left: none;\n    box-shadow: 1px 0 5px #111;\n    background-position: center;\n    background-size: 70%;\n    background-repeat: no-repeat;\n    outline: none;\n    cursor: pointer;\n  }\n  .btn-toggle.close {\n    background-image: url('../assets/image/arrow-close.png');\n  }\n  .btn-toggle.open {\n    background-image: url('../assets/image/arrow-open.png');\n  }\n  .title {\n    padding: 10px 0;\n    background-color: #111;\n    color: #999;\n    text-align: center;\n    font-size: 20px;\n    font-weight: bolder;\n  }\n  .list-project, .item-project {\n    list-style-type: none;\n    padding: 0;\n    margin: 0;\n  }\n  .item-project {\n    position: relative;\n    padding: 0 10px;\n    color: #999;\n    word-wrap: break-word;\n    word-break: break-all;\n    cursor: pointer;\n    font-size: 16px;\n    height: 40px;\n    line-height: 40px;\n  }\n  .item-project:hover,\n  .item-project.current {\n    background-color: #222;\n  }\n  .btn-share {\n    position: absolute;\n    display: block;\n    right: 0;\n    top: 0;\n    padding: 10px;\n    height: 20px;\n    visibility: hidden;\n  }\n  .btn-share:hover {\n    height: 26px;\n    padding: 7px;\n    background-color: #2a2a2a;\n  }\n  .item-project:hover .btn-share,\n  .item-project.current .btn-share {\n    visibility: visible;\n  }\n  .btn-add {\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    width: 100%;\n    height: 40px;\n    border: none;\n    border-top: 1.5px solid #222;\n    background-color: transparent;\n    background-image: url('../assets/image/icon-add.png');\n    background-repeat: no-repeat;\n    background-size: 26px;\n    background-position: center;\n    cursor: pointer;\n    outline: none;\n  }\n  .btn-add:hover {\n    background-color: #222;\n  }\n\n  .box-editor {\n    width: 100%;\n    height: 100%;\n    position: relative;\n    padding-left: 260px;\n    display: flex;\n    flex-direction: column;\n    box-sizing: border-box;\n    transition: padding-left .5s;\n    will-change:padding-left;\n  }\n  .box-code {\n    font-size: 16px;\n    overflow: hidden;\n    flex-shrink: 0;\n  }\n  .box-code>.CodeMirror {\n    height: 100%;\n  }\n  .box-control {\n    height: 50px;\n    background-color: #333;\n    border-top: 1px solid #565656;\n    border-bottom: 1px solid #565656;\n    cursor: move;\n    flex-shrink: 0;\n  }\n  .box-control button {\n    height: 30px;\n    width: 80px;\n    margin: 10px 0 10px 10px;\n    box-sizing: border-box;\n    border: 1px solid #565656;\n    background-color: #222;\n    color: #777;\n    cursor: pointer;\n    outline: none;\n  }\n  .box-control .box-right {\n    float: right;\n    margin-right: 30px;\n  }\n  .box-control button:active {\n    background-color: #111;\n    color: #565656;\n  }\n  .text-title {\n    height: 32px;\n    margin: 9px;\n    box-sizing: border-box;\n    outline: none;\n    padding: 5px;\n    font-size: 16px;\n    font-family: 微软雅黑;\n    width: 400px;\n    color: #aaa;\n    overflow: hidden;\n  }\n  .link-site {\n    display: inline-block;\n    height: 32px;\n    line-height: 32px;\n    margin: 9px;\n    font-family: 微软雅黑;\n    color: #0c1021;\n    font-size: 18px;\n    font-weight: bolder;\n    cursor: pointer;\n    text-decoration: none;\n    visibility: hidden;\n  }\n  .link-site:hover {\n    text-decoration: underline;\n  }\n\n  .box-console {\n    flex-grow: 1;\n    background-color: #0C1021;\n    overflow: auto;\n  }\n  .list-console, .item-console {\n    margin: 0;\n    padding: 0;\n    list-style-type: none;\n    font-size: 14px;\n    color: #8DA6CE;\n  }\n  .list-console {\n    padding: 10px 0;\n  }\n  .item-console {\n    padding: 3px;\n    word-wrap: break-word;\n    word-break: break-all;\n  }\n  .item-console:hover {\n    background-color: #222;\n  }\n  .item-console label {\n    user-select:none;\n  }\n\n  .container-home.noAside aside {\n    transform: translateX(-260px);\n  }\n  .container-home.noAside .box-editor {\n    padding-left: 0;\n  }\n  .CodeMirror pre {\n    font: 16px/1.5 Helvetica, Arial, sans-serif !important;\n  }\n\n  @media screen and (max-width : 1000px) {\n    aside {\n      display: none;\n    }\n    .box-editor {\n      padding-left: 0;\n    }\n    .btn-save {\n      display: none;\n    }\n    .link-site {\n      visibility: visible;\n    }\n    .box-control .box-right {\n      margin-right: 10px;\n    }\n  }\n</style>\n\n\n<!--webpack练习 https://juejin.im/post/58edcbda44d904005774cfb1-->\n"
  },
  {
    "path": "front-vue/src/components/popAlert.vue",
    "content": "<template>\n  <pop-window :open=\"text !== ''\" @close=\"close()\">\n    <div class=\"pop-success\">\n      <p class=\"success\">{{text}}</p>\n      <button class=\"btn-positive\" @click=\"close()\">确定</button>\n    </div>\n  </pop-window>\n</template>\n\n<script>\n  import popWindow from './popWindow.vue'\n  export default {\n    components: {\n      'pop-window': popWindow\n    },\n    props: {\n      text: {\n        type: String,\n        default: ''\n      }\n    },\n    methods: {\n      close: function () {\n        this.$emit('close')\n      }\n    }\n  }\n</script>\n\n<style scoped>\n  .pop-success {\n    width: 300px;\n    font-family: 微软雅黑;\n    text-align: center;\n    padding-bottom: 20px;\n  }\n  .success {\n    font-size: 22px;\n    color: #ccc;\n    padding-left: 20px;\n    padding-right: 20px;\n  }\n  .btn-positive {\n    height: 35px;\n    width: 100px;\n    margin: 20px 0 10px 10px;\n    box-sizing: border-box;\n    border: 1px solid #777;\n    background-color: #0C1021;\n    color: #777;\n    cursor: pointer;\n    outline: none;\n  }\n  .btn-positive:active {\n    background-color: #222;\n  }\n</style>\n"
  },
  {
    "path": "front-vue/src/components/popSave.vue",
    "content": "<template>\n  <pop-window :open=\"open\" @close=\"close()\">\n    <div class=\"pop-save\">\n      <input type=\"text\" class=\"form-control\" v-model=\"title\" placeholder=\"请输入标题（20个字符以内）\">\n      <input type=\"text\" class=\"form-control\" v-model=\"token\" placeholder=\"请输入token（选填）\">\n      <p class=\"hint\">如果未输入token，则您提交的代码将在管理员审核后展现。</p>\n      <p class=\"hint\"><strong>验证：</strong>“{{poem.poem}}”的下一句是？</p>\n      <ul class=\"list-verify\">\n        <li class=\"item-verify\"\n            v-for=\"(option,index) in poem.options\"\n            :class=\"{current: index === currentOptionIndex}\"\n            @click=\"currentOptionIndex = index\">\n          {{option}}\n        </li>\n      </ul>\n      <div class=\"btn-group\">\n        <button class=\"btn\" @click=\"submit()\">提交</button>\n      </div>\n      <p class=\"error\" v-show=\"error !== ''\">{{error}}</p>\n    </div>\n  </pop-window>\n</template>\n\n<script>\n  import popWindow from './popWindow.vue'\n  export default {\n    components: {\n      'pop-window': popWindow\n    },\n    props: {\n      open: {\n        type: Boolean,\n        default: false\n      }\n    },\n    data: function () {\n      return {\n        token: '',\n        title: '',\n        error: '',\n        currentOptionIndex: -1,\n        poem: {\n          options: ['试试事实上升水', '试试事实上升水', '试试事实上升水', '试试事实上升水']\n        }\n      }\n    },\n    mounted: function () {\n      const vm = this\n      this.$store.dispatch('getVerify').then(function (data) {\n        if (data.success) {\n          vm.poem = data.data\n        }\n      })\n    },\n    watch: {\n      open: function (val) {\n        if (val) {\n          this.reset()\n        }\n      }\n    },\n    methods: {\n      close: function () {\n        this.$emit('close')\n      },\n      submit: function () {\n        if (this.title === '') {\n          this.error = '标题必须输入呦'\n          return\n        }\n        if (this.title.length > 20) {\n          this.error = '标题长度不能超过20个字符'\n          return\n        }\n        if (this.currentOptionIndex < 0) {\n          this.error = '请选择验证'\n          return\n        }\n        this.$emit('sutmit', {\n          title: this.title,\n          token: this.token,\n          answer: this.poem.answer,\n          option: this.poem.options[this.currentOptionIndex]\n        })\n        this.$emit('close')\n      },\n      reset: function () {\n        this.token = ''\n        this.title = ''\n        this.error = ''\n        this.currentOptionIndex = -1\n        const vm = this\n        this.$store.dispatch('getVerify').then(function (data) {\n          if (data.success) {\n            vm.poem = data.data\n          }\n        })\n      }\n    }\n  }\n</script>\n\n<style scoped>\n  .pop-save {\n    width: 400px;\n    padding: 20px;\n    font: 16px/1.5 \"Arial\",\"Microsoft YaHei\",\"黑体\",\"宋体\",sans-serif;\n  }\n  .hint {\n    color: #888;\n    font-size: 14px;\n  }\n  input.form-control {\n    width: 100%;\n    font: 16px/1.2 \"Arial\",\"Microsoft YaHei\",\"黑体\",\"宋体\",sans-serif;\n    padding: 10px;\n    border: 1px solid #1e525c;\n    outline: none;\n    box-sizing: border-box;\n    margin-top: 15px;\n    background-color: #161a2e;\n    color: white;\n  }\n  input.form-control:focus {\n    border-color: #29AFC9;\n    box-shadow: 0 0 5px rgba(41,175,201,.5);\n  }\n  .btn-group {\n    text-align: right;\n    margin-top: 20px;\n  }\n  .btn {\n    height: 35px;\n    width: 100px;\n    margin: 20px 0 10px 10px;\n    box-sizing: border-box;\n    border: 1px solid #777;\n    background-color: #0C1021;\n    color: #777;\n    cursor: pointer;\n    outline: none;\n  }\n  .btn:active {\n    background-color: #222;\n  }\n  .error {\n    font-size: 12px;\n    color: red;\n    font-weight: bolder;\n    margin: 5px 0;\n    text-align: center;\n  }\n  .list-verify, .item-verify {\n    list-style-type: none;\n    padding: 0;\n    margin: 0;\n    box-sizing: border-box;\n  }\n  .item-verify {\n    margin: 5px;\n    float: left;\n    width: 190px;\n    text-align: center;\n    border: 1px solid #1e525c;\n    padding: 6px;\n    font-size: 14px;\n    color: #aaa;\n    cursor: pointer;\n  }\n  .item-verify.current {\n    border-color: #29AFC9;\n    color: #29AFC9;\n  }\n</style>\n"
  },
  {
    "path": "front-vue/src/components/popShare.vue",
    "content": "<template>\n  <pop-window :open=\"cid !== ''\" @close=\"close()\">\n    <div class=\"pop-share\">\n      <p class=\"hint\">请复制下面代码粘贴到需要的地方</p>\n      <textarea class=\"box-code\" v-html=\"code\" ref=\"shareCode\">\n      </textarea>\n      <p class=\"error\" v-show=\"isCopy\">复制好了\\(^o^)/~</p>\n      <button class=\"btn-positive\" @click=\"copyCode()\">点击复制</button>\n    </div>\n  </pop-window>\n</template>\n\n<script>\n  import popWindow from './popWindow.vue'\n  export default {\n    components: {\n      'pop-window': popWindow\n    },\n    props: {\n      cid: {\n        type: String,\n        default: ''\n      }\n    },\n    data: function () {\n      return {\n        isCopy: false\n      }\n    },\n    watch: {\n      cid: function (val) {\n        if (val !== '') {\n          this.isCopy = false\n        }\n      }\n    },\n    computed: {\n      code: function () {\n        return '<iframe src=\"http://code.smallcfj.club/#/?Cid=' + this.cid + '\" width=\"100%\" height=\"500px\" frameborder=\"0\" scrolling=\"no\"> </iframe>'\n      }\n    },\n    methods: {\n      close: function () {\n        this.$emit('close')\n      },\n      copyCode: function () {\n        this.$refs.shareCode.select()\n        document.execCommand('Copy')\n        this.isCopy = true\n      }\n    }\n  }\n</script>\n\n<style scoped>\n  .pop-share {\n    width: 400px;\n    font-family: 微软雅黑;\n    text-align: center;\n    padding: 10px;\n  }\n  .hint {\n    color: #888;\n    font-size: 14px;\n  }\n  .box-code {\n    width: 380px;\n    max-width: 380px;\n    height: 150px;\n    border: 1px solid #777;\n    background-color: transparent;\n    outline: none;\n    padding: 5px;\n    box-sizing: border-box;\n    color: #CCC;\n  }\n  .btn-positive {\n    height: 35px;\n    width: 100px;\n    margin: 10px 0 10px 10px;\n    box-sizing: border-box;\n    border: 1px solid #777;\n    background-color: #0C1021;\n    color: #777;\n    cursor: pointer;\n    outline: none;\n  }\n  .btn-positive:active {\n    background-color: #222;\n  }\n  .error {\n    font-size: 12px;\n    color: red;\n    font-weight: bolder;\n    margin: 5px 0;\n    text-align: center;\n  }\n</style>\n"
  },
  {
    "path": "front-vue/src/components/popWindow.vue",
    "content": "<template>\n  <div class=\"pop-mask\" v-show=\"open\" @click.self=\"close()\">\n    <div class=\"pop-window\">\n      <div class=\"btn-close\" @click=\"close()\">×</div>\n      <slot></slot>\n    </div>\n  </div>\n</template>\n\n<script>\n  export default {\n    props: {\n      open: {\n        type: Boolean,\n        default: false\n      }\n    },\n    methods: {\n      close: function () {\n        this.$emit('close')\n      }\n    }\n  }\n</script>\n\n<style>\n  .pop-mask {\n    position: fixed;\n    z-index: 1000;\n    width: 100%;\n    height: 100%;\n    left: 0;\n    top: 0;\n  }\n  .pop-window {\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    transform: translate(-50%, -50%);\n    background-color: #0C1021;\n    border: 1px solid #565656;\n    box-shadow: 0 0 5px #777;\n    padding-top: 30px;\n  }\n  .btn-close {\n    position: absolute;\n    color: #999;\n    font-size: 24px;\n    padding: 5px 10px;\n    right: 0;\n    top: 0;\n    cursor: pointer;\n  }\n</style>\n"
  },
  {
    "path": "front-vue/src/main.js",
    "content": "// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\nimport App from './App'\nimport router from './router'\nimport store from './store/'\nimport axios from 'axios'\nimport CommUtil from './plugin/CommonUtil'\n\nVue.config.productionTip = false\n\nVue.use(CommUtil)\n\nglobal.axios = axios\n// axios.defaults.baseURL = 'http://code.smallcfj.club/api'\naxios.defaults.baseURL = 'http://localhost:3005/api'\n\n/* eslint-disable no-new */\nnew Vue({\n  el: '#app',\n  router,\n  store,\n  template: '<App/>',\n  components: { App }\n})\n"
  },
  {
    "path": "front-vue/src/plugin/CommonUtil.js",
    "content": "export default {\n  install: function (Vue) {\n    Vue.prototype.$util = {\n      parseDate: function (timp, fmt) {\n        var date = new Date(timp * 1000)\n        var o = {\n          'M+': date.getMonth() + 1, // 月份\n          'd+': date.getDate(), // 日\n          'h+': date.getHours(), // 小时\n          'm+': date.getMinutes(), // 分\n          's+': date.getSeconds(), // 秒\n          'q+': Math.floor((date.getMonth() + 3) / 3), // 季度\n          'S': date.getMilliseconds() // 毫秒\n        }\n        if (/(y+)/.test(fmt)) {\n          fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))\n        }\n        for (var k in o) {\n          if (new RegExp('(' + k + ')').test(fmt)) {\n            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))\n          }\n        }\n        return fmt\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "front-vue/src/router/index.js",
    "content": "import Vue from 'vue'\nimport Router from 'vue-router'\nimport Home from '@/components/Home'\n\nVue.use(Router)\n\nexport default new Router({\n  routes: [\n    {\n      path: '/',\n      name: 'Home',\n      component: Home\n    }\n  ]\n})\n"
  },
  {
    "path": "front-vue/src/store/api.js",
    "content": "import { post, get } from './fetch.js'\n\nconst api = {\n  add: '/add',\n  codeList: '/codeList',\n  codeDetail: '/codeDetail',\n  getVerify: '/verify'\n}\n\nexport default {\n  actions: {\n    add: ({ state }, data) => {\n      return post(api.add, data)\n    },\n    codeList: ( ) => {\n      return get(api.codeList)\n    },\n    codeDetail: ({ state }, id) => {\n      return get(api.codeDetail, { id })\n    },\n    getVerify: ( ) => {\n      return get(api.getVerify)\n    }\n  }\n}\n"
  },
  {
    "path": "front-vue/src/store/fetch.js",
    "content": "import axios from 'axios'\n\nexport function post (url, form) {\n\treturn new Promise((resolve, reject) => {\n\t\taxios.post(url, form).then(response => {\n\t\t\tif (response.status === 200) {\n\t\t\t\tresolve(response.data)\n\t\t\t} else {\n\t\t\t\treject(response.data.message)\n\t\t\t}\n\t\t}).catch(e => {\n\t\t\treject(e)\n\t\t})\n\t})\n}\n\nexport function get (url, form = {}, cache = false) {\n\tif (cache) {\n\t\tconst key = url + form.toString()\n    const sessionData = window.sessionStorage.getItem(key)\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (sessionData) {\n\t\t\t\tresolve(JSON.parse(sessionData))\n\t\t\t} else {\n\t\t\t\tgetFromServer(url, form).then(data => {\n\t\t\t\t\twindow.sessionStorage.setItem(key, JSON.stringify(data))\n\t\t\t\t\tresolve(data)\n\t\t\t\t}).catch(e => {\n\t\t\t\t\treject(e)\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t} else {\n\t\treturn getFromServer(url, form)\n\t}\n}\n\nfunction getFromServer (url, params) {\n  return new Promise(function (resolve, reject) {\n\t\tif (Object.getOwnPropertyNames(params).length > 0) {\n\t\t\turl += '?'\n\t\t\tfor (const f in params) {\n\t\t\t\turl += f + '=' + params[f] + '&'\n\t\t\t}\n\t\t\turl = url.substring(0, url.length - 1)\n\t\t}\n\t\taxios.get(url).then(response => {\n\t\t\tif (response.status === 200) {\n\t\t\t\tresolve(response.data)\n\t\t\t} else {\n\t\t\t\treject(response.data.message)\n\t\t\t}\n\t\t}).catch(e => {\n\t\t\treject(e)\n\t\t})\n\t})\n}\n"
  },
  {
    "path": "front-vue/src/store/index.js",
    "content": "/**\n * Created by zy on 2016/12/15.\n */\nimport Vuex from 'vuex'\nimport Vue from 'vue'\n\nimport api from './api'\n\nVue.use(Vuex)\n\nexport default new Vuex.Store({\n  strict: process.env.NODE_ENV !== 'production',\n  modules: {\n    api\n\t}\n})\n"
  },
  {
    "path": "front-vue/static/.gitkeep",
    "content": ""
  }
]