{"version":3,"sources":["webpack:///./node_modules/prismjs/components/prism-markup.min.js","webpack:///./node_modules/prismjs/components/prism-java.min.js","webpack:///./src/templates/doc.jsx","webpack:///./node_modules/prismjs/prism.js","webpack:///./node_modules/prismjs/components/prism-yaml.min.js"],"names":["Prism","languages","markup","comment","prolog","doctype","pattern","greedy","cdata","tag","inside","punctuation","namespace","lookbehind","entity","hooks","add","a","type","attributes","title","content","replace","Object","defineProperty","value","e","s","n","t","RegExp","insertBefore","xml","extend","html","mathml","svg","java","keyword","function","clike","number","operator","alias","annotation","generics","componentDidMount","window","highlightAll","pageQuery","Doc","data","asciidocCopy","document","subtitle","__html","langKey","pageContext","useEffect","className","description","lang","dangerouslySetInnerHTML","_self","uniqueId","_","manual","disableWorkerMessageHandler","util","encode","tokens","Token","Array","isArray","map","o","prototype","toString","call","slice","objId","obj","clone","deepClone","visited","id","key","hasOwnProperty","forEach","v","i","getLanguage","element","test","parentElement","match","toLowerCase","currentScript","Error","err","src","exec","stack","scripts","getElementsByTagName","redef","before","insert","root","grammar","ret","token","newToken","old","DFS","this","callback","property","propertyType","plugins","async","highlightAllUnder","container","env","selector","run","elements","apply","querySelectorAll","highlightElement","language","parent","parentNode","nodeName","code","textContent","insertHighlightedCode","highlightedCode","innerHTML","Worker","worker","filename","onmessage","evt","postMessage","JSON","stringify","immediateClose","highlight","text","tokenize","rest","tokenList","LinkedList","addAfter","head","matchGrammar","startNode","startPos","oneshot","target","patterns","j","length","lookbehindLength","global","flags","source","currentNode","next","pos","tail","str","removeCount","prev","lastIndex","from","index","to","p","k","after","removeFrom","removeRange","wrapped","list","array","node","push","toArray","all","name","callbacks","matchedStr","newNode","count","classes","aliases","join","addEventListener","message","parse","close","script","highlightAutomaticallyCallback","hasAttribute","readyState","defer","requestAnimationFrame","setTimeout","WorkerGlobalScope","self","module","exports","tagName","includedCdataInside","def","string","css","addInlined","javascript","js","querySelector","fileHighlight","Extensions","pre","getAttribute","extension","createElement","appendChild","xhr","XMLHttpRequest","open","onreadystatechange","status","responseText","setAttribute","statusText","send","r","yaml","scalar","directive","datetime","boolean","null","important","yml"],"mappings":"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","file":"component---src-templates-doc-jsx-38fb851fba733cc5515a.js","sourcesContent":["Prism.languages.markup = {\n  comment: /<!--[\\s\\S]*?-->/,\n  prolog: /<\\?[\\s\\S]+?\\?>/,\n  doctype: {\n    pattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:(?!<!--)[^\"'\\]]|\"[^\"]*\"|'[^']*'|<!--[\\s\\S]*?-->)*\\]\\s*)?>/i,\n    greedy: !0\n  },\n  cdata: /<!\\[CDATA\\[[\\s\\S]*?]]>/i,\n  tag: {\n    pattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/i,\n    greedy: !0,\n    inside: {\n      tag: {\n        pattern: /^<\\/?[^\\s>\\/]+/i,\n        inside: {\n          punctuation: /^<\\/?/,\n          namespace: /^[^\\s>\\/:]+:/\n        }\n      },\n      \"attr-value\": {\n        pattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/i,\n        inside: {\n          punctuation: [/^=/, {\n            pattern: /^(\\s*)[\"']|[\"']$/,\n            lookbehind: !0\n          }]\n        }\n      },\n      punctuation: /\\/?>/,\n      \"attr-name\": {\n        pattern: /[^\\s>\\/]+/,\n        inside: {\n          namespace: /^[^\\s>\\/:]+:/\n        }\n      }\n    }\n  },\n  entity: /&#?[\\da-z]{1,8};/i\n}, Prism.languages.markup.tag.inside[\"attr-value\"].inside.entity = Prism.languages.markup.entity, Prism.hooks.add(\"wrap\", function (a) {\n  \"entity\" === a.type && (a.attributes.title = a.content.replace(/&amp;/, \"&\"));\n}), Object.defineProperty(Prism.languages.markup.tag, \"addInlined\", {\n  value: function value(a, e) {\n    var s = {};\n    s[\"language-\" + e] = {\n      pattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n      lookbehind: !0,\n      inside: Prism.languages[e]\n    }, s.cdata = /^<!\\[CDATA\\[|\\]\\]>$/i;\n    var n = {\n      \"included-cdata\": {\n        pattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n        inside: s\n      }\n    };\n    n[\"language-\" + e] = {\n      pattern: /[\\s\\S]+/,\n      inside: Prism.languages[e]\n    };\n    var t = {};\n    t[a] = {\n      pattern: RegExp(\"(<__[\\\\s\\\\S]*?>)(?:<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\\\\s*|[\\\\s\\\\S])*?(?=<\\\\/__>)\".replace(/__/g, function () {\n        return a;\n      }), \"i\"),\n      lookbehind: !0,\n      greedy: !0,\n      inside: n\n    }, Prism.languages.insertBefore(\"markup\", \"cdata\", t);\n  }\n}), Prism.languages.xml = Prism.languages.extend(\"markup\", {}), Prism.languages.html = Prism.languages.markup, Prism.languages.mathml = Prism.languages.markup, Prism.languages.svg = Prism.languages.markup;","!function (e) {\n  var t = /\\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|null|open|opens|package|private|protected|provides|public|record|requires|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\\b/,\n      a = /\\b[A-Z](?:\\w*[a-z]\\w*)?\\b/;\n  e.languages.java = e.languages.extend(\"clike\", {\n    \"class-name\": [a, /\\b[A-Z]\\w*(?=\\s+\\w+\\s*[;,=())])/],\n    keyword: t,\n    function: [e.languages.clike.function, {\n      pattern: /(\\:\\:)[a-z_]\\w*/,\n      lookbehind: !0\n    }],\n    number: /\\b0b[01][01_]*L?\\b|\\b0x[\\da-f_]*\\.?[\\da-f_p+-]+\\b|(?:\\b\\d[\\d_]*\\.?[\\d_]*|\\B\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[dfl]?/i,\n    operator: {\n      pattern: /(^|[^.])(?:<<=?|>>>?=?|->|--|\\+\\+|&&|\\|\\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,\n      lookbehind: !0\n    }\n  }), e.languages.insertBefore(\"java\", \"string\", {\n    \"triple-quoted-string\": {\n      pattern: /\"\"\"[ \\t]*[\\r\\n](?:(?:\"|\"\")?(?:\\\\.|[^\"\\\\]))*\"\"\"/,\n      greedy: !0,\n      alias: \"string\"\n    }\n  }), e.languages.insertBefore(\"java\", \"class-name\", {\n    annotation: {\n      alias: \"punctuation\",\n      pattern: /(^|[^.])@\\w+/,\n      lookbehind: !0\n    },\n    namespace: {\n      pattern: /(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)[a-z]\\w*(?:\\.[a-z]\\w*)+/,\n      lookbehind: !0,\n      inside: {\n        punctuation: /\\./\n      }\n    },\n    generics: {\n      pattern: /<(?:[\\w\\s,.&?]|<(?:[\\w\\s,.&?]|<(?:[\\w\\s,.&?]|<[\\w\\s,.&?]*>)*>)*>)*>/,\n      inside: {\n        \"class-name\": a,\n        keyword: t,\n        punctuation: /[<>(),.:]/,\n        operator: /[?&|]/\n      }\n    }\n  });\n}(Prism);","import React, {useEffect} from 'react';\nimport {graphql} from 'gatsby';\nimport Header from '../components/header';\nimport Seo from '../components/seo';\nimport 'prismjs/prism';\nimport 'prismjs/components/prism-java.min'\nimport 'prismjs/components/prism-markup.min'\nimport 'prismjs/components/prism-yaml.min'\nimport 'prismjs/themes/prism-solarizedlight.css'\nimport '../styles/main.scss';\n\nconst componentDidMount = () => {\n  window.Prism.highlightAll()\n};\n\nconst Doc = ({\n  data: {\n    asciidocCopy: {\n      document: {\n        title,\n        subtitle\n      },\n      html: __html\n    }\n  },\n  pageContext: {langKey}\n}) => {\n  useEffect(componentDidMount, []);\n  return (\n    <div className='eclipse-jkube'>\n      <Seo title={title} description={subtitle} lang={langKey}/>\n      <Header lang={langKey}/>\n      <div className='eclipse-jkube__documentation book toc2 toc-left'>\n        <div\n          className='eclipse-jkube__documentation-content'\n          dangerouslySetInnerHTML={{__html}}\n        />\n      </div>\n    </div>\n  );\n};\n\n\nexport const pageQuery = graphql`\n  query($id: String!) {\n    asciidocCopy(id: { eq: $id }) {\n      html\n      document {\n        title\n        subtitle\n      }\n    }\n  }\n`;\n\nexport default Doc;\n","/* **********************************************\n     Begin prism-core.js\n********************************************** */\nvar _self = typeof window !== 'undefined' ? window // if in browser\n: typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope ? self // if in worker\n: {} // if in node js\n;\n/**\n * Prism: Lightweight, robust, elegant syntax highlighting\n * MIT license http://www.opensource.org/licenses/mit-license.php/\n * @author Lea Verou http://lea.verou.me\n */\n\n\nvar Prism = function (_self) {\n  // Private helper vars\n  var lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\n  var uniqueId = 0;\n  var _ = {\n    manual: _self.Prism && _self.Prism.manual,\n    disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler,\n    util: {\n      encode: function encode(tokens) {\n        if (tokens instanceof Token) {\n          return new Token(tokens.type, encode(tokens.content), tokens.alias);\n        } else if (Array.isArray(tokens)) {\n          return tokens.map(encode);\n        } else {\n          return tokens.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\\u00a0/g, ' ');\n        }\n      },\n      type: function type(o) {\n        return Object.prototype.toString.call(o).slice(8, -1);\n      },\n      objId: function objId(obj) {\n        if (!obj['__id']) {\n          Object.defineProperty(obj, '__id', {\n            value: ++uniqueId\n          });\n        }\n\n        return obj['__id'];\n      },\n      // Deep clone a language definition (e.g. to extend it)\n      clone: function deepClone(o, visited) {\n        var clone,\n            id,\n            type = _.util.type(o);\n\n        visited = visited || {};\n\n        switch (type) {\n          case 'Object':\n            id = _.util.objId(o);\n\n            if (visited[id]) {\n              return visited[id];\n            }\n\n            clone = {};\n            visited[id] = clone;\n\n            for (var key in o) {\n              if (o.hasOwnProperty(key)) {\n                clone[key] = deepClone(o[key], visited);\n              }\n            }\n\n            return clone;\n\n          case 'Array':\n            id = _.util.objId(o);\n\n            if (visited[id]) {\n              return visited[id];\n            }\n\n            clone = [];\n            visited[id] = clone;\n            o.forEach(function (v, i) {\n              clone[i] = deepClone(v, visited);\n            });\n            return clone;\n\n          default:\n            return o;\n        }\n      },\n\n      /**\n       * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.\n       *\n       * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.\n       *\n       * @param {Element} element\n       * @returns {string}\n       */\n      getLanguage: function getLanguage(element) {\n        while (element && !lang.test(element.className)) {\n          element = element.parentElement;\n        }\n\n        if (element) {\n          return (element.className.match(lang) || [, 'none'])[1].toLowerCase();\n        }\n\n        return 'none';\n      },\n\n      /**\n       * Returns the script element that is currently executing.\n       *\n       * This does __not__ work for line script element.\n       *\n       * @returns {HTMLScriptElement | null}\n       */\n      currentScript: function currentScript() {\n        if (typeof document === 'undefined') {\n          return null;\n        }\n\n        if ('currentScript' in document) {\n          return document.currentScript;\n        } // IE11 workaround\n        // we'll get the src of the current script by parsing IE11's error stack trace\n        // this will not work for inline scripts\n\n\n        try {\n          throw new Error();\n        } catch (err) {\n          // Get file src url from stack. Specifically works with the format of stack traces in IE.\n          // A stack will look like this:\n          //\n          // Error\n          //    at _.util.currentScript (http://localhost/components/prism-core.js:119:5)\n          //    at Global code (http://localhost/components/prism-core.js:606:1)\n          var src = (/at [^(\\r\\n]*\\((.*):.+:.+\\)$/i.exec(err.stack) || [])[1];\n\n          if (src) {\n            var scripts = document.getElementsByTagName('script');\n\n            for (var i in scripts) {\n              if (scripts[i].src == src) {\n                return scripts[i];\n              }\n            }\n          }\n\n          return null;\n        }\n      }\n    },\n    languages: {\n      extend: function extend(id, redef) {\n        var lang = _.util.clone(_.languages[id]);\n\n        for (var key in redef) {\n          lang[key] = redef[key];\n        }\n\n        return lang;\n      },\n\n      /**\n       * Insert a token before another token in a language literal\n       * As this needs to recreate the object (we cannot actually insert before keys in object literals),\n       * we cannot just provide an object, we need an object and a key.\n       * @param inside The key (or language id) of the parent\n       * @param before The key to insert before.\n       * @param insert Object with the key/value pairs to insert\n       * @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted.\n       */\n      insertBefore: function insertBefore(inside, before, insert, root) {\n        root = root || _.languages;\n        var grammar = root[inside];\n        var ret = {};\n\n        for (var token in grammar) {\n          if (grammar.hasOwnProperty(token)) {\n            if (token == before) {\n              for (var newToken in insert) {\n                if (insert.hasOwnProperty(newToken)) {\n                  ret[newToken] = insert[newToken];\n                }\n              }\n            } // Do not insert token which also occur in insert. See #1525\n\n\n            if (!insert.hasOwnProperty(token)) {\n              ret[token] = grammar[token];\n            }\n          }\n        }\n\n        var old = root[inside];\n        root[inside] = ret; // Update references in other language definitions\n\n        _.languages.DFS(_.languages, function (key, value) {\n          if (value === old && key != inside) {\n            this[key] = ret;\n          }\n        });\n\n        return ret;\n      },\n      // Traverse a language definition with Depth First Search\n      DFS: function DFS(o, callback, type, visited) {\n        visited = visited || {};\n        var objId = _.util.objId;\n\n        for (var i in o) {\n          if (o.hasOwnProperty(i)) {\n            callback.call(o, i, o[i], type || i);\n\n            var property = o[i],\n                propertyType = _.util.type(property);\n\n            if (propertyType === 'Object' && !visited[objId(property)]) {\n              visited[objId(property)] = true;\n              DFS(property, callback, null, visited);\n            } else if (propertyType === 'Array' && !visited[objId(property)]) {\n              visited[objId(property)] = true;\n              DFS(property, callback, i, visited);\n            }\n          }\n        }\n      }\n    },\n    plugins: {},\n    highlightAll: function highlightAll(async, callback) {\n      _.highlightAllUnder(document, async, callback);\n    },\n    highlightAllUnder: function highlightAllUnder(container, async, callback) {\n      var env = {\n        callback: callback,\n        container: container,\n        selector: 'code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'\n      };\n\n      _.hooks.run('before-highlightall', env);\n\n      env.elements = Array.prototype.slice.apply(env.container.querySelectorAll(env.selector));\n\n      _.hooks.run('before-all-elements-highlight', env);\n\n      for (var i = 0, element; element = env.elements[i++];) {\n        _.highlightElement(element, async === true, env.callback);\n      }\n    },\n    highlightElement: function highlightElement(element, async, callback) {\n      // Find language\n      var language = _.util.getLanguage(element);\n\n      var grammar = _.languages[language]; // Set language on the element, if not present\n\n      element.className = element.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language; // Set language on the parent, for styling\n\n      var parent = element.parentNode;\n\n      if (parent && parent.nodeName.toLowerCase() === 'pre') {\n        parent.className = parent.className.replace(lang, '').replace(/\\s+/g, ' ') + ' language-' + language;\n      }\n\n      var code = element.textContent;\n      var env = {\n        element: element,\n        language: language,\n        grammar: grammar,\n        code: code\n      };\n\n      function insertHighlightedCode(highlightedCode) {\n        env.highlightedCode = highlightedCode;\n\n        _.hooks.run('before-insert', env);\n\n        env.element.innerHTML = env.highlightedCode;\n\n        _.hooks.run('after-highlight', env);\n\n        _.hooks.run('complete', env);\n\n        callback && callback.call(env.element);\n      }\n\n      _.hooks.run('before-sanity-check', env);\n\n      if (!env.code) {\n        _.hooks.run('complete', env);\n\n        callback && callback.call(env.element);\n        return;\n      }\n\n      _.hooks.run('before-highlight', env);\n\n      if (!env.grammar) {\n        insertHighlightedCode(_.util.encode(env.code));\n        return;\n      }\n\n      if (async && _self.Worker) {\n        var worker = new Worker(_.filename);\n\n        worker.onmessage = function (evt) {\n          insertHighlightedCode(evt.data);\n        };\n\n        worker.postMessage(JSON.stringify({\n          language: env.language,\n          code: env.code,\n          immediateClose: true\n        }));\n      } else {\n        insertHighlightedCode(_.highlight(env.code, env.grammar, env.language));\n      }\n    },\n    highlight: function highlight(text, grammar, language) {\n      var env = {\n        code: text,\n        grammar: grammar,\n        language: language\n      };\n\n      _.hooks.run('before-tokenize', env);\n\n      env.tokens = _.tokenize(env.code, env.grammar);\n\n      _.hooks.run('after-tokenize', env);\n\n      return Token.stringify(_.util.encode(env.tokens), env.language);\n    },\n    tokenize: function tokenize(text, grammar) {\n      var rest = grammar.rest;\n\n      if (rest) {\n        for (var token in rest) {\n          grammar[token] = rest[token];\n        }\n\n        delete grammar.rest;\n      }\n\n      var tokenList = new LinkedList();\n      addAfter(tokenList, tokenList.head, text);\n      matchGrammar(text, tokenList, grammar, tokenList.head, 0);\n      return toArray(tokenList);\n    },\n    hooks: {\n      all: {},\n      add: function add(name, callback) {\n        var hooks = _.hooks.all;\n        hooks[name] = hooks[name] || [];\n        hooks[name].push(callback);\n      },\n      run: function run(name, env) {\n        var callbacks = _.hooks.all[name];\n\n        if (!callbacks || !callbacks.length) {\n          return;\n        }\n\n        for (var i = 0, callback; callback = callbacks[i++];) {\n          callback(env);\n        }\n      }\n    },\n    Token: Token\n  };\n  _self.Prism = _;\n\n  function Token(type, content, alias, matchedStr, greedy) {\n    this.type = type;\n    this.content = content;\n    this.alias = alias; // Copy of the full string this token was created from\n\n    this.length = (matchedStr || '').length | 0;\n    this.greedy = !!greedy;\n  }\n\n  Token.stringify = function stringify(o, language) {\n    if (typeof o == 'string') {\n      return o;\n    }\n\n    if (Array.isArray(o)) {\n      var s = '';\n      o.forEach(function (e) {\n        s += stringify(e, language);\n      });\n      return s;\n    }\n\n    var env = {\n      type: o.type,\n      content: stringify(o.content, language),\n      tag: 'span',\n      classes: ['token', o.type],\n      attributes: {},\n      language: language\n    };\n    var aliases = o.alias;\n\n    if (aliases) {\n      if (Array.isArray(aliases)) {\n        Array.prototype.push.apply(env.classes, aliases);\n      } else {\n        env.classes.push(aliases);\n      }\n    }\n\n    _.hooks.run('wrap', env);\n\n    var attributes = '';\n\n    for (var name in env.attributes) {\n      attributes += ' ' + name + '=\"' + (env.attributes[name] || '').replace(/\"/g, '&quot;') + '\"';\n    }\n\n    return '<' + env.tag + ' class=\"' + env.classes.join(' ') + '\"' + attributes + '>' + env.content + '</' + env.tag + '>';\n  };\n  /**\n   * @param {string} text\n   * @param {LinkedList<string | Token>} tokenList\n   * @param {any} grammar\n   * @param {LinkedListNode<string | Token>} startNode\n   * @param {number} startPos\n   * @param {boolean} [oneshot=false]\n   * @param {string} [target]\n   */\n\n\n  function matchGrammar(text, tokenList, grammar, startNode, startPos, oneshot, target) {\n    for (var token in grammar) {\n      if (!grammar.hasOwnProperty(token) || !grammar[token]) {\n        continue;\n      }\n\n      var patterns = grammar[token];\n      patterns = Array.isArray(patterns) ? patterns : [patterns];\n\n      for (var j = 0; j < patterns.length; ++j) {\n        if (target && target == token + ',' + j) {\n          return;\n        }\n\n        var pattern = patterns[j],\n            inside = pattern.inside,\n            lookbehind = !!pattern.lookbehind,\n            greedy = !!pattern.greedy,\n            lookbehindLength = 0,\n            alias = pattern.alias;\n\n        if (greedy && !pattern.pattern.global) {\n          // Without the global flag, lastIndex won't work\n          var flags = pattern.pattern.toString().match(/[imsuy]*$/)[0];\n          pattern.pattern = RegExp(pattern.pattern.source, flags + 'g');\n        }\n\n        pattern = pattern.pattern || pattern;\n\n        for ( // iterate the token list and keep track of the current token/string position\n        var currentNode = startNode.next, pos = startPos; currentNode !== tokenList.tail; pos += currentNode.value.length, currentNode = currentNode.next) {\n          var str = currentNode.value;\n\n          if (tokenList.length > text.length) {\n            // Something went terribly wrong, ABORT, ABORT!\n            return;\n          }\n\n          if (str instanceof Token) {\n            continue;\n          }\n\n          var removeCount = 1; // this is the to parameter of removeBetween\n\n          if (greedy && currentNode != tokenList.tail.prev) {\n            pattern.lastIndex = pos;\n            var match = pattern.exec(text);\n\n            if (!match) {\n              break;\n            }\n\n            var from = match.index + (lookbehind && match[1] ? match[1].length : 0);\n            var to = match.index + match[0].length;\n            var p = pos; // find the node that contains the match\n\n            p += currentNode.value.length;\n\n            while (from >= p) {\n              currentNode = currentNode.next;\n              p += currentNode.value.length;\n            } // adjust pos (and p)\n\n\n            p -= currentNode.value.length;\n            pos = p; // the current node is a Token, then the match starts inside another Token, which is invalid\n\n            if (currentNode.value instanceof Token) {\n              continue;\n            } // find the last node which is affected by this match\n\n\n            for (var k = currentNode; k !== tokenList.tail && (p < to || typeof k.value === 'string' && !k.prev.value.greedy); k = k.next) {\n              removeCount++;\n              p += k.value.length;\n            }\n\n            removeCount--; // replace with the new match\n\n            str = text.slice(pos, p);\n            match.index -= pos;\n          } else {\n            pattern.lastIndex = 0;\n            var match = pattern.exec(str);\n          }\n\n          if (!match) {\n            if (oneshot) {\n              break;\n            }\n\n            continue;\n          }\n\n          if (lookbehind) {\n            lookbehindLength = match[1] ? match[1].length : 0;\n          }\n\n          var from = match.index + lookbehindLength,\n              match = match[0].slice(lookbehindLength),\n              to = from + match.length,\n              before = str.slice(0, from),\n              after = str.slice(to);\n          var removeFrom = currentNode.prev;\n\n          if (before) {\n            removeFrom = addAfter(tokenList, removeFrom, before);\n            pos += before.length;\n          }\n\n          removeRange(tokenList, removeFrom, removeCount);\n          var wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias, match, greedy);\n          currentNode = addAfter(tokenList, removeFrom, wrapped);\n\n          if (after) {\n            addAfter(tokenList, currentNode, after);\n          }\n\n          if (removeCount > 1) matchGrammar(text, tokenList, grammar, currentNode.prev, pos, true, token + ',' + j);\n          if (oneshot) break;\n        }\n      }\n    }\n  }\n  /**\n   * @typedef LinkedListNode\n   * @property {T} value\n   * @property {LinkedListNode<T> | null} prev The previous node.\n   * @property {LinkedListNode<T> | null} next The next node.\n   * @template T\n   */\n\n  /**\n   * @template T\n   */\n\n\n  function LinkedList() {\n    /** @type {LinkedListNode<T>} */\n    var head = {\n      value: null,\n      prev: null,\n      next: null\n    };\n    /** @type {LinkedListNode<T>} */\n\n    var tail = {\n      value: null,\n      prev: head,\n      next: null\n    };\n    head.next = tail;\n    /** @type {LinkedListNode<T>} */\n\n    this.head = head;\n    /** @type {LinkedListNode<T>} */\n\n    this.tail = tail;\n    this.length = 0;\n  }\n  /**\n   * Adds a new node with the given value to the list.\n   * @param {LinkedList<T>} list\n   * @param {LinkedListNode<T>} node\n   * @param {T} value\n   * @returns {LinkedListNode<T>} The added node.\n   * @template T\n   */\n\n\n  function addAfter(list, node, value) {\n    // assumes that node != list.tail && values.length >= 0\n    var next = node.next;\n    var newNode = {\n      value: value,\n      prev: node,\n      next: next\n    };\n    node.next = newNode;\n    next.prev = newNode;\n    list.length++;\n    return newNode;\n  }\n  /**\n   * Removes `count` nodes after the given node. The given node will not be removed.\n   * @param {LinkedList<T>} list\n   * @param {LinkedListNode<T>} node\n   * @param {number} count\n   * @template T\n   */\n\n\n  function removeRange(list, node, count) {\n    var next = node.next;\n\n    for (var i = 0; i < count && next !== list.tail; i++) {\n      next = next.next;\n    }\n\n    node.next = next;\n    next.prev = node;\n    list.length -= i;\n  }\n  /**\n   * @param {LinkedList<T>} list\n   * @returns {T[]}\n   * @template T\n   */\n\n\n  function toArray(list) {\n    var array = [];\n    var node = list.head.next;\n\n    while (node !== list.tail) {\n      array.push(node.value);\n      node = node.next;\n    }\n\n    return array;\n  }\n\n  if (!_self.document) {\n    if (!_self.addEventListener) {\n      // in Node.js\n      return _;\n    }\n\n    if (!_.disableWorkerMessageHandler) {\n      // In worker\n      _self.addEventListener('message', function (evt) {\n        var message = JSON.parse(evt.data),\n            lang = message.language,\n            code = message.code,\n            immediateClose = message.immediateClose;\n\n        _self.postMessage(_.highlight(code, _.languages[lang], lang));\n\n        if (immediateClose) {\n          _self.close();\n        }\n      }, false);\n    }\n\n    return _;\n  } //Get current script and highlight\n\n\n  var script = _.util.currentScript();\n\n  if (script) {\n    _.filename = script.src;\n\n    if (script.hasAttribute('data-manual')) {\n      _.manual = true;\n    }\n  }\n\n  function highlightAutomaticallyCallback() {\n    if (!_.manual) {\n      _.highlightAll();\n    }\n  }\n\n  if (!_.manual) {\n    // If the document state is \"loading\", then we'll use DOMContentLoaded.\n    // If the document state is \"interactive\" and the prism.js script is deferred, then we'll also use the\n    // DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they\n    // might take longer one animation frame to execute which can create a race condition where only some plugins have\n    // been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded.\n    // See https://github.com/PrismJS/prism/issues/2102\n    var readyState = document.readyState;\n\n    if (readyState === 'loading' || readyState === 'interactive' && script && script.defer) {\n      document.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback);\n    } else {\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(highlightAutomaticallyCallback);\n      } else {\n        window.setTimeout(highlightAutomaticallyCallback, 16);\n      }\n    }\n  }\n\n  return _;\n}(_self);\n\nif (typeof module !== 'undefined' && module.exports) {\n  module.exports = Prism;\n} // hack for components to work correctly in node.js\n\n\nif (typeof global !== 'undefined') {\n  global.Prism = Prism;\n}\n/* **********************************************\n     Begin prism-markup.js\n********************************************** */\n\n\nPrism.languages.markup = {\n  'comment': /<!--[\\s\\S]*?-->/,\n  'prolog': /<\\?[\\s\\S]+?\\?>/,\n  'doctype': {\n    pattern: /<!DOCTYPE(?:[^>\"'[\\]]|\"[^\"]*\"|'[^']*')+(?:\\[(?:(?!<!--)[^\"'\\]]|\"[^\"]*\"|'[^']*'|<!--[\\s\\S]*?-->)*\\]\\s*)?>/i,\n    greedy: true\n  },\n  'cdata': /<!\\[CDATA\\[[\\s\\S]*?]]>/i,\n  'tag': {\n    pattern: /<\\/?(?!\\d)[^\\s>\\/=$<%]+(?:\\s(?:\\s*[^\\s>\\/=]+(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))|(?=[\\s/>])))+)?\\s*\\/?>/i,\n    greedy: true,\n    inside: {\n      'tag': {\n        pattern: /^<\\/?[^\\s>\\/]+/i,\n        inside: {\n          'punctuation': /^<\\/?/,\n          'namespace': /^[^\\s>\\/:]+:/\n        }\n      },\n      'attr-value': {\n        pattern: /=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+)/i,\n        inside: {\n          'punctuation': [/^=/, {\n            pattern: /^(\\s*)[\"']|[\"']$/,\n            lookbehind: true\n          }]\n        }\n      },\n      'punctuation': /\\/?>/,\n      'attr-name': {\n        pattern: /[^\\s>\\/]+/,\n        inside: {\n          'namespace': /^[^\\s>\\/:]+:/\n        }\n      }\n    }\n  },\n  'entity': /&#?[\\da-z]{1,8};/i\n};\nPrism.languages.markup['tag'].inside['attr-value'].inside['entity'] = Prism.languages.markup['entity']; // Plugin to make entity title show the real entity, idea by Roman Komarov\n\nPrism.hooks.add('wrap', function (env) {\n  if (env.type === 'entity') {\n    env.attributes['title'] = env.content.replace(/&amp;/, '&');\n  }\n});\nObject.defineProperty(Prism.languages.markup.tag, 'addInlined', {\n  /**\n   * Adds an inlined language to markup.\n   *\n   * An example of an inlined language is CSS with `<style>` tags.\n   *\n   * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as\n   * case insensitive.\n   * @param {string} lang The language key.\n   * @example\n   * addInlined('style', 'css');\n   */\n  value: function addInlined(tagName, lang) {\n    var includedCdataInside = {};\n    includedCdataInside['language-' + lang] = {\n      pattern: /(^<!\\[CDATA\\[)[\\s\\S]+?(?=\\]\\]>$)/i,\n      lookbehind: true,\n      inside: Prism.languages[lang]\n    };\n    includedCdataInside['cdata'] = /^<!\\[CDATA\\[|\\]\\]>$/i;\n    var inside = {\n      'included-cdata': {\n        pattern: /<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/i,\n        inside: includedCdataInside\n      }\n    };\n    inside['language-' + lang] = {\n      pattern: /[\\s\\S]+/,\n      inside: Prism.languages[lang]\n    };\n    var def = {};\n    def[tagName] = {\n      pattern: RegExp(/(<__[\\s\\S]*?>)(?:<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\s*|[\\s\\S])*?(?=<\\/__>)/.source.replace(/__/g, function () {\n        return tagName;\n      }), 'i'),\n      lookbehind: true,\n      greedy: true,\n      inside: inside\n    };\n    Prism.languages.insertBefore('markup', 'cdata', def);\n  }\n});\nPrism.languages.xml = Prism.languages.extend('markup', {});\nPrism.languages.html = Prism.languages.markup;\nPrism.languages.mathml = Prism.languages.markup;\nPrism.languages.svg = Prism.languages.markup;\n/* **********************************************\n     Begin prism-css.js\n********************************************** */\n\n(function (Prism) {\n  var string = /(\"|')(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/;\n  Prism.languages.css = {\n    'comment': /\\/\\*[\\s\\S]*?\\*\\//,\n    'atrule': {\n      pattern: /@[\\w-]+[\\s\\S]*?(?:;|(?=\\s*\\{))/,\n      inside: {\n        'rule': /^@[\\w-]+/,\n        'selector-function-argument': {\n          pattern: /(\\bselector\\s*\\((?!\\s*\\))\\s*)(?:[^()]|\\((?:[^()]|\\([^()]*\\))*\\))+?(?=\\s*\\))/,\n          lookbehind: true,\n          alias: 'selector'\n        } // See rest below\n\n      }\n    },\n    'url': {\n      pattern: RegExp('url\\\\((?:' + string.source + '|[^\\n\\r()]*)\\\\)', 'i'),\n      greedy: true,\n      inside: {\n        'function': /^url/i,\n        'punctuation': /^\\(|\\)$/\n      }\n    },\n    'selector': RegExp('[^{}\\\\s](?:[^{};\"\\']|' + string.source + ')*?(?=\\\\s*\\\\{)'),\n    'string': {\n      pattern: string,\n      greedy: true\n    },\n    'property': /[-_a-z\\xA0-\\uFFFF][-\\w\\xA0-\\uFFFF]*(?=\\s*:)/i,\n    'important': /!important\\b/i,\n    'function': /[-a-z0-9]+(?=\\()/i,\n    'punctuation': /[(){};:,]/\n  };\n  Prism.languages.css['atrule'].inside.rest = Prism.languages.css;\n  var markup = Prism.languages.markup;\n\n  if (markup) {\n    markup.tag.addInlined('style', 'css');\n    Prism.languages.insertBefore('inside', 'attr-value', {\n      'style-attr': {\n        pattern: /\\s*style=(\"|')(?:\\\\[\\s\\S]|(?!\\1)[^\\\\])*\\1/i,\n        inside: {\n          'attr-name': {\n            pattern: /^\\s*style/i,\n            inside: markup.tag.inside\n          },\n          'punctuation': /^\\s*=\\s*['\"]|['\"]\\s*$/,\n          'attr-value': {\n            pattern: /.+/i,\n            inside: Prism.languages.css\n          }\n        },\n        alias: 'language-css'\n      }\n    }, markup.tag);\n  }\n})(Prism);\n/* **********************************************\n     Begin prism-clike.js\n********************************************** */\n\n\nPrism.languages.clike = {\n  'comment': [{\n    pattern: /(^|[^\\\\])\\/\\*[\\s\\S]*?(?:\\*\\/|$)/,\n    lookbehind: true\n  }, {\n    pattern: /(^|[^\\\\:])\\/\\/.*/,\n    lookbehind: true,\n    greedy: true\n  }],\n  'string': {\n    pattern: /([\"'])(?:\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\n    greedy: true\n  },\n  'class-name': {\n    pattern: /(\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+|\\bcatch\\s+\\()[\\w.\\\\]+/i,\n    lookbehind: true,\n    inside: {\n      'punctuation': /[.\\\\]/\n    }\n  },\n  'keyword': /\\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\n  'boolean': /\\b(?:true|false)\\b/,\n  'function': /\\w+(?=\\()/,\n  'number': /\\b0x[\\da-f]+\\b|(?:\\b\\d+\\.?\\d*|\\B\\.\\d+)(?:e[+-]?\\d+)?/i,\n  'operator': /[<>]=?|[!=]=?=?|--?|\\+\\+?|&&?|\\|\\|?|[?*/~^%]/,\n  'punctuation': /[{}[\\];(),.:]/\n};\n/* **********************************************\n     Begin prism-javascript.js\n********************************************** */\n\nPrism.languages.javascript = Prism.languages.extend('clike', {\n  'class-name': [Prism.languages.clike['class-name'], {\n    pattern: /(^|[^$\\w\\xA0-\\uFFFF])[_$A-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\.(?:prototype|constructor))/,\n    lookbehind: true\n  }],\n  'keyword': [{\n    pattern: /((?:^|})\\s*)(?:catch|finally)\\b/,\n    lookbehind: true\n  }, {\n    pattern: /(^|[^.]|\\.\\.\\.\\s*)\\b(?:as|async(?=\\s*(?:function\\b|\\(|[$\\w\\xA0-\\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\\b/,\n    lookbehind: true\n  }],\n  'number': /\\b(?:(?:0[xX](?:[\\dA-Fa-f](?:_[\\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\\d(?:_\\d)?)+n|NaN|Infinity)\\b|(?:\\b(?:\\d(?:_\\d)?)+\\.?(?:\\d(?:_\\d)?)*|\\B\\.(?:\\d(?:_\\d)?)+)(?:[Ee][+-]?(?:\\d(?:_\\d)?)+)?/,\n  // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)\n  'function': /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*(?:\\.\\s*(?:apply|bind|call)\\s*)?\\()/,\n  'operator': /--|\\+\\+|\\*\\*=?|=>|&&|\\|\\||[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\\.{3}|\\?[.?]?|[~:]/\n});\nPrism.languages.javascript['class-name'][0].pattern = /(\\b(?:class|interface|extends|implements|instanceof|new)\\s+)[\\w.\\\\]+/;\nPrism.languages.insertBefore('javascript', 'keyword', {\n  'regex': {\n    pattern: /((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s])\\s*)\\/(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[gimyus]{0,6}(?=(?:\\s|\\/\\*[\\s\\S]*?\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))/,\n    lookbehind: true,\n    greedy: true\n  },\n  // This must be declared before keyword because we use \"function\" inside the look-forward\n  'function-variable': {\n    pattern: /#?[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*[=:]\\s*(?:async\\s*)?(?:\\bfunction\\b|(?:\\((?:[^()]|\\([^()]*\\))*\\)|[_$a-zA-Z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)\\s*=>))/,\n    alias: 'function'\n  },\n  'parameter': [{\n    pattern: /(function(?:\\s+[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*)?\\s*\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\))/,\n    lookbehind: true,\n    inside: Prism.languages.javascript\n  }, {\n    pattern: /[_$a-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*(?=\\s*=>)/i,\n    inside: Prism.languages.javascript\n  }, {\n    pattern: /(\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*=>)/,\n    lookbehind: true,\n    inside: Prism.languages.javascript\n  }, {\n    pattern: /((?:\\b|\\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\\w\\xA0-\\uFFFF]))(?:[_$A-Za-z\\xA0-\\uFFFF][$\\w\\xA0-\\uFFFF]*\\s*)\\(\\s*)(?!\\s)(?:[^()]|\\([^()]*\\))+?(?=\\s*\\)\\s*\\{)/,\n    lookbehind: true,\n    inside: Prism.languages.javascript\n  }],\n  'constant': /\\b[A-Z](?:[A-Z_]|\\dx?)*\\b/\n});\nPrism.languages.insertBefore('javascript', 'string', {\n  'template-string': {\n    pattern: /`(?:\\\\[\\s\\S]|\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\\${)[^\\\\`])*`/,\n    greedy: true,\n    inside: {\n      'template-punctuation': {\n        pattern: /^`|`$/,\n        alias: 'string'\n      },\n      'interpolation': {\n        pattern: /((?:^|[^\\\\])(?:\\\\{2})*)\\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,\n        lookbehind: true,\n        inside: {\n          'interpolation-punctuation': {\n            pattern: /^\\${|}$/,\n            alias: 'punctuation'\n          },\n          rest: Prism.languages.javascript\n        }\n      },\n      'string': /[\\s\\S]+/\n    }\n  }\n});\n\nif (Prism.languages.markup) {\n  Prism.languages.markup.tag.addInlined('script', 'javascript');\n}\n\nPrism.languages.js = Prism.languages.javascript;\n/* **********************************************\n     Begin prism-file-highlight.js\n********************************************** */\n\n(function () {\n  if (typeof self === 'undefined' || !self.Prism || !self.document || !document.querySelector) {\n    return;\n  }\n  /**\n   * @param {Element} [container=document]\n   */\n\n\n  self.Prism.fileHighlight = function (container) {\n    container = container || document;\n    var Extensions = {\n      'js': 'javascript',\n      'py': 'python',\n      'rb': 'ruby',\n      'ps1': 'powershell',\n      'psm1': 'powershell',\n      'sh': 'bash',\n      'bat': 'batch',\n      'h': 'c',\n      'tex': 'latex'\n    };\n    Array.prototype.slice.call(container.querySelectorAll('pre[data-src]')).forEach(function (pre) {\n      // ignore if already loaded\n      if (pre.hasAttribute('data-src-loaded')) {\n        return;\n      } // load current\n\n\n      var src = pre.getAttribute('data-src');\n      var language,\n          parent = pre;\n      var lang = /\\blang(?:uage)?-([\\w-]+)\\b/i;\n\n      while (parent && !lang.test(parent.className)) {\n        parent = parent.parentNode;\n      }\n\n      if (parent) {\n        language = (pre.className.match(lang) || [, ''])[1];\n      }\n\n      if (!language) {\n        var extension = (src.match(/\\.(\\w+)$/) || [, ''])[1];\n        language = Extensions[extension] || extension;\n      }\n\n      var code = document.createElement('code');\n      code.className = 'language-' + language;\n      pre.textContent = '';\n      code.textContent = 'Loading…';\n      pre.appendChild(code);\n      var xhr = new XMLHttpRequest();\n      xhr.open('GET', src, true);\n\n      xhr.onreadystatechange = function () {\n        if (xhr.readyState == 4) {\n          if (xhr.status < 400 && xhr.responseText) {\n            code.textContent = xhr.responseText;\n            Prism.highlightElement(code); // mark as loaded\n\n            pre.setAttribute('data-src-loaded', '');\n          } else if (xhr.status >= 400) {\n            code.textContent = '✖ Error ' + xhr.status + ' while fetching file: ' + xhr.statusText;\n          } else {\n            code.textContent = '✖ Error: File does not exist or is empty';\n          }\n        }\n      };\n\n      xhr.send(null);\n    });\n  };\n\n  document.addEventListener('DOMContentLoaded', function () {\n    // execute inside handler, for dropping Event as argument\n    self.Prism.fileHighlight();\n  });\n})();","!function (n) {\n  var t = /[*&][^\\s[\\]{},]+/,\n      e = /!(?:<[\\w\\-%#;/?:@&=+$,.!~*'()[\\]]+>|(?:[a-zA-Z\\d-]*!)?[\\w\\-%#;/?:@&=+$.~*'()]+)?/,\n      r = \"(?:\" + e.source + \"(?:[ \\t]+\" + t.source + \")?|\" + t.source + \"(?:[ \\t]+\" + e.source + \")?)\";\n\n  function a(n, t) {\n    t = (t || \"\").replace(/m/g, \"\") + \"m\";\n    var e = \"([:\\\\-,[{]\\\\s*(?:\\\\s<<prop>>[ \\t]+)?)(?:<<value>>)(?=[ \\t]*(?:$|,|]|}|\\\\s*#))\".replace(/<<prop>>/g, function () {\n      return r;\n    }).replace(/<<value>>/g, function () {\n      return n;\n    });\n    return RegExp(e, t);\n  }\n\n  n.languages.yaml = {\n    scalar: {\n      pattern: RegExp(\"([\\\\-:]\\\\s*(?:\\\\s<<prop>>[ \\t]+)?[|>])[ \\t]*(?:((?:\\r?\\n|\\r)[ \\t]+)[^\\r\\n]+(?:\\\\2[^\\r\\n]+)*)\".replace(/<<prop>>/g, function () {\n        return r;\n      })),\n      lookbehind: !0,\n      alias: \"string\"\n    },\n    comment: /#.*/,\n    key: {\n      pattern: RegExp(\"((?:^|[:\\\\-,[{\\r\\n?])[ \\t]*(?:<<prop>>[ \\t]+)?)[^\\r\\n{[\\\\]},#\\\\s]+?(?=\\\\s*:\\\\s)\".replace(/<<prop>>/g, function () {\n        return r;\n      })),\n      lookbehind: !0,\n      alias: \"atrule\"\n    },\n    directive: {\n      pattern: /(^[ \\t]*)%.+/m,\n      lookbehind: !0,\n      alias: \"important\"\n    },\n    datetime: {\n      pattern: a(\"\\\\d{4}-\\\\d\\\\d?-\\\\d\\\\d?(?:[tT]|[ \\t]+)\\\\d\\\\d?:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?[ \\t]*(?:Z|[-+]\\\\d\\\\d?(?::\\\\d{2})?)?|\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d\\\\d?:\\\\d{2}(?::\\\\d{2}(?:\\\\.\\\\d*)?)?\"),\n      lookbehind: !0,\n      alias: \"number\"\n    },\n    boolean: {\n      pattern: a(\"true|false\", \"i\"),\n      lookbehind: !0,\n      alias: \"important\"\n    },\n    null: {\n      pattern: a(\"null|~\", \"i\"),\n      lookbehind: !0,\n      alias: \"important\"\n    },\n    string: {\n      pattern: a(\"(\\\"|')(?:(?!\\\\2)[^\\\\\\\\\\r\\n]|\\\\\\\\.)*\\\\2\"),\n      lookbehind: !0,\n      greedy: !0\n    },\n    number: {\n      pattern: a(\"[+-]?(?:0x[\\\\da-f]+|0o[0-7]+|(?:\\\\d+\\\\.?\\\\d*|\\\\.?\\\\d+)(?:e[+-]?\\\\d+)?|\\\\.inf|\\\\.nan)\", \"i\"),\n      lookbehind: !0\n    },\n    tag: e,\n    important: t,\n    punctuation: /---|[:[\\]{}\\-,|>?]|\\.\\.\\./\n  }, n.languages.yml = n.languages.yaml;\n}(Prism);"],"sourceRoot":""}