\";\n\t return div.innerHTML.indexOf(encoded) > 0\n\t}\n\t\n\t// #3663\n\t// IE encodes newlines inside attribute values while other browsers don't\n\tvar shouldDecodeNewlines = inBrowser ? shouldDecode('\\n', '
') : false;\n\t\n\t/* */\n\t\n\tvar decoder;\n\t\n\tfunction decode (html) {\n\t decoder = decoder || document.createElement('div');\n\t decoder.innerHTML = html;\n\t return decoder.textContent\n\t}\n\t\n\t/* */\n\t\n\tvar isUnaryTag = makeMap(\n\t 'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n\t 'link,meta,param,source,track,wbr',\n\t true\n\t);\n\t\n\t// Elements that you can, intentionally, leave open\n\t// (and which close themselves)\n\tvar canBeLeftOpenTag = makeMap(\n\t 'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source',\n\t true\n\t);\n\t\n\t// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\n\t// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\n\tvar isNonPhrasingTag = makeMap(\n\t 'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n\t 'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n\t 'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n\t 'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n\t 'title,tr,track',\n\t true\n\t);\n\t\n\t/**\n\t * Not type-checking this file because it's mostly vendor code.\n\t */\n\t\n\t/*!\n\t * HTML Parser By John Resig (ejohn.org)\n\t * Modified by Juriy \"kangax\" Zaytsev\n\t * Original code by Erik Arvidsson, Mozilla Public License\n\t * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js\n\t */\n\t\n\t// Regular Expressions for parsing tags and attributes\n\tvar singleAttrIdentifier = /([^\\s\"'<>/=]+)/;\n\tvar singleAttrAssign = /(?:=)/;\n\tvar singleAttrValues = [\n\t // attr value double quotes\n\t /\"([^\"]*)\"+/.source,\n\t // attr value, single quotes\n\t /'([^']*)'+/.source,\n\t // attr value, no quotes\n\t /([^\\s\"'=<>`]+)/.source\n\t];\n\tvar attribute = new RegExp(\n\t '^\\\\s*' + singleAttrIdentifier.source +\n\t '(?:\\\\s*(' + singleAttrAssign.source + ')' +\n\t '\\\\s*(?:' + singleAttrValues.join('|') + '))?'\n\t);\n\t\n\t// could use https://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-QName\n\t// but for Vue templates we can enforce a simple charset\n\tvar ncname = '[a-zA-Z_][\\\\w\\\\-\\\\.]*';\n\tvar qnameCapture = '((?:' + ncname + '\\\\:)?' + ncname + ')';\n\tvar startTagOpen = new RegExp('^<' + qnameCapture);\n\tvar startTagClose = /^\\s*(\\/?)>/;\n\tvar endTag = new RegExp('^<\\\\/' + qnameCapture + '[^>]*>');\n\tvar doctype = /^]+>/i;\n\tvar comment = /^');\n\t\n\t if (commentEnd >= 0) {\n\t advance(commentEnd + 3);\n\t continue\n\t }\n\t }\n\t\n\t // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n\t if (conditionalComment.test(html)) {\n\t var conditionalEnd = html.indexOf(']>');\n\t\n\t if (conditionalEnd >= 0) {\n\t advance(conditionalEnd + 2);\n\t continue\n\t }\n\t }\n\t\n\t // Doctype:\n\t var doctypeMatch = html.match(doctype);\n\t if (doctypeMatch) {\n\t advance(doctypeMatch[0].length);\n\t continue\n\t }\n\t\n\t // End tag:\n\t var endTagMatch = html.match(endTag);\n\t if (endTagMatch) {\n\t var curIndex = index;\n\t advance(endTagMatch[0].length);\n\t parseEndTag(endTagMatch[0], endTagMatch[1], curIndex, index);\n\t continue\n\t }\n\t\n\t // Start tag:\n\t var startTagMatch = parseStartTag();\n\t if (startTagMatch) {\n\t handleStartTag(startTagMatch);\n\t continue\n\t }\n\t }\n\t\n\t var text = (void 0), rest$1 = (void 0), next = (void 0);\n\t if (textEnd > 0) {\n\t rest$1 = html.slice(textEnd);\n\t while (\n\t !endTag.test(rest$1) &&\n\t !startTagOpen.test(rest$1) &&\n\t !comment.test(rest$1) &&\n\t !conditionalComment.test(rest$1)\n\t ) {\n\t // < in plain text, be forgiving and treat it as text\n\t next = rest$1.indexOf('<', 1);\n\t if (next < 0) { break }\n\t textEnd += next;\n\t rest$1 = html.slice(textEnd);\n\t }\n\t text = html.substring(0, textEnd);\n\t advance(textEnd);\n\t }\n\t\n\t if (textEnd < 0) {\n\t text = html;\n\t html = '';\n\t }\n\t\n\t if (options.chars && text) {\n\t options.chars(text);\n\t }\n\t } else {\n\t var stackedTag = lastTag.toLowerCase();\n\t var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(' + stackedTag + '[^>]*>)', 'i'));\n\t var endTagLength = 0;\n\t var rest = html.replace(reStackedTag, function (all, text, endTag) {\n\t endTagLength = endTag.length;\n\t if (stackedTag !== 'script' && stackedTag !== 'style' && stackedTag !== 'noscript') {\n\t text = text\n\t .replace(//g, '$1')\n\t .replace(//g, '$1');\n\t }\n\t if (options.chars) {\n\t options.chars(text);\n\t }\n\t return ''\n\t });\n\t index += html.length - rest.length;\n\t html = rest;\n\t parseEndTag('' + stackedTag + '>', stackedTag, index - endTagLength, index);\n\t }\n\t\n\t if (html === last && options.chars) {\n\t options.chars(html);\n\t break\n\t }\n\t }\n\t\n\t // Clean up any remaining tags\n\t parseEndTag();\n\t\n\t function advance (n) {\n\t index += n;\n\t html = html.substring(n);\n\t }\n\t\n\t function parseStartTag () {\n\t var start = html.match(startTagOpen);\n\t if (start) {\n\t var match = {\n\t tagName: start[1],\n\t attrs: [],\n\t start: index\n\t };\n\t advance(start[0].length);\n\t var end, attr;\n\t while (!(end = html.match(startTagClose)) && (attr = html.match(attribute))) {\n\t advance(attr[0].length);\n\t match.attrs.push(attr);\n\t }\n\t if (end) {\n\t match.unarySlash = end[1];\n\t advance(end[0].length);\n\t match.end = index;\n\t return match\n\t }\n\t }\n\t }\n\t\n\t function handleStartTag (match) {\n\t var tagName = match.tagName;\n\t var unarySlash = match.unarySlash;\n\t\n\t if (expectHTML) {\n\t if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n\t parseEndTag('', lastTag);\n\t }\n\t if (canBeLeftOpenTag(tagName) && lastTag === tagName) {\n\t parseEndTag('', tagName);\n\t }\n\t }\n\t\n\t var unary = isUnaryTag$$1(tagName) || tagName === 'html' && lastTag === 'head' || !!unarySlash;\n\t\n\t var l = match.attrs.length;\n\t var attrs = new Array(l);\n\t for (var i = 0; i < l; i++) {\n\t var args = match.attrs[i];\n\t // hackish work around FF bug https://bugzilla.mozilla.org/show_bug.cgi?id=369778\n\t if (IS_REGEX_CAPTURING_BROKEN && args[0].indexOf('\"\"') === -1) {\n\t if (args[3] === '') { delete args[3]; }\n\t if (args[4] === '') { delete args[4]; }\n\t if (args[5] === '') { delete args[5]; }\n\t }\n\t var value = args[3] || args[4] || args[5] || '';\n\t attrs[i] = {\n\t name: args[1],\n\t value: decodeAttr(\n\t value,\n\t options.shouldDecodeNewlines\n\t )\n\t };\n\t }\n\t\n\t if (!unary) {\n\t stack.push({ tag: tagName, attrs: attrs });\n\t lastTag = tagName;\n\t unarySlash = '';\n\t }\n\t\n\t if (options.start) {\n\t options.start(tagName, attrs, unary, match.start, match.end);\n\t }\n\t }\n\t\n\t function parseEndTag (tag, tagName, start, end) {\n\t var pos;\n\t if (start == null) { start = index; }\n\t if (end == null) { end = index; }\n\t\n\t // Find the closest opened tag of the same type\n\t if (tagName) {\n\t var needle = tagName.toLowerCase();\n\t for (pos = stack.length - 1; pos >= 0; pos--) {\n\t if (stack[pos].tag.toLowerCase() === needle) {\n\t break\n\t }\n\t }\n\t } else {\n\t // If no tag name is provided, clean shop\n\t pos = 0;\n\t }\n\t\n\t if (pos >= 0) {\n\t // Close all the open elements, up the stack\n\t for (var i = stack.length - 1; i >= pos; i--) {\n\t if (options.end) {\n\t options.end(stack[i].tag, start, end);\n\t }\n\t }\n\t\n\t // Remove the open elements from the stack\n\t stack.length = pos;\n\t lastTag = pos && stack[pos - 1].tag;\n\t } else if (tagName.toLowerCase() === 'br') {\n\t if (options.start) {\n\t options.start(tagName, [], true, start, end);\n\t }\n\t } else if (tagName.toLowerCase() === 'p') {\n\t if (options.start) {\n\t options.start(tagName, [], false, start, end);\n\t }\n\t if (options.end) {\n\t options.end(tagName, start, end);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/* */\n\t\n\tfunction parseFilters (exp) {\n\t var inSingle = false;\n\t var inDouble = false;\n\t var inTemplateString = false;\n\t var inRegex = false;\n\t var curly = 0;\n\t var square = 0;\n\t var paren = 0;\n\t var lastFilterIndex = 0;\n\t var c, prev, i, expression, filters;\n\t\n\t for (i = 0; i < exp.length; i++) {\n\t prev = c;\n\t c = exp.charCodeAt(i);\n\t if (inSingle) {\n\t if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n\t } else if (inDouble) {\n\t if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n\t } else if (inTemplateString) {\n\t if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n\t } else if (inRegex) {\n\t if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n\t } else if (\n\t c === 0x7C && // pipe\n\t exp.charCodeAt(i + 1) !== 0x7C &&\n\t exp.charCodeAt(i - 1) !== 0x7C &&\n\t !curly && !square && !paren\n\t ) {\n\t if (expression === undefined) {\n\t // first filter, end of expression\n\t lastFilterIndex = i + 1;\n\t expression = exp.slice(0, i).trim();\n\t } else {\n\t pushFilter();\n\t }\n\t } else {\n\t switch (c) {\n\t case 0x22: inDouble = true; break // \"\n\t case 0x27: inSingle = true; break // '\n\t case 0x60: inTemplateString = true; break // `\n\t case 0x2f: inRegex = true; break // /\n\t case 0x28: paren++; break // (\n\t case 0x29: paren--; break // )\n\t case 0x5B: square++; break // [\n\t case 0x5D: square--; break // ]\n\t case 0x7B: curly++; break // {\n\t case 0x7D: curly--; break // }\n\t }\n\t }\n\t }\n\t\n\t if (expression === undefined) {\n\t expression = exp.slice(0, i).trim();\n\t } else if (lastFilterIndex !== 0) {\n\t pushFilter();\n\t }\n\t\n\t function pushFilter () {\n\t (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n\t lastFilterIndex = i + 1;\n\t }\n\t\n\t if (filters) {\n\t for (i = 0; i < filters.length; i++) {\n\t expression = wrapFilter(expression, filters[i]);\n\t }\n\t }\n\t\n\t return expression\n\t}\n\t\n\tfunction wrapFilter (exp, filter) {\n\t var i = filter.indexOf('(');\n\t if (i < 0) {\n\t // _f: resolveFilter\n\t return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n\t } else {\n\t var name = filter.slice(0, i);\n\t var args = filter.slice(i + 1);\n\t return (\"_f(\\\"\" + name + \"\\\")(\" + exp + \",\" + args)\n\t }\n\t}\n\t\n\t/* */\n\t\n\tvar defaultTagRE = /\\{\\{((?:.|\\n)+?)\\}\\}/g;\n\tvar regexEscapeRE = /[-.*+?^${}()|[\\]/\\\\]/g;\n\t\n\tvar buildRegex = cached(function (delimiters) {\n\t var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n\t var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n\t return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n\t});\n\t\n\tfunction parseText (\n\t text,\n\t delimiters\n\t) {\n\t var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n\t if (!tagRE.test(text)) {\n\t return\n\t }\n\t var tokens = [];\n\t var lastIndex = tagRE.lastIndex = 0;\n\t var match, index;\n\t while ((match = tagRE.exec(text))) {\n\t index = match.index;\n\t // push text token\n\t if (index > lastIndex) {\n\t tokens.push(JSON.stringify(text.slice(lastIndex, index)));\n\t }\n\t // tag token\n\t var exp = parseFilters(match[1].trim());\n\t tokens.push((\"_s(\" + exp + \")\"));\n\t lastIndex = index + match[0].length;\n\t }\n\t if (lastIndex < text.length) {\n\t tokens.push(JSON.stringify(text.slice(lastIndex)));\n\t }\n\t return tokens.join('+')\n\t}\n\t\n\t/* */\n\t\n\tfunction baseWarn (msg) {\n\t console.error((\"[Vue parser]: \" + msg));\n\t}\n\t\n\tfunction pluckModuleFunction (\n\t modules,\n\t key\n\t) {\n\t return modules\n\t ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n\t : []\n\t}\n\t\n\tfunction addProp (el, name, value) {\n\t (el.props || (el.props = [])).push({ name: name, value: value });\n\t}\n\t\n\tfunction addAttr (el, name, value) {\n\t (el.attrs || (el.attrs = [])).push({ name: name, value: value });\n\t}\n\t\n\tfunction addDirective (\n\t el,\n\t name,\n\t rawName,\n\t value,\n\t arg,\n\t modifiers\n\t) {\n\t (el.directives || (el.directives = [])).push({ name: name, rawName: rawName, value: value, arg: arg, modifiers: modifiers });\n\t}\n\t\n\tfunction addHandler (\n\t el,\n\t name,\n\t value,\n\t modifiers,\n\t important\n\t) {\n\t // check capture modifier\n\t if (modifiers && modifiers.capture) {\n\t delete modifiers.capture;\n\t name = '!' + name; // mark the event as captured\n\t }\n\t if (modifiers && modifiers.once) {\n\t delete modifiers.once;\n\t name = '~' + name; // mark the event as once\n\t }\n\t var events;\n\t if (modifiers && modifiers.native) {\n\t delete modifiers.native;\n\t events = el.nativeEvents || (el.nativeEvents = {});\n\t } else {\n\t events = el.events || (el.events = {});\n\t }\n\t var newHandler = { value: value, modifiers: modifiers };\n\t var handlers = events[name];\n\t /* istanbul ignore if */\n\t if (Array.isArray(handlers)) {\n\t important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n\t } else if (handlers) {\n\t events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n\t } else {\n\t events[name] = newHandler;\n\t }\n\t}\n\t\n\tfunction getBindingAttr (\n\t el,\n\t name,\n\t getStatic\n\t) {\n\t var dynamicValue =\n\t getAndRemoveAttr(el, ':' + name) ||\n\t getAndRemoveAttr(el, 'v-bind:' + name);\n\t if (dynamicValue != null) {\n\t return parseFilters(dynamicValue)\n\t } else if (getStatic !== false) {\n\t var staticValue = getAndRemoveAttr(el, name);\n\t if (staticValue != null) {\n\t return JSON.stringify(staticValue)\n\t }\n\t }\n\t}\n\t\n\tfunction getAndRemoveAttr (el, name) {\n\t var val;\n\t if ((val = el.attrsMap[name]) != null) {\n\t var list = el.attrsList;\n\t for (var i = 0, l = list.length; i < l; i++) {\n\t if (list[i].name === name) {\n\t list.splice(i, 1);\n\t break\n\t }\n\t }\n\t }\n\t return val\n\t}\n\t\n\tvar len;\n\tvar str;\n\tvar chr;\n\tvar index$1;\n\tvar expressionPos;\n\tvar expressionEndPos;\n\t\n\t/**\n\t * parse directive model to do the array update transform. a[idx] = val => $$a.splice($$idx, 1, val)\n\t *\n\t * for loop possible cases:\n\t *\n\t * - test\n\t * - test[idx]\n\t * - test[test1[idx]]\n\t * - test[\"a\"][idx]\n\t * - xxx.test[a[a].test1[idx]]\n\t * - test.xxx.a[\"asa\"][test1[idx]]\n\t *\n\t */\n\t\n\tfunction parseModel (val) {\n\t str = val;\n\t len = str.length;\n\t index$1 = expressionPos = expressionEndPos = 0;\n\t\n\t if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {\n\t return {\n\t exp: val,\n\t idx: null\n\t }\n\t }\n\t\n\t while (!eof()) {\n\t chr = next();\n\t /* istanbul ignore if */\n\t if (isStringStart(chr)) {\n\t parseString(chr);\n\t } else if (chr === 0x5B) {\n\t parseBracket(chr);\n\t }\n\t }\n\t\n\t return {\n\t exp: val.substring(0, expressionPos),\n\t idx: val.substring(expressionPos + 1, expressionEndPos)\n\t }\n\t}\n\t\n\tfunction next () {\n\t return str.charCodeAt(++index$1)\n\t}\n\t\n\tfunction eof () {\n\t return index$1 >= len\n\t}\n\t\n\tfunction isStringStart (chr) {\n\t return chr === 0x22 || chr === 0x27\n\t}\n\t\n\tfunction parseBracket (chr) {\n\t var inBracket = 1;\n\t expressionPos = index$1;\n\t while (!eof()) {\n\t chr = next();\n\t if (isStringStart(chr)) {\n\t parseString(chr);\n\t continue\n\t }\n\t if (chr === 0x5B) { inBracket++; }\n\t if (chr === 0x5D) { inBracket--; }\n\t if (inBracket === 0) {\n\t expressionEndPos = index$1;\n\t break\n\t }\n\t }\n\t}\n\t\n\tfunction parseString (chr) {\n\t var stringQuote = chr;\n\t while (!eof()) {\n\t chr = next();\n\t if (chr === stringQuote) {\n\t break\n\t }\n\t }\n\t}\n\t\n\t/* */\n\t\n\tvar dirRE = /^v-|^@|^:/;\n\tvar forAliasRE = /(.*?)\\s+(?:in|of)\\s+(.*)/;\n\tvar forIteratorRE = /\\((\\{[^}]*\\}|[^,]*),([^,]*)(?:,([^,]*))?\\)/;\n\tvar bindRE = /^:|^v-bind:/;\n\tvar onRE = /^@|^v-on:/;\n\tvar argRE = /:(.*)$/;\n\tvar modifierRE = /\\.[^.]+/g;\n\t\n\tvar decodeHTMLCached = cached(decode);\n\t\n\t// configurable state\n\tvar warn$1;\n\tvar platformGetTagNamespace;\n\tvar platformMustUseProp;\n\tvar platformIsPreTag;\n\tvar preTransforms;\n\tvar transforms;\n\tvar postTransforms;\n\tvar delimiters;\n\t\n\t/**\n\t * Convert HTML string to AST.\n\t */\n\tfunction parse (\n\t template,\n\t options\n\t) {\n\t warn$1 = options.warn || baseWarn;\n\t platformGetTagNamespace = options.getTagNamespace || no;\n\t platformMustUseProp = options.mustUseProp || no;\n\t platformIsPreTag = options.isPreTag || no;\n\t preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n\t transforms = pluckModuleFunction(options.modules, 'transformNode');\n\t postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n\t delimiters = options.delimiters;\n\t var stack = [];\n\t var preserveWhitespace = options.preserveWhitespace !== false;\n\t var root;\n\t var currentParent;\n\t var inVPre = false;\n\t var inPre = false;\n\t var warned = false;\n\t parseHTML(template, {\n\t expectHTML: options.expectHTML,\n\t isUnaryTag: options.isUnaryTag,\n\t shouldDecodeNewlines: options.shouldDecodeNewlines,\n\t start: function start (tag, attrs, unary) {\n\t // check namespace.\n\t // inherit parent ns if there is one\n\t var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n\t\n\t // handle IE svg bug\n\t /* istanbul ignore if */\n\t if (isIE && ns === 'svg') {\n\t attrs = guardIESVGBug(attrs);\n\t }\n\t\n\t var element = {\n\t type: 1,\n\t tag: tag,\n\t attrsList: attrs,\n\t attrsMap: makeAttrsMap(attrs),\n\t parent: currentParent,\n\t children: []\n\t };\n\t if (ns) {\n\t element.ns = ns;\n\t }\n\t\n\t if (isForbiddenTag(element) && !isServerRendering()) {\n\t element.forbidden = true;\n\t \"development\" !== 'production' && warn$1(\n\t 'Templates should only be responsible for mapping the state to the ' +\n\t 'UI. Avoid placing tags with side-effects in your templates, such as ' +\n\t \"<\" + tag + \">.\"\n\t );\n\t }\n\t\n\t // apply pre-transforms\n\t for (var i = 0; i < preTransforms.length; i++) {\n\t preTransforms[i](element, options);\n\t }\n\t\n\t if (!inVPre) {\n\t processPre(element);\n\t if (element.pre) {\n\t inVPre = true;\n\t }\n\t }\n\t if (platformIsPreTag(element.tag)) {\n\t inPre = true;\n\t }\n\t if (inVPre) {\n\t processRawAttrs(element);\n\t } else {\n\t processFor(element);\n\t processIf(element);\n\t processOnce(element);\n\t processKey(element);\n\t\n\t // determine whether this is a plain element after\n\t // removing structural attributes\n\t element.plain = !element.key && !attrs.length;\n\t\n\t processRef(element);\n\t processSlot(element);\n\t processComponent(element);\n\t for (var i$1 = 0; i$1 < transforms.length; i$1++) {\n\t transforms[i$1](element, options);\n\t }\n\t processAttrs(element);\n\t }\n\t\n\t function checkRootConstraints (el) {\n\t if (\"development\" !== 'production' && !warned) {\n\t if (el.tag === 'slot' || el.tag === 'template') {\n\t warned = true;\n\t warn$1(\n\t \"Cannot use <\" + (el.tag) + \"> as component root element because it may \" +\n\t 'contain multiple nodes:\\n' + template\n\t );\n\t }\n\t if (el.attrsMap.hasOwnProperty('v-for')) {\n\t warned = true;\n\t warn$1(\n\t 'Cannot use v-for on stateful component root element because ' +\n\t 'it renders multiple elements:\\n' + template\n\t );\n\t }\n\t }\n\t }\n\t\n\t // tree management\n\t if (!root) {\n\t root = element;\n\t checkRootConstraints(root);\n\t } else if (!stack.length) {\n\t // allow root elements with v-if, v-else-if and v-else\n\t if (root.if && (element.elseif || element.else)) {\n\t checkRootConstraints(element);\n\t addIfCondition(root, {\n\t exp: element.elseif,\n\t block: element\n\t });\n\t } else if (\"development\" !== 'production' && !warned) {\n\t warned = true;\n\t warn$1(\n\t \"Component template should contain exactly one root element:\" +\n\t \"\\n\\n\" + template + \"\\n\\n\" +\n\t \"If you are using v-if on multiple elements, \" +\n\t \"use v-else-if to chain them instead.\"\n\t );\n\t }\n\t }\n\t if (currentParent && !element.forbidden) {\n\t if (element.elseif || element.else) {\n\t processIfConditions(element, currentParent);\n\t } else if (element.slotScope) { // scoped slot\n\t currentParent.plain = false;\n\t var name = element.slotTarget || 'default';(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n\t } else {\n\t currentParent.children.push(element);\n\t element.parent = currentParent;\n\t }\n\t }\n\t if (!unary) {\n\t currentParent = element;\n\t stack.push(element);\n\t }\n\t // apply post-transforms\n\t for (var i$2 = 0; i$2 < postTransforms.length; i$2++) {\n\t postTransforms[i$2](element, options);\n\t }\n\t },\n\t\n\t end: function end () {\n\t // remove trailing whitespace\n\t var element = stack[stack.length - 1];\n\t var lastNode = element.children[element.children.length - 1];\n\t if (lastNode && lastNode.type === 3 && lastNode.text === ' ') {\n\t element.children.pop();\n\t }\n\t // pop stack\n\t stack.length -= 1;\n\t currentParent = stack[stack.length - 1];\n\t // check pre state\n\t if (element.pre) {\n\t inVPre = false;\n\t }\n\t if (platformIsPreTag(element.tag)) {\n\t inPre = false;\n\t }\n\t },\n\t\n\t chars: function chars (text) {\n\t if (!currentParent) {\n\t if (\"development\" !== 'production' && !warned && text === template) {\n\t warned = true;\n\t warn$1(\n\t 'Component template requires a root element, rather than just text:\\n\\n' + template\n\t );\n\t }\n\t return\n\t }\n\t // IE textarea placeholder bug\n\t /* istanbul ignore if */\n\t if (isIE &&\n\t currentParent.tag === 'textarea' &&\n\t currentParent.attrsMap.placeholder === text) {\n\t return\n\t }\n\t text = inPre || text.trim()\n\t ? decodeHTMLCached(text)\n\t // only preserve whitespace if its not right after a starting tag\n\t : preserveWhitespace && currentParent.children.length ? ' ' : '';\n\t if (text) {\n\t var expression;\n\t if (!inVPre && text !== ' ' && (expression = parseText(text, delimiters))) {\n\t currentParent.children.push({\n\t type: 2,\n\t expression: expression,\n\t text: text\n\t });\n\t } else {\n\t currentParent.children.push({\n\t type: 3,\n\t text: text\n\t });\n\t }\n\t }\n\t }\n\t });\n\t return root\n\t}\n\t\n\tfunction processPre (el) {\n\t if (getAndRemoveAttr(el, 'v-pre') != null) {\n\t el.pre = true;\n\t }\n\t}\n\t\n\tfunction processRawAttrs (el) {\n\t var l = el.attrsList.length;\n\t if (l) {\n\t var attrs = el.attrs = new Array(l);\n\t for (var i = 0; i < l; i++) {\n\t attrs[i] = {\n\t name: el.attrsList[i].name,\n\t value: JSON.stringify(el.attrsList[i].value)\n\t };\n\t }\n\t } else if (!el.pre) {\n\t // non root node in pre blocks with no attributes\n\t el.plain = true;\n\t }\n\t}\n\t\n\tfunction processKey (el) {\n\t var exp = getBindingAttr(el, 'key');\n\t if (exp) {\n\t if (\"development\" !== 'production' && el.tag === 'template') {\n\t warn$1(\"
cannot be keyed. Place the key on real elements instead.\");\n\t }\n\t el.key = exp;\n\t }\n\t}\n\t\n\tfunction processRef (el) {\n\t var ref = getBindingAttr(el, 'ref');\n\t if (ref) {\n\t el.ref = ref;\n\t el.refInFor = checkInFor(el);\n\t }\n\t}\n\t\n\tfunction processFor (el) {\n\t var exp;\n\t if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n\t var inMatch = exp.match(forAliasRE);\n\t if (!inMatch) {\n\t \"development\" !== 'production' && warn$1(\n\t (\"Invalid v-for expression: \" + exp)\n\t );\n\t return\n\t }\n\t el.for = inMatch[2].trim();\n\t var alias = inMatch[1].trim();\n\t var iteratorMatch = alias.match(forIteratorRE);\n\t if (iteratorMatch) {\n\t el.alias = iteratorMatch[1].trim();\n\t el.iterator1 = iteratorMatch[2].trim();\n\t if (iteratorMatch[3]) {\n\t el.iterator2 = iteratorMatch[3].trim();\n\t }\n\t } else {\n\t el.alias = alias;\n\t }\n\t }\n\t}\n\t\n\tfunction processIf (el) {\n\t var exp = getAndRemoveAttr(el, 'v-if');\n\t if (exp) {\n\t el.if = exp;\n\t addIfCondition(el, {\n\t exp: exp,\n\t block: el\n\t });\n\t } else {\n\t if (getAndRemoveAttr(el, 'v-else') != null) {\n\t el.else = true;\n\t }\n\t var elseif = getAndRemoveAttr(el, 'v-else-if');\n\t if (elseif) {\n\t el.elseif = elseif;\n\t }\n\t }\n\t}\n\t\n\tfunction processIfConditions (el, parent) {\n\t var prev = findPrevElement(parent.children);\n\t if (prev && prev.if) {\n\t addIfCondition(prev, {\n\t exp: el.elseif,\n\t block: el\n\t });\n\t } else {\n\t warn$1(\n\t \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n\t \"used on element <\" + (el.tag) + \"> without corresponding v-if.\"\n\t );\n\t }\n\t}\n\t\n\tfunction addIfCondition (el, condition) {\n\t if (!el.ifConditions) {\n\t el.ifConditions = [];\n\t }\n\t el.ifConditions.push(condition);\n\t}\n\t\n\tfunction processOnce (el) {\n\t var once = getAndRemoveAttr(el, 'v-once');\n\t if (once != null) {\n\t el.once = true;\n\t }\n\t}\n\t\n\tfunction processSlot (el) {\n\t if (el.tag === 'slot') {\n\t el.slotName = getBindingAttr(el, 'name');\n\t if (\"development\" !== 'production' && el.key) {\n\t warn$1(\n\t \"`key` does not work on because slots are abstract outlets \" +\n\t \"and can possibly expand into multiple elements. \" +\n\t \"Use the key on a wrapping element instead.\"\n\t );\n\t }\n\t } else {\n\t var slotTarget = getBindingAttr(el, 'slot');\n\t if (slotTarget) {\n\t el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n\t }\n\t if (el.tag === 'template') {\n\t el.slotScope = getAndRemoveAttr(el, 'scope');\n\t }\n\t }\n\t}\n\t\n\tfunction processComponent (el) {\n\t var binding;\n\t if ((binding = getBindingAttr(el, 'is'))) {\n\t el.component = binding;\n\t }\n\t if (getAndRemoveAttr(el, 'inline-template') != null) {\n\t el.inlineTemplate = true;\n\t }\n\t}\n\t\n\tfunction processAttrs (el) {\n\t var list = el.attrsList;\n\t var i, l, name, rawName, value, arg, modifiers, isProp;\n\t for (i = 0, l = list.length; i < l; i++) {\n\t name = rawName = list[i].name;\n\t value = list[i].value;\n\t if (dirRE.test(name)) {\n\t // mark element as dynamic\n\t el.hasBindings = true;\n\t // modifiers\n\t modifiers = parseModifiers(name);\n\t if (modifiers) {\n\t name = name.replace(modifierRE, '');\n\t }\n\t if (bindRE.test(name)) { // v-bind\n\t name = name.replace(bindRE, '');\n\t value = parseFilters(value);\n\t if (modifiers) {\n\t if (modifiers.prop) {\n\t isProp = true;\n\t name = camelize(name);\n\t if (name === 'innerHtml') { name = 'innerHTML'; }\n\t }\n\t if (modifiers.camel) {\n\t name = camelize(name);\n\t }\n\t }\n\t if (isProp || platformMustUseProp(el.tag, name)) {\n\t addProp(el, name, value);\n\t } else {\n\t addAttr(el, name, value);\n\t }\n\t } else if (onRE.test(name)) { // v-on\n\t name = name.replace(onRE, '');\n\t addHandler(el, name, value, modifiers);\n\t } else { // normal directives\n\t name = name.replace(dirRE, '');\n\t // parse arg\n\t var argMatch = name.match(argRE);\n\t if (argMatch && (arg = argMatch[1])) {\n\t name = name.slice(0, -(arg.length + 1));\n\t }\n\t addDirective(el, name, rawName, value, arg, modifiers);\n\t if (\"development\" !== 'production' && name === 'model') {\n\t checkForAliasModel(el, value);\n\t }\n\t }\n\t } else {\n\t // literal attribute\n\t {\n\t var expression = parseText(value, delimiters);\n\t if (expression) {\n\t warn$1(\n\t name + \"=\\\"\" + value + \"\\\": \" +\n\t 'Interpolation inside attributes has been removed. ' +\n\t 'Use v-bind or the colon shorthand instead. For example, ' +\n\t 'instead of , use
.'\n\t );\n\t }\n\t }\n\t addAttr(el, name, JSON.stringify(value));\n\t }\n\t }\n\t}\n\t\n\tfunction checkInFor (el) {\n\t var parent = el;\n\t while (parent) {\n\t if (parent.for !== undefined) {\n\t return true\n\t }\n\t parent = parent.parent;\n\t }\n\t return false\n\t}\n\t\n\tfunction parseModifiers (name) {\n\t var match = name.match(modifierRE);\n\t if (match) {\n\t var ret = {};\n\t match.forEach(function (m) { ret[m.slice(1)] = true; });\n\t return ret\n\t }\n\t}\n\t\n\tfunction makeAttrsMap (attrs) {\n\t var map = {};\n\t for (var i = 0, l = attrs.length; i < l; i++) {\n\t if (\"development\" !== 'production' && map[attrs[i].name] && !isIE) {\n\t warn$1('duplicate attribute: ' + attrs[i].name);\n\t }\n\t map[attrs[i].name] = attrs[i].value;\n\t }\n\t return map\n\t}\n\t\n\tfunction findPrevElement (children) {\n\t var i = children.length;\n\t while (i--) {\n\t if (children[i].tag) { return children[i] }\n\t }\n\t}\n\t\n\tfunction isForbiddenTag (el) {\n\t return (\n\t el.tag === 'style' ||\n\t (el.tag === 'script' && (\n\t !el.attrsMap.type ||\n\t el.attrsMap.type === 'text/javascript'\n\t ))\n\t )\n\t}\n\t\n\tvar ieNSBug = /^xmlns:NS\\d+/;\n\tvar ieNSPrefix = /^NS\\d+:/;\n\t\n\t/* istanbul ignore next */\n\tfunction guardIESVGBug (attrs) {\n\t var res = [];\n\t for (var i = 0; i < attrs.length; i++) {\n\t var attr = attrs[i];\n\t if (!ieNSBug.test(attr.name)) {\n\t attr.name = attr.name.replace(ieNSPrefix, '');\n\t res.push(attr);\n\t }\n\t }\n\t return res\n\t}\n\t\n\tfunction checkForAliasModel (el, value) {\n\t var _el = el;\n\t while (_el) {\n\t if (_el.for && _el.alias === value) {\n\t warn$1(\n\t \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n\t \"You are binding v-model directly to a v-for iteration alias. \" +\n\t \"This will not be able to modify the v-for source array because \" +\n\t \"writing to the alias is like modifying a function local variable. \" +\n\t \"Consider using an array of objects and use v-model on an object property instead.\"\n\t );\n\t }\n\t _el = _el.parent;\n\t }\n\t}\n\t\n\t/* */\n\t\n\tvar isStaticKey;\n\tvar isPlatformReservedTag;\n\t\n\tvar genStaticKeysCached = cached(genStaticKeys$1);\n\t\n\t/**\n\t * Goal of the optimizer: walk the generated template AST tree\n\t * and detect sub-trees that are purely static, i.e. parts of\n\t * the DOM that never needs to change.\n\t *\n\t * Once we detect these sub-trees, we can:\n\t *\n\t * 1. Hoist them into constants, so that we no longer need to\n\t * create fresh nodes for them on each re-render;\n\t * 2. Completely skip them in the patching process.\n\t */\n\tfunction optimize (root, options) {\n\t if (!root) { return }\n\t isStaticKey = genStaticKeysCached(options.staticKeys || '');\n\t isPlatformReservedTag = options.isReservedTag || no;\n\t // first pass: mark all non-static nodes.\n\t markStatic(root);\n\t // second pass: mark static roots.\n\t markStaticRoots(root, false);\n\t}\n\t\n\tfunction genStaticKeys$1 (keys) {\n\t return makeMap(\n\t 'type,tag,attrsList,attrsMap,plain,parent,children,attrs' +\n\t (keys ? ',' + keys : '')\n\t )\n\t}\n\t\n\tfunction markStatic (node) {\n\t node.static = isStatic(node);\n\t if (node.type === 1) {\n\t // do not make component slot content static. this avoids\n\t // 1. components not able to mutate slot nodes\n\t // 2. static slot content fails for hot-reloading\n\t if (\n\t !isPlatformReservedTag(node.tag) &&\n\t node.tag !== 'slot' &&\n\t node.attrsMap['inline-template'] == null\n\t ) {\n\t return\n\t }\n\t for (var i = 0, l = node.children.length; i < l; i++) {\n\t var child = node.children[i];\n\t markStatic(child);\n\t if (!child.static) {\n\t node.static = false;\n\t }\n\t }\n\t }\n\t}\n\t\n\tfunction markStaticRoots (node, isInFor) {\n\t if (node.type === 1) {\n\t if (node.static || node.once) {\n\t node.staticInFor = isInFor;\n\t }\n\t // For a node to qualify as a static root, it should have children that\n\t // are not just static text. Otherwise the cost of hoisting out will\n\t // outweigh the benefits and it's better off to just always render it fresh.\n\t if (node.static && node.children.length && !(\n\t node.children.length === 1 &&\n\t node.children[0].type === 3\n\t )) {\n\t node.staticRoot = true;\n\t return\n\t } else {\n\t node.staticRoot = false;\n\t }\n\t if (node.children) {\n\t for (var i = 0, l = node.children.length; i < l; i++) {\n\t markStaticRoots(node.children[i], isInFor || !!node.for);\n\t }\n\t }\n\t if (node.ifConditions) {\n\t walkThroughConditionsBlocks(node.ifConditions, isInFor);\n\t }\n\t }\n\t}\n\t\n\tfunction walkThroughConditionsBlocks (conditionBlocks, isInFor) {\n\t for (var i = 1, len = conditionBlocks.length; i < len; i++) {\n\t markStaticRoots(conditionBlocks[i].block, isInFor);\n\t }\n\t}\n\t\n\tfunction isStatic (node) {\n\t if (node.type === 2) { // expression\n\t return false\n\t }\n\t if (node.type === 3) { // text\n\t return true\n\t }\n\t return !!(node.pre || (\n\t !node.hasBindings && // no dynamic bindings\n\t !node.if && !node.for && // not v-if or v-for or v-else\n\t !isBuiltInTag(node.tag) && // not a built-in\n\t isPlatformReservedTag(node.tag) && // not a component\n\t !isDirectChildOfTemplateFor(node) &&\n\t Object.keys(node).every(isStaticKey)\n\t ))\n\t}\n\t\n\tfunction isDirectChildOfTemplateFor (node) {\n\t while (node.parent) {\n\t node = node.parent;\n\t if (node.tag !== 'template') {\n\t return false\n\t }\n\t if (node.for) {\n\t return true\n\t }\n\t }\n\t return false\n\t}\n\t\n\t/* */\n\t\n\tvar fnExpRE = /^\\s*([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*\\(/;\n\tvar simplePathRE = /^\\s*[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['.*?']|\\[\".*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*\\s*$/;\n\t\n\t// keyCode aliases\n\tvar keyCodes = {\n\t esc: 27,\n\t tab: 9,\n\t enter: 13,\n\t space: 32,\n\t up: 38,\n\t left: 37,\n\t right: 39,\n\t down: 40,\n\t 'delete': [8, 46]\n\t};\n\t\n\tvar modifierCode = {\n\t stop: '$event.stopPropagation();',\n\t prevent: '$event.preventDefault();',\n\t self: 'if($event.target !== $event.currentTarget)return;',\n\t ctrl: 'if(!$event.ctrlKey)return;',\n\t shift: 'if(!$event.shiftKey)return;',\n\t alt: 'if(!$event.altKey)return;',\n\t meta: 'if(!$event.metaKey)return;'\n\t};\n\t\n\tfunction genHandlers (events, native) {\n\t var res = native ? 'nativeOn:{' : 'on:{';\n\t for (var name in events) {\n\t res += \"\\\"\" + name + \"\\\":\" + (genHandler(name, events[name])) + \",\";\n\t }\n\t return res.slice(0, -1) + '}'\n\t}\n\t\n\tfunction genHandler (\n\t name,\n\t handler\n\t) {\n\t if (!handler) {\n\t return 'function(){}'\n\t } else if (Array.isArray(handler)) {\n\t return (\"[\" + (handler.map(function (handler) { return genHandler(name, handler); }).join(',')) + \"]\")\n\t } else if (!handler.modifiers) {\n\t return fnExpRE.test(handler.value) || simplePathRE.test(handler.value)\n\t ? handler.value\n\t : (\"function($event){\" + (handler.value) + \"}\")\n\t } else {\n\t var code = '';\n\t var keys = [];\n\t for (var key in handler.modifiers) {\n\t if (modifierCode[key]) {\n\t code += modifierCode[key];\n\t } else {\n\t keys.push(key);\n\t }\n\t }\n\t if (keys.length) {\n\t code = genKeyFilter(keys) + code;\n\t }\n\t var handlerCode = simplePathRE.test(handler.value)\n\t ? handler.value + '($event)'\n\t : handler.value;\n\t return 'function($event){' + code + handlerCode + '}'\n\t }\n\t}\n\t\n\tfunction genKeyFilter (keys) {\n\t return (\"if(\" + (keys.map(genFilterCode).join('&&')) + \")return;\")\n\t}\n\t\n\tfunction genFilterCode (key) {\n\t var keyVal = parseInt(key, 10);\n\t if (keyVal) {\n\t return (\"$event.keyCode!==\" + keyVal)\n\t }\n\t var alias = keyCodes[key];\n\t return (\"_k($event.keyCode,\" + (JSON.stringify(key)) + (alias ? ',' + JSON.stringify(alias) : '') + \")\")\n\t}\n\t\n\t/* */\n\t\n\tfunction bind$2 (el, dir) {\n\t el.wrapData = function (code) {\n\t return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + (dir.modifiers && dir.modifiers.prop ? ',true' : '') + \")\")\n\t };\n\t}\n\t\n\tvar baseDirectives = {\n\t bind: bind$2,\n\t cloak: noop\n\t};\n\t\n\t/* */\n\t\n\t// configurable state\n\tvar warn$2;\n\tvar transforms$1;\n\tvar dataGenFns;\n\tvar platformDirectives$1;\n\tvar staticRenderFns;\n\tvar onceCount;\n\tvar currentOptions;\n\t\n\tfunction generate (\n\t ast,\n\t options\n\t) {\n\t // save previous staticRenderFns so generate calls can be nested\n\t var prevStaticRenderFns = staticRenderFns;\n\t var currentStaticRenderFns = staticRenderFns = [];\n\t var prevOnceCount = onceCount;\n\t onceCount = 0;\n\t currentOptions = options;\n\t warn$2 = options.warn || baseWarn;\n\t transforms$1 = pluckModuleFunction(options.modules, 'transformCode');\n\t dataGenFns = pluckModuleFunction(options.modules, 'genData');\n\t platformDirectives$1 = options.directives || {};\n\t var code = ast ? genElement(ast) : '_h(\"div\")';\n\t staticRenderFns = prevStaticRenderFns;\n\t onceCount = prevOnceCount;\n\t return {\n\t render: (\"with(this){return \" + code + \"}\"),\n\t staticRenderFns: currentStaticRenderFns\n\t }\n\t}\n\t\n\tfunction genElement (el) {\n\t if (el.staticRoot && !el.staticProcessed) {\n\t return genStatic(el)\n\t } else if (el.once && !el.onceProcessed) {\n\t return genOnce(el)\n\t } else if (el.for && !el.forProcessed) {\n\t return genFor(el)\n\t } else if (el.if && !el.ifProcessed) {\n\t return genIf(el)\n\t } else if (el.tag === 'template' && !el.slotTarget) {\n\t return genChildren(el) || 'void 0'\n\t } else if (el.tag === 'slot') {\n\t return genSlot(el)\n\t } else {\n\t // component or element\n\t var code;\n\t if (el.component) {\n\t code = genComponent(el.component, el);\n\t } else {\n\t var data = el.plain ? undefined : genData(el);\n\t\n\t var children = el.inlineTemplate ? null : genChildren(el);\n\t code = \"_h('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n\t }\n\t // module transforms\n\t for (var i = 0; i < transforms$1.length; i++) {\n\t code = transforms$1[i](el, code);\n\t }\n\t return code\n\t }\n\t}\n\t\n\t// hoist static sub-trees out\n\tfunction genStatic (el) {\n\t el.staticProcessed = true;\n\t staticRenderFns.push((\"with(this){return \" + (genElement(el)) + \"}\"));\n\t return (\"_m(\" + (staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n\t}\n\t\n\t// v-once\n\tfunction genOnce (el) {\n\t el.onceProcessed = true;\n\t if (el.if && !el.ifProcessed) {\n\t return genIf(el)\n\t } else if (el.staticInFor) {\n\t var key = '';\n\t var parent = el.parent;\n\t while (parent) {\n\t if (parent.for) {\n\t key = parent.key;\n\t break\n\t }\n\t parent = parent.parent;\n\t }\n\t if (!key) {\n\t \"development\" !== 'production' && warn$2(\n\t \"v-once can only be used inside v-for that is keyed. \"\n\t );\n\t return genElement(el)\n\t }\n\t return (\"_o(\" + (genElement(el)) + \",\" + (onceCount++) + (key ? (\",\" + key) : \"\") + \")\")\n\t } else {\n\t return genStatic(el)\n\t }\n\t}\n\t\n\tfunction genIf (el) {\n\t el.ifProcessed = true; // avoid recursion\n\t return genIfConditions(el.ifConditions.slice())\n\t}\n\t\n\tfunction genIfConditions (conditions) {\n\t if (!conditions.length) {\n\t return '_e()'\n\t }\n\t\n\t var condition = conditions.shift();\n\t if (condition.exp) {\n\t return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions)))\n\t } else {\n\t return (\"\" + (genTernaryExp(condition.block)))\n\t }\n\t\n\t // v-if with v-once should generate code like (a)?_m(0):_m(1)\n\t function genTernaryExp (el) {\n\t return el.once ? genOnce(el) : genElement(el)\n\t }\n\t}\n\t\n\tfunction genFor (el) {\n\t var exp = el.for;\n\t var alias = el.alias;\n\t var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n\t var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n\t el.forProcessed = true; // avoid recursion\n\t return \"_l((\" + exp + \"),\" +\n\t \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n\t \"return \" + (genElement(el)) +\n\t '})'\n\t}\n\t\n\tfunction genData (el) {\n\t var data = '{';\n\t\n\t // directives first.\n\t // directives may mutate the el's other properties before they are generated.\n\t var dirs = genDirectives(el);\n\t if (dirs) { data += dirs + ','; }\n\t\n\t // key\n\t if (el.key) {\n\t data += \"key:\" + (el.key) + \",\";\n\t }\n\t // ref\n\t if (el.ref) {\n\t data += \"ref:\" + (el.ref) + \",\";\n\t }\n\t if (el.refInFor) {\n\t data += \"refInFor:true,\";\n\t }\n\t // pre\n\t if (el.pre) {\n\t data += \"pre:true,\";\n\t }\n\t // record original tag name for components using \"is\" attribute\n\t if (el.component) {\n\t data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n\t }\n\t // module data generation functions\n\t for (var i = 0; i < dataGenFns.length; i++) {\n\t data += dataGenFns[i](el);\n\t }\n\t // attributes\n\t if (el.attrs) {\n\t data += \"attrs:{\" + (genProps(el.attrs)) + \"},\";\n\t }\n\t // DOM props\n\t if (el.props) {\n\t data += \"domProps:{\" + (genProps(el.props)) + \"},\";\n\t }\n\t // event handlers\n\t if (el.events) {\n\t data += (genHandlers(el.events)) + \",\";\n\t }\n\t if (el.nativeEvents) {\n\t data += (genHandlers(el.nativeEvents, true)) + \",\";\n\t }\n\t // slot target\n\t if (el.slotTarget) {\n\t data += \"slot:\" + (el.slotTarget) + \",\";\n\t }\n\t // scoped slots\n\t if (el.scopedSlots) {\n\t data += (genScopedSlots(el.scopedSlots)) + \",\";\n\t }\n\t // inline-template\n\t if (el.inlineTemplate) {\n\t var inlineTemplate = genInlineTemplate(el);\n\t if (inlineTemplate) {\n\t data += inlineTemplate + \",\";\n\t }\n\t }\n\t data = data.replace(/,$/, '') + '}';\n\t // v-bind data wrap\n\t if (el.wrapData) {\n\t data = el.wrapData(data);\n\t }\n\t return data\n\t}\n\t\n\tfunction genDirectives (el) {\n\t var dirs = el.directives;\n\t if (!dirs) { return }\n\t var res = 'directives:[';\n\t var hasRuntime = false;\n\t var i, l, dir, needRuntime;\n\t for (i = 0, l = dirs.length; i < l; i++) {\n\t dir = dirs[i];\n\t needRuntime = true;\n\t var gen = platformDirectives$1[dir.name] || baseDirectives[dir.name];\n\t if (gen) {\n\t // compile-time directive that manipulates AST.\n\t // returns true if it also needs a runtime counterpart.\n\t needRuntime = !!gen(el, dir, warn$2);\n\t }\n\t if (needRuntime) {\n\t hasRuntime = true;\n\t res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\\\"\" + (dir.arg) + \"\\\"\") : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n\t }\n\t }\n\t if (hasRuntime) {\n\t return res.slice(0, -1) + ']'\n\t }\n\t}\n\t\n\tfunction genInlineTemplate (el) {\n\t var ast = el.children[0];\n\t if (\"development\" !== 'production' && (\n\t el.children.length > 1 || ast.type !== 1\n\t )) {\n\t warn$2('Inline-template components must have exactly one child element.');\n\t }\n\t if (ast.type === 1) {\n\t var inlineRenderFns = generate(ast, currentOptions);\n\t return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n\t }\n\t}\n\t\n\tfunction genScopedSlots (slots) {\n\t return (\"scopedSlots:{\" + (Object.keys(slots).map(function (key) { return genScopedSlot(key, slots[key]); }).join(',')) + \"}\")\n\t}\n\t\n\tfunction genScopedSlot (key, el) {\n\t return key + \":function(\" + (String(el.attrsMap.scope)) + \"){\" +\n\t \"return \" + (el.tag === 'template'\n\t ? genChildren(el) || 'void 0'\n\t : genElement(el)) + \"}\"\n\t}\n\t\n\tfunction genChildren (el) {\n\t if (el.children.length) {\n\t return '[' + el.children.map(genNode).join(',') + ']'\n\t }\n\t}\n\t\n\tfunction genNode (node) {\n\t if (node.type === 1) {\n\t return genElement(node)\n\t } else {\n\t return genText(node)\n\t }\n\t}\n\t\n\tfunction genText (text) {\n\t return text.type === 2\n\t ? text.expression // no need for () because already wrapped in _s()\n\t : transformSpecialNewlines(JSON.stringify(text.text))\n\t}\n\t\n\tfunction genSlot (el) {\n\t var slotName = el.slotName || '\"default\"';\n\t var children = genChildren(el);\n\t return (\"_t(\" + slotName + (children ? (\",\" + children) : '') + (el.attrs ? ((children ? '' : ',null') + \",{\" + (el.attrs.map(function (a) { return ((camelize(a.name)) + \":\" + (a.value)); }).join(',')) + \"}\") : '') + \")\")\n\t}\n\t\n\t// componentName is el.component, take it as argument to shun flow's pessimistic refinement\n\tfunction genComponent (componentName, el) {\n\t var children = el.inlineTemplate ? null : genChildren(el);\n\t return (\"_h(\" + componentName + \",\" + (genData(el)) + (children ? (\",\" + children) : '') + \")\")\n\t}\n\t\n\tfunction genProps (props) {\n\t var res = '';\n\t for (var i = 0; i < props.length; i++) {\n\t var prop = props[i];\n\t res += \"\\\"\" + (prop.name) + \"\\\":\" + (transformSpecialNewlines(prop.value)) + \",\";\n\t }\n\t return res.slice(0, -1)\n\t}\n\t\n\t// #3895, #4268\n\tfunction transformSpecialNewlines (text) {\n\t return text\n\t .replace(/\\u2028/g, '\\\\u2028')\n\t .replace(/\\u2029/g, '\\\\u2029')\n\t}\n\t\n\t/* */\n\t\n\t/**\n\t * Compile a template.\n\t */\n\tfunction compile$1 (\n\t template,\n\t options\n\t) {\n\t var ast = parse(template.trim(), options);\n\t optimize(ast, options);\n\t var code = generate(ast, options);\n\t return {\n\t ast: ast,\n\t render: code.render,\n\t staticRenderFns: code.staticRenderFns\n\t }\n\t}\n\t\n\t/* */\n\t\n\t// operators like typeof, instanceof and in are allowed\n\tvar prohibitedKeywordRE = new RegExp('\\\\b' + (\n\t 'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n\t 'super,throw,while,yield,delete,export,import,return,switch,default,' +\n\t 'extends,finally,continue,debugger,function,arguments'\n\t).split(',').join('\\\\b|\\\\b') + '\\\\b');\n\t// check valid identifier for v-for\n\tvar identRE = /[A-Za-z_$][\\w$]*/;\n\t// strip strings in expressions\n\tvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n\t\n\t// detect problematic expressions in a template\n\tfunction detectErrors (ast) {\n\t var errors = [];\n\t if (ast) {\n\t checkNode(ast, errors);\n\t }\n\t return errors\n\t}\n\t\n\tfunction checkNode (node, errors) {\n\t if (node.type === 1) {\n\t for (var name in node.attrsMap) {\n\t if (dirRE.test(name)) {\n\t var value = node.attrsMap[name];\n\t if (value) {\n\t if (name === 'v-for') {\n\t checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), errors);\n\t } else {\n\t checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), errors);\n\t }\n\t }\n\t }\n\t }\n\t if (node.children) {\n\t for (var i = 0; i < node.children.length; i++) {\n\t checkNode(node.children[i], errors);\n\t }\n\t }\n\t } else if (node.type === 2) {\n\t checkExpression(node.expression, node.text, errors);\n\t }\n\t}\n\t\n\tfunction checkFor (node, text, errors) {\n\t checkExpression(node.for || '', text, errors);\n\t checkIdentifier(node.alias, 'v-for alias', text, errors);\n\t checkIdentifier(node.iterator1, 'v-for iterator', text, errors);\n\t checkIdentifier(node.iterator2, 'v-for iterator', text, errors);\n\t}\n\t\n\tfunction checkIdentifier (ident, type, text, errors) {\n\t if (typeof ident === 'string' && !identRE.test(ident)) {\n\t errors.push((\"- invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + text));\n\t }\n\t}\n\t\n\tfunction checkExpression (exp, text, errors) {\n\t try {\n\t new Function((\"return \" + exp));\n\t } catch (e) {\n\t var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n\t if (keywordMatch) {\n\t errors.push(\n\t \"- avoid using JavaScript keyword as property name: \" +\n\t \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + text\n\t );\n\t } else {\n\t errors.push((\"- invalid expression: \" + text));\n\t }\n\t }\n\t}\n\t\n\t/* */\n\t\n\tfunction transformNode (el, options) {\n\t var warn = options.warn || baseWarn;\n\t var staticClass = getAndRemoveAttr(el, 'class');\n\t if (\"development\" !== 'production' && staticClass) {\n\t var expression = parseText(staticClass, options.delimiters);\n\t if (expression) {\n\t warn(\n\t \"class=\\\"\" + staticClass + \"\\\": \" +\n\t 'Interpolation inside attributes has been removed. ' +\n\t 'Use v-bind or the colon shorthand instead. For example, ' +\n\t 'instead of
, use
.'\n\t );\n\t }\n\t }\n\t if (staticClass) {\n\t el.staticClass = JSON.stringify(staticClass);\n\t }\n\t var classBinding = getBindingAttr(el, 'class', false /* getStatic */);\n\t if (classBinding) {\n\t el.classBinding = classBinding;\n\t }\n\t}\n\t\n\tfunction genData$1 (el) {\n\t var data = '';\n\t if (el.staticClass) {\n\t data += \"staticClass:\" + (el.staticClass) + \",\";\n\t }\n\t if (el.classBinding) {\n\t data += \"class:\" + (el.classBinding) + \",\";\n\t }\n\t return data\n\t}\n\t\n\tvar klass$1 = {\n\t staticKeys: ['staticClass'],\n\t transformNode: transformNode,\n\t genData: genData$1\n\t};\n\t\n\t/* */\n\t\n\tfunction transformNode$1 (el, options) {\n\t var warn = options.warn || baseWarn;\n\t var staticStyle = getAndRemoveAttr(el, 'style');\n\t if (staticStyle) {\n\t /* istanbul ignore if */\n\t {\n\t var expression = parseText(staticStyle, options.delimiters);\n\t if (expression) {\n\t warn(\n\t \"style=\\\"\" + staticStyle + \"\\\": \" +\n\t 'Interpolation inside attributes has been removed. ' +\n\t 'Use v-bind or the colon shorthand instead. For example, ' +\n\t 'instead of
, use
.'\n\t );\n\t }\n\t }\n\t el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n\t }\n\t\n\t var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\n\t if (styleBinding) {\n\t el.styleBinding = styleBinding;\n\t }\n\t}\n\t\n\tfunction genData$2 (el) {\n\t var data = '';\n\t if (el.staticStyle) {\n\t data += \"staticStyle:\" + (el.staticStyle) + \",\";\n\t }\n\t if (el.styleBinding) {\n\t data += \"style:(\" + (el.styleBinding) + \"),\";\n\t }\n\t return data\n\t}\n\t\n\tvar style$1 = {\n\t staticKeys: ['staticStyle'],\n\t transformNode: transformNode$1,\n\t genData: genData$2\n\t};\n\t\n\tvar modules$1 = [\n\t klass$1,\n\t style$1\n\t];\n\t\n\t/* */\n\t\n\tvar warn$3;\n\t\n\tfunction model$1 (\n\t el,\n\t dir,\n\t _warn\n\t) {\n\t warn$3 = _warn;\n\t var value = dir.value;\n\t var modifiers = dir.modifiers;\n\t var tag = el.tag;\n\t var type = el.attrsMap.type;\n\t {\n\t var dynamicType = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n\t if (tag === 'input' && dynamicType) {\n\t warn$3(\n\t \"
:\\n\" +\n\t \"v-model does not support dynamic input types. Use v-if branches instead.\"\n\t );\n\t }\n\t }\n\t if (tag === 'select') {\n\t genSelect(el, value, modifiers);\n\t } else if (tag === 'input' && type === 'checkbox') {\n\t genCheckboxModel(el, value, modifiers);\n\t } else if (tag === 'input' && type === 'radio') {\n\t genRadioModel(el, value, modifiers);\n\t } else {\n\t genDefaultModel(el, value, modifiers);\n\t }\n\t // ensure runtime directive metadata\n\t return true\n\t}\n\t\n\tfunction genCheckboxModel (\n\t el,\n\t value,\n\t modifiers\n\t) {\n\t if (\"development\" !== 'production' &&\n\t el.attrsMap.checked != null) {\n\t warn$3(\n\t \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" checked>:\\n\" +\n\t \"inline checked attributes will be ignored when using v-model. \" +\n\t 'Declare initial values in the component\\'s data option instead.'\n\t );\n\t }\n\t var number = modifiers && modifiers.number;\n\t var valueBinding = getBindingAttr(el, 'value') || 'null';\n\t var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n\t var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n\t addProp(el, 'checked',\n\t \"Array.isArray(\" + value + \")\" +\n\t \"?_i(\" + value + \",\" + valueBinding + \")>-1\" +\n\t \":_q(\" + value + \",\" + trueValueBinding + \")\"\n\t );\n\t addHandler(el, 'change',\n\t \"var $$a=\" + value + \",\" +\n\t '$$el=$event.target,' +\n\t \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n\t 'if(Array.isArray($$a)){' +\n\t \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n\t '$$i=_i($$a,$$v);' +\n\t \"if($$c){$$i<0&&(\" + value + \"=$$a.concat($$v))}\" +\n\t \"else{$$i>-1&&(\" + value + \"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}\" +\n\t \"}else{\" + value + \"=$$c}\",\n\t null, true\n\t );\n\t}\n\t\n\tfunction genRadioModel (\n\t el,\n\t value,\n\t modifiers\n\t) {\n\t if (\"development\" !== 'production' &&\n\t el.attrsMap.checked != null) {\n\t warn$3(\n\t \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" checked>:\\n\" +\n\t \"inline checked attributes will be ignored when using v-model. \" +\n\t 'Declare initial values in the component\\'s data option instead.'\n\t );\n\t }\n\t var number = modifiers && modifiers.number;\n\t var valueBinding = getBindingAttr(el, 'value') || 'null';\n\t valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n\t addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n\t addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n\t}\n\t\n\tfunction genDefaultModel (\n\t el,\n\t value,\n\t modifiers\n\t) {\n\t {\n\t if (el.tag === 'input' && el.attrsMap.value) {\n\t warn$3(\n\t \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" value=\\\"\" + (el.attrsMap.value) + \"\\\">:\\n\" +\n\t 'inline value attributes will be ignored when using v-model. ' +\n\t 'Declare initial values in the component\\'s data option instead.'\n\t );\n\t }\n\t if (el.tag === 'textarea' && el.children.length) {\n\t warn$3(\n\t \"