{"version":3,"sources":["webpack:///./node_modules/linkify-it/index.js","webpack:///./node_modules/uc.micro/index.js","webpack:///./node_modules/node-libs-browser/node_modules/punycode/punycode.js","webpack:///./node_modules/markdown-it/index.js","webpack:///./node_modules/linkify-it/lib/re.js","webpack:///./node_modules/markdown-it/lib/index.js","webpack:///./node_modules/mdurl/encode.js","webpack:///./node_modules/mdurl/decode.js","webpack:///./node_modules/mdurl/format.js","webpack:///./node_modules/mdurl/parse.js","webpack:///./node_modules/uc.micro/categories/Cf/regex.js","webpack:///./node_modules/markdown-it/lib/helpers/index.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_label.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_destination.js","webpack:///./node_modules/markdown-it/lib/helpers/parse_link_title.js","webpack:///./node_modules/markdown-it/lib/renderer.js","webpack:///./node_modules/markdown-it/lib/parser_core.js","webpack:///./node_modules/markdown-it/lib/rules_core/normalize.js","webpack:///./node_modules/markdown-it/lib/rules_core/block.js","webpack:///./node_modules/markdown-it/lib/rules_core/inline.js","webpack:///./node_modules/markdown-it/lib/rules_core/linkify.js","webpack:///./node_modules/markdown-it/lib/rules_core/replacements.js","webpack:///./node_modules/markdown-it/lib/rules_core/smartquotes.js","webpack:///./node_modules/markdown-it/lib/rules_core/text_join.js","webpack:///./node_modules/markdown-it/lib/rules_core/state_core.js","webpack:///./node_modules/markdown-it/lib/parser_block.js","webpack:///./node_modules/markdown-it/lib/rules_block/table.js","webpack:///./node_modules/markdown-it/lib/rules_block/code.js","webpack:///./node_modules/markdown-it/lib/rules_block/fence.js","webpack:///./node_modules/markdown-it/lib/rules_block/blockquote.js","webpack:///./node_modules/markdown-it/lib/rules_block/hr.js","webpack:///./node_modules/markdown-it/lib/rules_block/list.js","webpack:///./node_modules/markdown-it/lib/rules_block/reference.js","webpack:///./node_modules/markdown-it/lib/rules_block/html_block.js","webpack:///./node_modules/markdown-it/lib/common/html_blocks.js","webpack:///./node_modules/markdown-it/lib/rules_block/heading.js","webpack:///./node_modules/markdown-it/lib/rules_block/lheading.js","webpack:///./node_modules/markdown-it/lib/rules_block/paragraph.js","webpack:///./node_modules/markdown-it/lib/rules_block/state_block.js","webpack:///./node_modules/markdown-it/lib/parser_inline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/text.js","webpack:///./node_modules/markdown-it/lib/rules_inline/linkify.js","webpack:///./node_modules/markdown-it/lib/rules_inline/newline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/escape.js","webpack:///./node_modules/markdown-it/lib/rules_inline/backticks.js","webpack:///./node_modules/markdown-it/lib/rules_inline/link.js","webpack:///./node_modules/markdown-it/lib/rules_inline/image.js","webpack:///./node_modules/markdown-it/lib/rules_inline/autolink.js","webpack:///./node_modules/markdown-it/lib/rules_inline/html_inline.js","webpack:///./node_modules/markdown-it/lib/rules_inline/entity.js","webpack:///./node_modules/markdown-it/lib/rules_inline/balance_pairs.js","webpack:///./node_modules/markdown-it/lib/rules_inline/fragments_join.js","webpack:///./node_modules/markdown-it/lib/rules_inline/state_inline.js","webpack:///./node_modules/markdown-it/lib/presets/default.js","webpack:///./node_modules/markdown-it/lib/presets/zero.js","webpack:///./node_modules/markdown-it/lib/presets/commonmark.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./node_modules/uc.micro/categories/P/regex.js","webpack:///./node_modules/mdurl/index.js","webpack:///./node_modules/markdown-it/lib/ruler.js","webpack:///./node_modules/markdown-it/lib/token.js","webpack:///./node_modules/uc.micro/properties/Any/regex.js","webpack:///./node_modules/uc.micro/categories/Cc/regex.js","webpack:///./node_modules/uc.micro/categories/Z/regex.js","webpack:///./node_modules/markdown-it/lib/common/entities.js","webpack:///./node_modules/markdown-it/lib/common/html_re.js","webpack:///./node_modules/markdown-it/lib/rules_inline/strikethrough.js","webpack:///./node_modules/markdown-it/lib/rules_inline/emphasis.js","webpack:///./node_modules/markdown-it/lib/common/utils.js"],"names":["assign","obj","sources","Array","prototype","slice","call","arguments","forEach","source","Object","keys","key","_class","toString","isFunction","escapeRE","str","replace","defaultOptions","fuzzyLink","fuzzyEmail","fuzzyIP","defaultSchemas","validate","text","pos","self","tail","re","http","RegExp","src_auth","src_host_port_strict","src_path","test","match","length","no_http","src_domain","src_domain_root","src_port","src_host_terminator","mailto","src_email_name","src_host_strict","tlds_default","split","compile","__opts__","tlds","__tlds__","untpl","tpl","src_tlds","onCompile","__tlds_replaced__","push","src_xn","join","email_fuzzy","tpl_email_fuzzy","link_fuzzy","tpl_link_fuzzy","link_no_ip_fuzzy","tpl_link_no_ip_fuzzy","host_fuzzy_test","tpl_host_fuzzy_test","aliases","schemaError","name","val","Error","__compiled__","__schemas__","compiled","link","isRegExp","createValidator","normalize","isString","alias","slist","filter","map","schema_test","src_ZPCc","schema_search","schema_at_start","pretest","__index__","__text_cache__","resetScanCache","Match","shift","start","end","__last_index__","this","schema","__schema__","toLowerCase","index","lastIndex","raw","url","createMatch","LinkifyIt","schemas","options","reduce","acc","k","hasOwnProperty","add","definition","set","m","ml","me","len","next","tld_pos","exec","testSchemaAt","search","indexOf","result","matchAtStart","list","keepOld","isArray","concat","sort","el","idx","arr","reverse","module","exports","Any","Cc","Cf","P","Z","_typeof","Symbol","iterator","constructor","root","freeExports","nodeType","freeModule","freeGlobal","global","window","punycode","maxInt","base","regexPunycode","regexNonASCII","regexSeparators","errors","floor","Math","stringFromCharCode","String","fromCharCode","error","type","RangeError","array","fn","mapDomain","string","parts","ucs2decode","value","extra","output","counter","charCodeAt","ucs2encode","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","baseMinusTMin","decode","input","out","basic","j","oldi","w","t","baseMinusT","codePoint","inputLength","i","n","bias","lastIndexOf","splice","encode","handledCPCount","basicLength","q","currentValue","handledCPCountPlusOne","qMinusT","opts","src_Any","src_Cc","src_Z","src_P","src_ZCc","src_pseudo_letter","src_ip4","src_host","tpl_host_fuzzy","tpl_host_no_ip_fuzzy","tpl_host_fuzzy_strict","tpl_host_port_fuzzy_strict","tpl_host_port_no_ip_fuzzy_strict","utils","helpers","Renderer","ParserCore","ParserBlock","ParserInline","mdurl","config","default","zero","commonmark","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","trim","RECODE_HOSTNAME_FOR","normalizeLink","parsed","parse","hostname","protocol","toASCII","er","format","normalizeLinkText","toUnicode","defaultChars","MarkdownIt","presetName","inline","block","core","renderer","linkify","configure","presets","components","rules","ruler","enableOnly","rules2","ruler2","enable","ignoreInvalid","chain","missed","disable","use","plugin","args","apply","src","env","state","State","process","tokens","render","parseInline","inlineMode","renderInline","encodeCache","exclude","keepEscaped","l","code","nextCode","cache","ch","toUpperCase","getEncodeCache","encodeURIComponent","componentChars","decodeCache","getDecodeCache","seq","b1","b2","b3","b4","chr","parseInt","slashes","auth","port","pathname","hash","Url","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","slashesDenoteHost","lowerProto","hec","rest","simplePath","proto","substr","atSign","hostEnd","host","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","unshift","qm","u","parseLinkLabel","parseLinkDestination","parseLinkTitle","disableNested","level","found","marker","prevPos","labelEnd","max","posMax","oldPos","md","skipToken","unescapeAll","ok","lines","escapeHtml","default_rules","code_inline","slf","token","renderAttrs","content","code_block","fence","highlighted","tmpAttrs","tmpToken","info","langName","langAttrs","highlight","attrIndex","attrs","langPrefix","image","renderInlineAsText","children","renderToken","hardbreak","xhtmlOut","softbreak","breaks","html_block","html_inline","nextToken","needLf","hidden","nesting","tag","Ruler","_rules","Core","getRules","NEWLINES_RE","NULL_RE","Token","tok","arrayReplaceAt","isLinkClose","currentToken","nodes","ln","lastPos","htmlLinkLevel","fullUrl","urlText","links","blockTokens","markup","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","c","r","tm","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","blkIdx","typographer","isWhiteSpace","isPunctChar","isMdAsciiPunct","QUOTE_TEST_RE","QUOTE_RE","replaceAt","process_inlines","thisLevel","item","lastChar","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","canOpen","canClose","isSingle","stack","openQuote","closeQuote","OUTER","single","quotes","curr","last","StateCore","alt","tokenize","startLine","endLine","prevLine","line","hasEmptyLines","maxNesting","skipEmptyLines","sCount","blkIndent","tight","isEmpty","outTokens","lineMax","isSpace","getLine","bMarks","tShift","eMarks","escapedSplit","isEscaped","current","substring","silent","lineText","nextLine","columns","columnCount","aligns","tableLines","tbodyLines","oldParentType","terminate","terminatorRules","firstCh","secondCh","pop","parentType","getLines","params","mem","haveEndMarker","skipChars","skipSpaces","adjustTab","initial","lastLineEmpty","offset","oldBMarks","oldBSCount","oldIndent","oldSCount","oldTShift","spaceAfterMarker","isOutdented","oldLineMax","bsCount","cnt","skipBulletListMarker","skipOrderedListMarker","contentStart","indent","indentAfterMarker","isOrdered","itemLines","listLines","listTokIdx","markerCharCode","markerValue","oldListIndent","oldTight","posAfterMarker","prevEmptyEnd","isTerminatingParagraph","listIndent","Number","min","markTightParagraphs","normalizeReference","_endLine","destEndPos","destEndLineNo","href","label","res","title","references","block_names","HTML_OPEN_CLOSE_TAG_RE","HTML_SEQUENCES","html","tmp","skipSpacesBack","skipCharsBack","StateBlock","s","indent_found","ddIndent","from","begin","keepLastLF","lineIndent","first","queue","lineStart","_rules2","postProcess","pending","pushPending","isTerminatorChar","SCHEME_RE","linkLevel","pmax","ws","ESCAPED","ch1","ch2","origStr","escapedStr","matchStart","matchEnd","openerLength","closerLength","backticksScanned","backticks","labelStart","ref","parseReference","EMAIL_RE","AUTOLINK_RE","HTML_TAG_RE","lc","isLetter","entities","has","isValidEntityCode","fromCodePoint","DIGITAL_RE","NAMED_RE","processDelimiters","delimiters","closerIdx","openerIdx","closer","opener","minOpenerIdx","newMinOpenerIdx","isOddMatch","lastJump","openersBottom","headerIdx","lastTokenIdx","jumps","close","open","tokens_meta","StateInline","pendingLevel","_prev_delimiters","token_meta","scanDelims","canSplitWord","count","can_open","can_close","left_flanking","right_flanking","__webpack_amd_options__","__rules__","__cache__","__find__","__compile__","chains","rule","enabled","altName","at","opt","before","beforeName","ruleName","after","afterName","chainName","meta","attrPush","attrData","attrSet","attrGet","attrJoin","open_tag","close_tag","startDelim","endDelim","loneMarkers","scanned","isStrong","_hasOwnProperty","object","surrogate1","surrogate2","UNESCAPE_MD_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","REGEXP_ESCAPE_RE","UNICODE_PUNCT_RE","lib","ucmicro","TypeError","unescapeMd","escaped","entity","replaceEntityPattern","newElements"],"mappings":"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","file":"js/3-d805c9baf9631326cbd5.chunk.js","sourcesContent":["'use strict'; ////////////////////////////////////////////////////////////////////////////////\n// Helpers\n// Merge objects\n//\n\nfunction assign(obj\n/*from1, from2, from3, ...*/\n) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  sources.forEach(function (source) {\n    if (!source) {\n      return;\n    }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n  return obj;\n}\n\nfunction _class(obj) {\n  return Object.prototype.toString.call(obj);\n}\n\nfunction isString(obj) {\n  return _class(obj) === '[object String]';\n}\n\nfunction isObject(obj) {\n  return _class(obj) === '[object Object]';\n}\n\nfunction isRegExp(obj) {\n  return _class(obj) === '[object RegExp]';\n}\n\nfunction isFunction(obj) {\n  return _class(obj) === '[object Function]';\n}\n\nfunction escapeRE(str) {\n  return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&');\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n};\n\nfunction isOptionsObj(obj) {\n  return Object.keys(obj || {}).reduce(function (acc, k) {\n    return acc || defaultOptions.hasOwnProperty(k);\n  }, false);\n}\n\nvar defaultSchemas = {\n  'http:': {\n    validate: function validate(text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.http) {\n        // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.http = new RegExp('^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i');\n      }\n\n      if (self.re.http.test(tail)) {\n        return tail.match(self.re.http)[0].length;\n      }\n\n      return 0;\n    }\n  },\n  'https:': 'http:',\n  'ftp:': 'http:',\n  '//': {\n    validate: function validate(text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.no_http) {\n        // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.no_http = new RegExp('^' + self.re.src_auth + // Don't allow single-level domains, because of false positives like '//test'\n        // with code comments\n        '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' + self.re.src_port + self.re.src_host_terminator + self.re.src_path, 'i');\n      }\n\n      if (self.re.no_http.test(tail)) {\n        // should not be `://` & `///`, that protects from errors in protocol name\n        if (pos >= 3 && text[pos - 3] === ':') {\n          return 0;\n        }\n\n        if (pos >= 3 && text[pos - 3] === '/') {\n          return 0;\n        }\n\n        return tail.match(self.re.no_http)[0].length;\n      }\n\n      return 0;\n    }\n  },\n  'mailto:': {\n    validate: function validate(text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.mailto) {\n        self.re.mailto = new RegExp('^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i');\n      }\n\n      if (self.re.mailto.test(tail)) {\n        return tail.match(self.re.mailto)[0].length;\n      }\n\n      return 0;\n    }\n  }\n};\n/*eslint-disable max-len*/\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\n\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]'; // DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\n\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');\n/*eslint-enable max-len*/\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n  self.__index__ = -1;\n  self.__text_cache__ = '';\n}\n\nfunction createValidator(re) {\n  return function (text, pos) {\n    var tail = text.slice(pos);\n\n    if (re.test(tail)) {\n      return tail.match(re)[0].length;\n    }\n\n    return 0;\n  };\n}\n\nfunction createNormalizer() {\n  return function (match, self) {\n    self.normalize(match);\n  };\n} // Schemas compiler. Build regexps.\n//\n\n\nfunction compile(self) {\n  // Load & clone RE patterns.\n  var re = self.re = require('./lib/re')(self.__opts__); // Define dynamic patterns\n\n\n  var tlds = self.__tlds__.slice();\n\n  self.onCompile();\n\n  if (!self.__tlds_replaced__) {\n    tlds.push(tlds_2ch_src_re);\n  }\n\n  tlds.push(re.src_xn);\n  re.src_tlds = tlds.join('|');\n\n  function untpl(tpl) {\n    return tpl.replace('%TLDS%', re.src_tlds);\n  }\n\n  re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n  re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n  re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i'); //\n  // Compile each schema\n  //\n\n  var aliases = [];\n  self.__compiled__ = {}; // Reset compiled data\n\n  function schemaError(name, val) {\n    throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n  }\n\n  Object.keys(self.__schemas__).forEach(function (name) {\n    var val = self.__schemas__[name]; // skip disabled methods\n\n    if (val === null) {\n      return;\n    }\n\n    var compiled = {\n      validate: null,\n      link: null\n    };\n    self.__compiled__[name] = compiled;\n\n    if (isObject(val)) {\n      if (isRegExp(val.validate)) {\n        compiled.validate = createValidator(val.validate);\n      } else if (isFunction(val.validate)) {\n        compiled.validate = val.validate;\n      } else {\n        schemaError(name, val);\n      }\n\n      if (isFunction(val.normalize)) {\n        compiled.normalize = val.normalize;\n      } else if (!val.normalize) {\n        compiled.normalize = createNormalizer();\n      } else {\n        schemaError(name, val);\n      }\n\n      return;\n    }\n\n    if (isString(val)) {\n      aliases.push(name);\n      return;\n    }\n\n    schemaError(name, val);\n  }); //\n  // Compile postponed aliases\n  //\n\n  aliases.forEach(function (alias) {\n    if (!self.__compiled__[self.__schemas__[alias]]) {\n      // Silently fail on missed schemas to avoid errons on disable.\n      // schemaError(alias, self.__schemas__[alias]);\n      return;\n    }\n\n    self.__compiled__[alias].validate = self.__compiled__[self.__schemas__[alias]].validate;\n    self.__compiled__[alias].normalize = self.__compiled__[self.__schemas__[alias]].normalize;\n  }); //\n  // Fake record for guessed links\n  //\n\n  self.__compiled__[''] = {\n    validate: null,\n    normalize: createNormalizer()\n  }; //\n  // Build schema condition\n  //\n\n  var slist = Object.keys(self.__compiled__).filter(function (name) {\n    // Filter disabled & fake schemas\n    return name.length > 0 && self.__compiled__[name];\n  }).map(escapeRE).join('|'); // (?!_) cause 1.5x slowdown\n\n  self.re.schema_test = RegExp(\"(^|(?!_)(?:[><\\uFF5C]|\" + re.src_ZPCc + '))(' + slist + ')', 'i');\n  self.re.schema_search = RegExp(\"(^|(?!_)(?:[><\\uFF5C]|\" + re.src_ZPCc + '))(' + slist + ')', 'ig');\n  self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i');\n  self.re.pretest = RegExp('(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@', 'i'); //\n  // Cleanup\n  //\n\n  resetScanCache(self);\n}\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\n\n\nfunction Match(self, shift) {\n  var start = self.__index__,\n      end = self.__last_index__,\n      text = self.__text_cache__.slice(start, end);\n  /**\n   * Match#schema -> String\n   *\n   * Prefix (protocol) for matched string.\n   **/\n\n\n  this.schema = self.__schema__.toLowerCase();\n  /**\n   * Match#index -> Number\n   *\n   * First position of matched string.\n   **/\n\n  this.index = start + shift;\n  /**\n   * Match#lastIndex -> Number\n   *\n   * Next position after matched string.\n   **/\n\n  this.lastIndex = end + shift;\n  /**\n   * Match#raw -> String\n   *\n   * Matched string.\n   **/\n\n  this.raw = text;\n  /**\n   * Match#text -> String\n   *\n   * Notmalized text of matched string.\n   **/\n\n  this.text = text;\n  /**\n   * Match#url -> String\n   *\n   * Normalized url of matched string.\n   **/\n\n  this.url = text;\n}\n\nfunction createMatch(self, shift) {\n  var match = new Match(self, shift);\n\n  self.__compiled__[match.schema].normalize(match, self);\n\n  return match;\n}\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n *   for example). `linkify-it` makes shure that prefix is not preceeded with\n *   alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n *   - _String_ - just alias to existing rule\n *   - _Object_\n *     - _validate_ - validator function (should return matched length on success),\n *       or `RegExp`.\n *     - _normalize_ - optional function to normalize text & url of matched result\n *       (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n *   like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\n\n\nfunction LinkifyIt(schemas, options) {\n  if (!(this instanceof LinkifyIt)) {\n    return new LinkifyIt(schemas, options);\n  }\n\n  if (!options) {\n    if (isOptionsObj(schemas)) {\n      options = schemas;\n      schemas = {};\n    }\n  }\n\n  this.__opts__ = assign({}, defaultOptions, options); // Cache last tested result. Used to skip repeating steps on next `match` call.\n\n  this.__index__ = -1;\n  this.__last_index__ = -1; // Next scan position\n\n  this.__schema__ = '';\n  this.__text_cache__ = '';\n  this.__schemas__ = assign({}, defaultSchemas, schemas);\n  this.__compiled__ = {};\n  this.__tlds__ = tlds_default;\n  this.__tlds_replaced__ = false;\n  this.re = {};\n  compile(this);\n}\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\n\n\nLinkifyIt.prototype.add = function add(schema, definition) {\n  this.__schemas__[schema] = definition;\n  compile(this);\n  return this;\n};\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\n\n\nLinkifyIt.prototype.set = function set(options) {\n  this.__opts__ = assign(this.__opts__, options);\n  return this;\n};\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\n\n\nLinkifyIt.prototype.test = function test(text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__ = -1;\n\n  if (!text.length) {\n    return false;\n  }\n\n  var m, ml, me, len, shift, next, re, tld_pos, at_pos; // try to scan for link with schema - that's the most simple rule\n\n  if (this.re.schema_test.test(text)) {\n    re = this.re.schema_search;\n    re.lastIndex = 0;\n\n    while ((m = re.exec(text)) !== null) {\n      len = this.testSchemaAt(text, m[2], re.lastIndex);\n\n      if (len) {\n        this.__schema__ = m[2];\n        this.__index__ = m.index + m[1].length;\n        this.__last_index__ = m.index + m[0].length + len;\n        break;\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n    // guess schemaless links\n    tld_pos = text.search(this.re.host_fuzzy_test);\n\n    if (tld_pos >= 0) {\n      // if tld is located after found link - no need to check fuzzy pattern\n      if (this.__index__ < 0 || tld_pos < this.__index__) {\n        if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n          shift = ml.index + ml[1].length;\n\n          if (this.__index__ < 0 || shift < this.__index__) {\n            this.__schema__ = '';\n            this.__index__ = shift;\n            this.__last_index__ = ml.index + ml[0].length;\n          }\n        }\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n    // guess schemaless emails\n    at_pos = text.indexOf('@');\n\n    if (at_pos >= 0) {\n      // We can't skip this check, because this cases are possible:\n      // 192.168.1.1@gmail.com, my.in@example.com\n      if ((me = text.match(this.re.email_fuzzy)) !== null) {\n        shift = me.index + me[1].length;\n        next = me.index + me[0].length;\n\n        if (this.__index__ < 0 || shift < this.__index__ || shift === this.__index__ && next > this.__last_index__) {\n          this.__schema__ = 'mailto:';\n          this.__index__ = shift;\n          this.__last_index__ = next;\n        }\n      }\n    }\n  }\n\n  return this.__index__ >= 0;\n};\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\n\n\nLinkifyIt.prototype.pretest = function pretest(text) {\n  return this.re.pretest.test(text);\n};\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\n\n\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n  // If not supported schema check requested - terminate\n  if (!this.__compiled__[schema.toLowerCase()]) {\n    return 0;\n  }\n\n  return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n *   protocol-neutral  links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\n\n\nLinkifyIt.prototype.match = function match(text) {\n  var shift = 0,\n      result = []; // Try to take previous element from cache, if .test() called before\n\n  if (this.__index__ >= 0 && this.__text_cache__ === text) {\n    result.push(createMatch(this, shift));\n    shift = this.__last_index__;\n  } // Cut head if cache was used\n\n\n  var tail = shift ? text.slice(shift) : text; // Scan string until end reached\n\n  while (this.test(tail)) {\n    result.push(createMatch(this, shift));\n    tail = tail.slice(this.__last_index__);\n    shift += this.__last_index__;\n  }\n\n  if (result.length) {\n    return result;\n  }\n\n  return null;\n};\n/**\n * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\n\n\nLinkifyIt.prototype.matchAtStart = function matchAtStart(text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__ = -1;\n  if (!text.length) return null;\n  var m = this.re.schema_at_start.exec(text);\n  if (!m) return null;\n  var len = this.testSchemaAt(text, m[2], m[0].length);\n  if (!len) return null;\n  this.__schema__ = m[2];\n  this.__index__ = m.index + m[1].length;\n  this.__last_index__ = m.index + m[0].length + len;\n  return createMatch(this, 0);\n};\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n *   are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\n\n\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n  list = Array.isArray(list) ? list : [list];\n\n  if (!keepOld) {\n    this.__tlds__ = list.slice();\n    this.__tlds_replaced__ = true;\n    compile(this);\n    return this;\n  }\n\n  this.__tlds__ = this.__tlds__.concat(list).sort().filter(function (el, idx, arr) {\n    return el !== arr[idx - 1];\n  }).reverse();\n  compile(this);\n  return this;\n};\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\n\n\nLinkifyIt.prototype.normalize = function normalize(match) {\n  // Do minimal possible changes by default. Need to collect feedback prior\n  // to move forward https://github.com/markdown-it/linkify-it/issues/1\n  if (!match.schema) {\n    match.url = 'http://' + match.url;\n  }\n\n  if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n    match.url = 'mailto:' + match.url;\n  }\n};\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\n\n\nLinkifyIt.prototype.onCompile = function onCompile() {};\n\nmodule.exports = LinkifyIt;","'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc = require('./categories/Cc/regex');\nexports.Cf = require('./categories/Cf/regex');\nexports.P = require('./categories/P/regex');\nexports.Z = require('./categories/Z/regex');","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*! https://mths.be/punycode v1.4.1 by @mathias */\n;\n\n(function (root) {\n  /** Detect free variables */\n  var freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n  var freeModule = (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && !module.nodeType && module;\n  var freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global;\n\n  if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal) {\n    root = freeGlobal;\n  }\n  /**\n   * The `punycode` object.\n   * @name punycode\n   * @type Object\n   */\n\n\n  var punycode,\n\n  /** Highest positive signed 32-bit float value */\n  maxInt = 2147483647,\n      // aka. 0x7FFFFFFF or 2^31-1\n\n  /** Bootstring parameters */\n  base = 36,\n      tMin = 1,\n      tMax = 26,\n      skew = 38,\n      damp = 700,\n      initialBias = 72,\n      initialN = 128,\n      // 0x80\n  delimiter = '-',\n      // '\\x2D'\n\n  /** Regular expressions */\n  regexPunycode = /^xn--/,\n      regexNonASCII = /[^\\x20-\\x7E]/,\n      // unprintable ASCII chars + non-ASCII chars\n  regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g,\n      // RFC 3490 separators\n\n  /** Error messages */\n  errors = {\n    'overflow': 'Overflow: input needs wider integers to process',\n    'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n    'invalid-input': 'Invalid input'\n  },\n\n  /** Convenience shortcuts */\n  baseMinusTMin = base - tMin,\n      floor = Math.floor,\n      stringFromCharCode = String.fromCharCode,\n\n  /** Temporary variable */\n  key;\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A generic error utility function.\n   * @private\n   * @param {String} type The error type.\n   * @returns {Error} Throws a `RangeError` with the applicable error message.\n   */\n\n  function error(type) {\n    throw new RangeError(errors[type]);\n  }\n  /**\n   * A generic `Array#map` utility function.\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} callback The function that gets called for every array\n   * item.\n   * @returns {Array} A new array of values returned by the callback function.\n   */\n\n\n  function map(array, fn) {\n    var length = array.length;\n    var result = [];\n\n    while (length--) {\n      result[length] = fn(array[length]);\n    }\n\n    return result;\n  }\n  /**\n   * A simple `Array#map`-like wrapper to work with domain name strings or email\n   * addresses.\n   * @private\n   * @param {String} domain The domain name or email address.\n   * @param {Function} callback The function that gets called for every\n   * character.\n   * @returns {Array} A new string of characters returned by the callback\n   * function.\n   */\n\n\n  function mapDomain(string, fn) {\n    var parts = string.split('@');\n    var result = '';\n\n    if (parts.length > 1) {\n      // In email addresses, only the domain name should be punycoded. Leave\n      // the local part (i.e. everything up to `@`) intact.\n      result = parts[0] + '@';\n      string = parts[1];\n    } // Avoid `split(regex)` for IE8 compatibility. See #17.\n\n\n    string = string.replace(regexSeparators, '\\x2E');\n    var labels = string.split('.');\n    var encoded = map(labels, fn).join('.');\n    return result + encoded;\n  }\n  /**\n   * Creates an array containing the numeric code points of each Unicode\n   * character in the string. While JavaScript uses UCS-2 internally,\n   * this function will convert a pair of surrogate halves (each of which\n   * UCS-2 exposes as separate characters) into a single code point,\n   * matching UTF-16.\n   * @see `punycode.ucs2.encode`\n   * @see <https://mathiasbynens.be/notes/javascript-encoding>\n   * @memberOf punycode.ucs2\n   * @name decode\n   * @param {String} string The Unicode input string (UCS-2).\n   * @returns {Array} The new array of code points.\n   */\n\n\n  function ucs2decode(string) {\n    var output = [],\n        counter = 0,\n        length = string.length,\n        value,\n        extra;\n\n    while (counter < length) {\n      value = string.charCodeAt(counter++);\n\n      if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n        // high surrogate, and there is a next character\n        extra = string.charCodeAt(counter++);\n\n        if ((extra & 0xFC00) == 0xDC00) {\n          // low surrogate\n          output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n        } else {\n          // unmatched surrogate; only append this code unit, in case the next\n          // code unit is the high surrogate of a surrogate pair\n          output.push(value);\n          counter--;\n        }\n      } else {\n        output.push(value);\n      }\n    }\n\n    return output;\n  }\n  /**\n   * Creates a string based on an array of numeric code points.\n   * @see `punycode.ucs2.decode`\n   * @memberOf punycode.ucs2\n   * @name encode\n   * @param {Array} codePoints The array of numeric code points.\n   * @returns {String} The new Unicode string (UCS-2).\n   */\n\n\n  function ucs2encode(array) {\n    return map(array, function (value) {\n      var output = '';\n\n      if (value > 0xFFFF) {\n        value -= 0x10000;\n        output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n        value = 0xDC00 | value & 0x3FF;\n      }\n\n      output += stringFromCharCode(value);\n      return output;\n    }).join('');\n  }\n  /**\n   * Converts a basic code point into a digit/integer.\n   * @see `digitToBasic()`\n   * @private\n   * @param {Number} codePoint The basic numeric code point value.\n   * @returns {Number} The numeric value of a basic code point (for use in\n   * representing integers) in the range `0` to `base - 1`, or `base` if\n   * the code point does not represent a value.\n   */\n\n\n  function basicToDigit(codePoint) {\n    if (codePoint - 48 < 10) {\n      return codePoint - 22;\n    }\n\n    if (codePoint - 65 < 26) {\n      return codePoint - 65;\n    }\n\n    if (codePoint - 97 < 26) {\n      return codePoint - 97;\n    }\n\n    return base;\n  }\n  /**\n   * Converts a digit/integer into a basic code point.\n   * @see `basicToDigit()`\n   * @private\n   * @param {Number} digit The numeric value of a basic code point.\n   * @returns {Number} The basic code point whose value (when used for\n   * representing integers) is `digit`, which needs to be in the range\n   * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n   * used; else, the lowercase form is used. The behavior is undefined\n   * if `flag` is non-zero and `digit` has no uppercase form.\n   */\n\n\n  function digitToBasic(digit, flag) {\n    //  0..25 map to ASCII a..z or A..Z\n    // 26..35 map to ASCII 0..9\n    return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n  }\n  /**\n   * Bias adaptation function as per section 3.4 of RFC 3492.\n   * https://tools.ietf.org/html/rfc3492#section-3.4\n   * @private\n   */\n\n\n  function adapt(delta, numPoints, firstTime) {\n    var k = 0;\n    delta = firstTime ? floor(delta / damp) : delta >> 1;\n    delta += floor(delta / numPoints);\n\n    for (;\n    /* no initialization */\n    delta > baseMinusTMin * tMax >> 1; k += base) {\n      delta = floor(delta / baseMinusTMin);\n    }\n\n    return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n  }\n  /**\n   * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n   * symbols.\n   * @memberOf punycode\n   * @param {String} input The Punycode string of ASCII-only symbols.\n   * @returns {String} The resulting string of Unicode symbols.\n   */\n\n\n  function decode(input) {\n    // Don't use UCS-2\n    var output = [],\n        inputLength = input.length,\n        out,\n        i = 0,\n        n = initialN,\n        bias = initialBias,\n        basic,\n        j,\n        index,\n        oldi,\n        w,\n        k,\n        digit,\n        t,\n\n    /** Cached calculation results */\n    baseMinusT; // Handle the basic code points: let `basic` be the number of input code\n    // points before the last delimiter, or `0` if there is none, then copy\n    // the first basic code points to the output.\n\n    basic = input.lastIndexOf(delimiter);\n\n    if (basic < 0) {\n      basic = 0;\n    }\n\n    for (j = 0; j < basic; ++j) {\n      // if it's not a basic code point\n      if (input.charCodeAt(j) >= 0x80) {\n        error('not-basic');\n      }\n\n      output.push(input.charCodeAt(j));\n    } // Main decoding loop: start just after the last delimiter if any basic code\n    // points were copied; start at the beginning otherwise.\n\n\n    for (index = basic > 0 ? basic + 1 : 0; index < inputLength;)\n    /* no final expression */\n    {\n      // `index` is the index of the next character to be consumed.\n      // Decode a generalized variable-length integer into `delta`,\n      // which gets added to `i`. The overflow checking is easier\n      // if we increase `i` as we go, then subtract off its starting\n      // value at the end to obtain `delta`.\n      for (oldi = i, w = 1, k = base;;\n      /* no condition */\n      k += base) {\n        if (index >= inputLength) {\n          error('invalid-input');\n        }\n\n        digit = basicToDigit(input.charCodeAt(index++));\n\n        if (digit >= base || digit > floor((maxInt - i) / w)) {\n          error('overflow');\n        }\n\n        i += digit * w;\n        t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n        if (digit < t) {\n          break;\n        }\n\n        baseMinusT = base - t;\n\n        if (w > floor(maxInt / baseMinusT)) {\n          error('overflow');\n        }\n\n        w *= baseMinusT;\n      }\n\n      out = output.length + 1;\n      bias = adapt(i - oldi, out, oldi == 0); // `i` was supposed to wrap around from `out` to `0`,\n      // incrementing `n` each time, so we'll fix that now:\n\n      if (floor(i / out) > maxInt - n) {\n        error('overflow');\n      }\n\n      n += floor(i / out);\n      i %= out; // Insert `n` at position `i` of the output\n\n      output.splice(i++, 0, n);\n    }\n\n    return ucs2encode(output);\n  }\n  /**\n   * Converts a string of Unicode symbols (e.g. a domain name label) to a\n   * Punycode string of ASCII-only symbols.\n   * @memberOf punycode\n   * @param {String} input The string of Unicode symbols.\n   * @returns {String} The resulting Punycode string of ASCII-only symbols.\n   */\n\n\n  function encode(input) {\n    var n,\n        delta,\n        handledCPCount,\n        basicLength,\n        bias,\n        j,\n        m,\n        q,\n        k,\n        t,\n        currentValue,\n        output = [],\n\n    /** `inputLength` will hold the number of code points in `input`. */\n    inputLength,\n\n    /** Cached calculation results */\n    handledCPCountPlusOne,\n        baseMinusT,\n        qMinusT; // Convert the input in UCS-2 to Unicode\n\n    input = ucs2decode(input); // Cache the length\n\n    inputLength = input.length; // Initialize the state\n\n    n = initialN;\n    delta = 0;\n    bias = initialBias; // Handle the basic code points\n\n    for (j = 0; j < inputLength; ++j) {\n      currentValue = input[j];\n\n      if (currentValue < 0x80) {\n        output.push(stringFromCharCode(currentValue));\n      }\n    }\n\n    handledCPCount = basicLength = output.length; // `handledCPCount` is the number of code points that have been handled;\n    // `basicLength` is the number of basic code points.\n    // Finish the basic string - if it is not empty - with a delimiter\n\n    if (basicLength) {\n      output.push(delimiter);\n    } // Main encoding loop:\n\n\n    while (handledCPCount < inputLength) {\n      // All non-basic code points < n have been handled already. Find the next\n      // larger one:\n      for (m = maxInt, j = 0; j < inputLength; ++j) {\n        currentValue = input[j];\n\n        if (currentValue >= n && currentValue < m) {\n          m = currentValue;\n        }\n      } // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n      // but guard against overflow\n\n\n      handledCPCountPlusOne = handledCPCount + 1;\n\n      if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n        error('overflow');\n      }\n\n      delta += (m - n) * handledCPCountPlusOne;\n      n = m;\n\n      for (j = 0; j < inputLength; ++j) {\n        currentValue = input[j];\n\n        if (currentValue < n && ++delta > maxInt) {\n          error('overflow');\n        }\n\n        if (currentValue == n) {\n          // Represent delta as a generalized variable-length integer\n          for (q = delta, k = base;;\n          /* no condition */\n          k += base) {\n            t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n            if (q < t) {\n              break;\n            }\n\n            qMinusT = q - t;\n            baseMinusT = base - t;\n            output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));\n            q = floor(qMinusT / baseMinusT);\n          }\n\n          output.push(stringFromCharCode(digitToBasic(q, 0)));\n          bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n          delta = 0;\n          ++handledCPCount;\n        }\n      }\n\n      ++delta;\n      ++n;\n    }\n\n    return output.join('');\n  }\n  /**\n   * Converts a Punycode string representing a domain name or an email address\n   * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n   * it doesn't matter if you call it on a string that has already been\n   * converted to Unicode.\n   * @memberOf punycode\n   * @param {String} input The Punycoded domain name or email address to\n   * convert to Unicode.\n   * @returns {String} The Unicode representation of the given Punycode\n   * string.\n   */\n\n\n  function toUnicode(input) {\n    return mapDomain(input, function (string) {\n      return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;\n    });\n  }\n  /**\n   * Converts a Unicode string representing a domain name or an email address to\n   * Punycode. Only the non-ASCII parts of the domain name will be converted,\n   * i.e. it doesn't matter if you call it with a domain that's already in\n   * ASCII.\n   * @memberOf punycode\n   * @param {String} input The domain name or email address to convert, as a\n   * Unicode string.\n   * @returns {String} The Punycode representation of the given domain name or\n   * email address.\n   */\n\n\n  function toASCII(input) {\n    return mapDomain(input, function (string) {\n      return regexNonASCII.test(string) ? 'xn--' + encode(string) : string;\n    });\n  }\n  /*--------------------------------------------------------------------------*/\n\n  /** Define the public API */\n\n\n  punycode = {\n    /**\n     * A string representing the current Punycode.js version number.\n     * @memberOf punycode\n     * @type String\n     */\n    'version': '1.4.1',\n\n    /**\n     * An object of methods to convert from JavaScript's internal character\n     * representation (UCS-2) to Unicode code points, and back.\n     * @see <https://mathiasbynens.be/notes/javascript-encoding>\n     * @memberOf punycode\n     * @type Object\n     */\n    'ucs2': {\n      'decode': ucs2decode,\n      'encode': ucs2encode\n    },\n    'decode': decode,\n    'encode': encode,\n    'toASCII': toASCII,\n    'toUnicode': toUnicode\n  };\n  /** Expose `punycode` */\n  // Some AMD build optimizers, like r.js, check for specific condition patterns\n  // like the following:\n\n  if (typeof define == 'function' && _typeof(define.amd) == 'object' && define.amd) {\n    define('punycode', function () {\n      return punycode;\n    });\n  } else if (freeExports && freeModule) {\n    if (module.exports == freeExports) {\n      // in Node.js, io.js, or RingoJS v0.8.0+\n      freeModule.exports = punycode;\n    } else {\n      // in Narwhal or RingoJS v0.7.0-\n      for (key in punycode) {\n        punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n      }\n    }\n  } else {\n    // in Rhino or a web browser\n    root.punycode = punycode;\n  }\n})(this);","'use strict';\n\nmodule.exports = require('./lib/');","'use strict';\n\nmodule.exports = function (opts) {\n  var re = {};\n  opts = opts || {}; // Use direct extract instead of `regenerate` to reduse browserified size\n\n  re.src_Any = require('uc.micro/properties/Any/regex').source;\n  re.src_Cc = require('uc.micro/categories/Cc/regex').source;\n  re.src_Z = require('uc.micro/categories/Z/regex').source;\n  re.src_P = require('uc.micro/categories/P/regex').source; // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n\n  re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join('|'); // \\p{\\Z\\Cc} (white spaces + control)\n\n  re.src_ZCc = [re.src_Z, re.src_Cc].join('|'); // Experimental. List of chars, completely prohibited in links\n  // because can separate it from other part of text\n\n  var text_separators = \"[><\\uFF5C]\"; // All possible word characters (everything without punctuation, spaces & controls)\n  // Defined via punctuation & spaces to save space\n  // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n\n  re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')'; // The same as abothe but without [0-9]\n  // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n  ////////////////////////////////////////////////////////////////////////////////\n\n  re.src_ip4 = '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'; // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n\n  re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n  re.src_port = '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n  re.src_host_terminator = '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' + '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n  re.src_path = '(?:' + '[/?#]' + '(?:' + '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' + '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' + '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' + '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' + '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' + \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" + \"\\\\'(?=\" + re.src_pseudo_letter + '|[-])|' + // allow `I'm_king` if no pair found\n  '\\\\.{2,}[a-zA-Z0-9%/&]|' + // google has many dots in \"google search\" links (#66, #81).\n  // github has ... in commit range links,\n  // Restrict to\n  // - english\n  // - percent-encoded\n  // - parts of file path\n  // - params separator\n  // until more examples found.\n  '\\\\.(?!' + re.src_ZCc + '|[.]|$)|' + (opts['---'] ? '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n  : '\\\\-+|') + ',(?!' + re.src_ZCc + '|$)|' + // allow `,,,` in paths\n  ';(?!' + re.src_ZCc + '|$)|' + // allow `;` if not followed by space-like char\n  '\\\\!+(?!' + re.src_ZCc + '|[!]|$)|' + // allow `!!!` in paths, but not at the end\n  '\\\\?(?!' + re.src_ZCc + '|[?]|$)' + ')+' + '|\\\\/' + ')?'; // Allow anything in markdown spec, forbid quote (\") at the first position\n  // because emails enclosed in quotes are far more common\n\n  re.src_email_name = '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*';\n  re.src_xn = 'xn--[a-z0-9\\\\-]{1,59}'; // More to read about domain names\n  // http://serverfault.com/questions/638260/\n\n  re.src_domain_root = // Allow letters & digits (http://test1)\n  '(?:' + re.src_xn + '|' + re.src_pseudo_letter + '{1,63}' + ')';\n  re.src_domain = '(?:' + re.src_xn + '|' + '(?:' + re.src_pseudo_letter + ')' + '|' + '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' + ')';\n  re.src_host = '(?:' + // Don't need IP check, because digits are already allowed in normal domain names\n  //   src_ip4 +\n  // '|' +\n  '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain\n  /*_root*/\n  + ')' + ')';\n  re.tpl_host_fuzzy = '(?:' + re.src_ip4 + '|' + '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' + ')';\n  re.tpl_host_no_ip_fuzzy = '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n  re.src_host_strict = re.src_host + re.src_host_terminator;\n  re.tpl_host_fuzzy_strict = re.tpl_host_fuzzy + re.src_host_terminator;\n  re.src_host_port_strict = re.src_host + re.src_port + re.src_host_terminator;\n  re.tpl_host_port_fuzzy_strict = re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n  re.tpl_host_port_no_ip_fuzzy_strict = re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator; ////////////////////////////////////////////////////////////////////////////////\n  // Main rules\n  // Rude test fuzzy links by host, for quick deny\n\n  re.tpl_host_fuzzy_test = 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n  re.tpl_email_fuzzy = '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' + '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n  re.tpl_link_fuzzy = // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n  // but can start with > (markdown blockquote)\n  \"(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uFF5C]|\" + re.src_ZPCc + '))' + \"((?![$+<=>^`|\\uFF5C])\" + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n  re.tpl_link_no_ip_fuzzy = // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n  // but can start with > (markdown blockquote)\n  \"(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uFF5C]|\" + re.src_ZPCc + '))' + \"((?![$+<=>^`|\\uFF5C])\" + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n  return re;\n};","// Main parser class\n'use strict';\n\nvar utils = require('./common/utils');\n\nvar helpers = require('./helpers');\n\nvar Renderer = require('./renderer');\n\nvar ParserCore = require('./parser_core');\n\nvar ParserBlock = require('./parser_block');\n\nvar ParserInline = require('./parser_inline');\n\nvar LinkifyIt = require('linkify-it');\n\nvar mdurl = require('mdurl');\n\nvar punycode = require('punycode');\n\nvar config = {\n  default: require('./presets/default'),\n  zero: require('./presets/zero'),\n  commonmark: require('./presets/commonmark')\n}; ////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n  // url should be normalized at this point, and existing entities are decoded\n  var str = url.trim().toLowerCase();\n  return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) ? true : false : true;\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = ['http:', 'https:', 'mailto:'];\n\nfunction normalizeLink(url) {\n  var parsed = mdurl.parse(url, true);\n\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toASCII(parsed.hostname);\n      } catch (er) {\n        /**/\n      }\n    }\n  }\n\n  return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n  var parsed = mdurl.parse(url, true);\n\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toUnicode(parsed.hostname);\n      } catch (er) {\n        /**/\n      }\n    }\n  } // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n\n\n  return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%');\n}\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n *     md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n *   configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n *   similar to GFM, used when no preset name given. Enables all available rules,\n *   but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n *   all rules disabled. Useful to quickly setup your config via `.enable()`.\n *   For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n *   That's not safe! You may need external sanitizer to protect output from XSS.\n *   It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n *   (`<br />`). This is needed only for full CommonMark compatibility. In real\n *   world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n *   Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__  - `false`. Set `true` to enable [some language-neutral\n *   replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n *   quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n *   pairs, when typographer enabled and smartquotes on. For example, you can\n *   use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n *   `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n *   Highlighter `function (str, lang)` should return escaped HTML. It can also\n *   return empty string if the source was not changed and should be escaped\n *   externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n *   html: true,\n *   linkify: true,\n *   typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n *       } catch (__) {}\n *     }\n *\n *     return ''; // use external default escaping\n *   }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return '<pre class=\"hljs\"><code>' +\n *                hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n *                '</code></pre>';\n *       } catch (__) {}\n *     }\n *\n *     return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n *   }\n * });\n * ```\n *\n **/\n\n\nfunction MarkdownIt(presetName, options) {\n  if (!(this instanceof MarkdownIt)) {\n    return new MarkdownIt(presetName, options);\n  }\n\n  if (!options) {\n    if (!utils.isString(presetName)) {\n      options = presetName || {};\n      presetName = 'default';\n    }\n  }\n  /**\n   * MarkdownIt#inline -> ParserInline\n   *\n   * Instance of [[ParserInline]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n\n\n  this.inline = new ParserInline();\n  /**\n   * MarkdownIt#block -> ParserBlock\n   *\n   * Instance of [[ParserBlock]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n\n  this.block = new ParserBlock();\n  /**\n   * MarkdownIt#core -> Core\n   *\n   * Instance of [[Core]] chain executor. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n\n  this.core = new ParserCore();\n  /**\n   * MarkdownIt#renderer -> Renderer\n   *\n   * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n   * rules for new token types, generated by plugins.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * function myToken(tokens, idx, options, env, self) {\n   *   //...\n   *   return result;\n   * };\n   *\n   * md.renderer.rules['my_token'] = myToken\n   * ```\n   *\n   * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n   **/\n\n  this.renderer = new Renderer();\n  /**\n   * MarkdownIt#linkify -> LinkifyIt\n   *\n   * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n   * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n   * rule.\n   **/\n\n  this.linkify = new LinkifyIt();\n  /**\n   * MarkdownIt#validateLink(url) -> Boolean\n   *\n   * Link validation function. CommonMark allows too much in links. By default\n   * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n   * except some embedded image types.\n   *\n   * You can change this behaviour:\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   * // enable everything\n   * md.validateLink = function () { return true; }\n   * ```\n   **/\n\n  this.validateLink = validateLink;\n  /**\n   * MarkdownIt#normalizeLink(url) -> String\n   *\n   * Function used to encode link url to a machine-readable format,\n   * which includes url-encoding, punycode, etc.\n   **/\n\n  this.normalizeLink = normalizeLink;\n  /**\n   * MarkdownIt#normalizeLinkText(url) -> String\n   *\n   * Function used to decode link url to a human-readable format`\n   **/\n\n  this.normalizeLinkText = normalizeLinkText; // Expose utils & helpers for easy acces from plugins\n\n  /**\n   * MarkdownIt#utils -> utils\n   *\n   * Assorted utility functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n   **/\n\n  this.utils = utils;\n  /**\n   * MarkdownIt#helpers -> helpers\n   *\n   * Link components parser functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n   **/\n\n  this.helpers = utils.assign({}, helpers);\n  this.options = {};\n  this.configure(presetName);\n\n  if (options) {\n    this.set(options);\n  }\n}\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .set({ html: true, breaks: true })\n *             .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\n\n\nMarkdownIt.prototype.set = function (options) {\n  utils.assign(this.options, options);\n  return this;\n};\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\n\n\nMarkdownIt.prototype.configure = function (presets) {\n  var self = this,\n      presetName;\n\n  if (utils.isString(presets)) {\n    presetName = presets;\n    presets = config[presetName];\n\n    if (!presets) {\n      throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name');\n    }\n  }\n\n  if (!presets) {\n    throw new Error('Wrong `markdown-it` preset, can\\'t be empty');\n  }\n\n  if (presets.options) {\n    self.set(presets.options);\n  }\n\n  if (presets.components) {\n    Object.keys(presets.components).forEach(function (name) {\n      if (presets.components[name].rules) {\n        self[name].ruler.enableOnly(presets.components[name].rules);\n      }\n\n      if (presets.components[name].rules2) {\n        self[name].ruler2.enableOnly(presets.components[name].rules2);\n      }\n    });\n  }\n\n  return this;\n};\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .enable(['sub', 'sup'])\n *             .disable('smartquotes');\n * ```\n **/\n\n\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n  var result = [];\n\n  if (!Array.isArray(list)) {\n    list = [list];\n  }\n\n  ['core', 'block', 'inline'].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.enable(list, true));\n  }, this);\n  result = result.concat(this.inline.ruler2.enable(list, true));\n  var missed = list.filter(function (name) {\n    return result.indexOf(name) < 0;\n  });\n\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n  }\n\n  return this;\n};\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\n\n\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n  var result = [];\n\n  if (!Array.isArray(list)) {\n    list = [list];\n  }\n\n  ['core', 'block', 'inline'].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.disable(list, true));\n  }, this);\n  result = result.concat(this.inline.ruler2.disable(list, true));\n  var missed = list.filter(function (name) {\n    return result.indexOf(name) < 0;\n  });\n\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n  }\n\n  return this;\n};\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n *             .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n *               tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n *             });\n * ```\n **/\n\n\nMarkdownIt.prototype.use = function (plugin\n/*, params, ... */\n) {\n  var args = [this].concat(Array.prototype.slice.call(arguments, 1));\n  plugin.apply(plugin, args);\n  return this;\n};\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\n\n\nMarkdownIt.prototype.parse = function (src, env) {\n  if (typeof src !== 'string') {\n    throw new Error('Input data should be a String');\n  }\n\n  var state = new this.core.State(src, this, env);\n  this.core.process(state);\n  return state.tokens;\n};\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\n\n\nMarkdownIt.prototype.render = function (src, env) {\n  env = env || {};\n  return this.renderer.render(this.parse(src, env), this.options, env);\n};\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\n\n\nMarkdownIt.prototype.parseInline = function (src, env) {\n  var state = new this.core.State(src, this, env);\n  state.inlineMode = true;\n  this.core.process(state);\n  return state.tokens;\n};\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\n\n\nMarkdownIt.prototype.renderInline = function (src, env) {\n  env = env || {};\n  return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\nmodule.exports = MarkdownIt;","'use strict';\n\nvar encodeCache = {}; // Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\n\nfunction getEncodeCache(exclude) {\n  var i,\n      ch,\n      cache = encodeCache[exclude];\n\n  if (cache) {\n    return cache;\n  }\n\n  cache = encodeCache[exclude] = [];\n\n  for (i = 0; i < 128; i++) {\n    ch = String.fromCharCode(i);\n\n    if (/^[0-9a-z]$/i.test(ch)) {\n      // always allow unencoded alphanumeric characters\n      cache.push(ch);\n    } else {\n      cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n    }\n  }\n\n  for (i = 0; i < exclude.length; i++) {\n    cache[exclude.charCodeAt(i)] = exclude[i];\n  }\n\n  return cache;\n} // Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n//  - string       - string to encode\n//  - exclude      - list of characters to ignore (in addition to a-zA-Z0-9)\n//  - keepEscaped  - don't encode '%' in a correct escape sequence (default: true)\n//\n\n\nfunction encode(string, exclude, keepEscaped) {\n  var i,\n      l,\n      code,\n      nextCode,\n      cache,\n      result = '';\n\n  if (typeof exclude !== 'string') {\n    // encode(string, keepEscaped)\n    keepEscaped = exclude;\n    exclude = encode.defaultChars;\n  }\n\n  if (typeof keepEscaped === 'undefined') {\n    keepEscaped = true;\n  }\n\n  cache = getEncodeCache(exclude);\n\n  for (i = 0, l = string.length; i < l; i++) {\n    code = string.charCodeAt(i);\n\n    if (keepEscaped && code === 0x25\n    /* % */\n    && i + 2 < l) {\n      if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n        result += string.slice(i, i + 3);\n        i += 2;\n        continue;\n      }\n    }\n\n    if (code < 128) {\n      result += cache[code];\n      continue;\n    }\n\n    if (code >= 0xD800 && code <= 0xDFFF) {\n      if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n        nextCode = string.charCodeAt(i + 1);\n\n        if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n          result += encodeURIComponent(string[i] + string[i + 1]);\n          i++;\n          continue;\n        }\n      }\n\n      result += '%EF%BF%BD';\n      continue;\n    }\n\n    result += encodeURIComponent(string[i]);\n  }\n\n  return result;\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\nmodule.exports = encode;","'use strict';\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n  var i,\n      ch,\n      cache = decodeCache[exclude];\n\n  if (cache) {\n    return cache;\n  }\n\n  cache = decodeCache[exclude] = [];\n\n  for (i = 0; i < 128; i++) {\n    ch = String.fromCharCode(i);\n    cache.push(ch);\n  }\n\n  for (i = 0; i < exclude.length; i++) {\n    ch = exclude.charCodeAt(i);\n    cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n  }\n\n  return cache;\n} // Decode percent-encoded string.\n//\n\n\nfunction decode(string, exclude) {\n  var cache;\n\n  if (typeof exclude !== 'string') {\n    exclude = decode.defaultChars;\n  }\n\n  cache = getDecodeCache(exclude);\n  return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n    var i,\n        l,\n        b1,\n        b2,\n        b3,\n        b4,\n        chr,\n        result = '';\n\n    for (i = 0, l = seq.length; i < l; i += 3) {\n      b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n      if (b1 < 0x80) {\n        result += cache[b1];\n        continue;\n      }\n\n      if ((b1 & 0xE0) === 0xC0 && i + 3 < l) {\n        // 110xxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n        if ((b2 & 0xC0) === 0x80) {\n          chr = b1 << 6 & 0x7C0 | b2 & 0x3F;\n\n          if (chr < 0x80) {\n            result += \"\\uFFFD\\uFFFD\";\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 3;\n          continue;\n        }\n      }\n\n      if ((b1 & 0xF0) === 0xE0 && i + 6 < l) {\n        // 1110xxxx 10xxxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n          chr = b1 << 12 & 0xF000 | b2 << 6 & 0xFC0 | b3 & 0x3F;\n\n          if (chr < 0x800 || chr >= 0xD800 && chr <= 0xDFFF) {\n            result += \"\\uFFFD\\uFFFD\\uFFFD\";\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 6;\n          continue;\n        }\n      }\n\n      if ((b1 & 0xF8) === 0xF0 && i + 9 < l) {\n        // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n        b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n          chr = b1 << 18 & 0x1C0000 | b2 << 12 & 0x3F000 | b3 << 6 & 0xFC0 | b4 & 0x3F;\n\n          if (chr < 0x10000 || chr > 0x10FFFF) {\n            result += \"\\uFFFD\\uFFFD\\uFFFD\\uFFFD\";\n          } else {\n            chr -= 0x10000;\n            result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n          }\n\n          i += 9;\n          continue;\n        }\n      }\n\n      result += \"\\uFFFD\";\n    }\n\n    return result;\n  });\n}\n\ndecode.defaultChars = ';/?:@&=+$,#';\ndecode.componentChars = '';\nmodule.exports = decode;","'use strict';\n\nmodule.exports = function format(url) {\n  var result = '';\n  result += url.protocol || '';\n  result += url.slashes ? '//' : '';\n  result += url.auth ? url.auth + '@' : '';\n\n  if (url.hostname && url.hostname.indexOf(':') !== -1) {\n    // ipv6 address\n    result += '[' + url.hostname + ']';\n  } else {\n    result += url.hostname || '';\n  }\n\n  result += url.port ? ':' + url.port : '';\n  result += url.pathname || '';\n  result += url.search || '';\n  result += url.hash || '';\n  return result;\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict'; //\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n//    e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n//    so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n//    i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n//    (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n//    which can be constructed using other parts of the url.\n//\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.pathname = null;\n} // Reference: RFC 3986, RFC 1808, RFC 2396\n// define these here so at least they only have to be\n// compiled once on the first module load.\n\n\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n    // Special case for a simple path URL\nsimplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n    // RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\ndelims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n    // RFC 2396: characters not allowed for various reasons.\nunwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\nautoEscape = ['\\''].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nnonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n    hostEndingChars = ['/', '?', '#'],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n\n/* eslint-disable no-script-url */\n// protocols that never have a hostname.\nhostlessProtocol = {\n  'javascript': true,\n  'javascript:': true\n},\n    // protocols that always contain a // bit.\nslashedProtocol = {\n  'http': true,\n  'https': true,\n  'ftp': true,\n  'gopher': true,\n  'file': true,\n  'http:': true,\n  'https:': true,\n  'ftp:': true,\n  'gopher:': true,\n  'file:': true\n};\n/* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n  if (url && url instanceof Url) {\n    return url;\n  }\n\n  var u = new Url();\n  u.parse(url, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n  var i,\n      l,\n      lowerProto,\n      hec,\n      slashes,\n      rest = url; // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n\n    if (simplePath) {\n      this.pathname = simplePath[1];\n\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n      }\n\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n\n  if (proto) {\n    proto = proto[0];\n    lowerProto = proto.toLowerCase();\n    this.protocol = proto;\n    rest = rest.substr(proto.length);\n  } // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n\n\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    slashes = rest.substr(0, 2) === '//';\n\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] && (slashes || proto && !slashedProtocol[proto])) {\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n\n    for (i = 0; i < hostEndingChars.length; i++) {\n      hec = rest.indexOf(hostEndingChars[i]);\n\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    } // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n\n\n    var auth, atSign;\n\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    } // Now we have a portion which is definitely the auth.\n    // Pull that off.\n\n\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = auth;\n    } // the host is the remaining to the left of the first non-host char\n\n\n    hostEnd = -1;\n\n    for (i = 0; i < nonHostChars.length; i++) {\n      hec = rest.indexOf(nonHostChars[i]);\n\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    } // if we still have not hit it, then the entire thing is a host.\n\n\n    if (hostEnd === -1) {\n      hostEnd = rest.length;\n    }\n\n    if (rest[hostEnd - 1] === ':') {\n      hostEnd--;\n    }\n\n    var host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd); // pull out port.\n\n    this.parseHost(host); // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n\n    this.hostname = this.hostname || ''; // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n\n    var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']'; // validate a little.\n\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n\n      for (i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n\n        if (!part) {\n          continue;\n        }\n\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          } // we test again with ASCII char only\n\n\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n\n            if (notHost.length) {\n              rest = notHost.join('.') + rest;\n            }\n\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } // strip [ and ] from the hostname\n    // the host field still retains them, though\n\n\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n    }\n  } // chop off from the tail first.\n\n\n  var hash = rest.indexOf('#');\n\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n\n  var qm = rest.indexOf('?');\n\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    rest = rest.slice(0, qm);\n  }\n\n  if (rest) {\n    this.pathname = rest;\n  }\n\n  if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {\n    this.pathname = '';\n  }\n\n  return this;\n};\n\nUrl.prototype.parseHost = function (host) {\n  var port = portPattern.exec(host);\n\n  if (port) {\n    port = port[0];\n\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n\n    host = host.substr(0, host.length - port.length);\n  }\n\n  if (host) {\n    this.hostname = host;\n  }\n};\n\nmodule.exports = urlParse;","module.exports = /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/;","// Just a shortcut for bulk export\n'use strict';\n\nexports.parseLinkLabel = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle = require('./parse_link_title');","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n  var level,\n      found,\n      marker,\n      prevPos,\n      labelEnd = -1,\n      max = state.posMax,\n      oldPos = state.pos;\n  state.pos = start + 1;\n  level = 1;\n\n  while (state.pos < max) {\n    marker = state.src.charCodeAt(state.pos);\n\n    if (marker === 0x5D\n    /* ] */\n    ) {\n        level--;\n\n        if (level === 0) {\n          found = true;\n          break;\n        }\n      }\n\n    prevPos = state.pos;\n    state.md.inline.skipToken(state);\n\n    if (marker === 0x5B\n    /* [ */\n    ) {\n        if (prevPos === state.pos - 1) {\n          // increase level if we find text `[`, which is not a part of any token\n          level++;\n        } else if (disableNested) {\n          state.pos = oldPos;\n          return -1;\n        }\n      }\n  }\n\n  if (found) {\n    labelEnd = state.pos;\n  } // restore old state\n\n\n  state.pos = oldPos;\n  return labelEnd;\n};","// Parse link destination\n//\n'use strict';\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\nmodule.exports = function parseLinkDestination(str, start, max) {\n  var code,\n      level,\n      pos = start,\n      result = {\n    ok: false,\n    pos: 0,\n    lines: 0,\n    str: ''\n  };\n\n  if (str.charCodeAt(pos) === 0x3C\n  /* < */\n  ) {\n      pos++;\n\n      while (pos < max) {\n        code = str.charCodeAt(pos);\n\n        if (code === 0x0A\n        /* \\n */\n        ) {\n            return result;\n          }\n\n        if (code === 0x3C\n        /* < */\n        ) {\n            return result;\n          }\n\n        if (code === 0x3E\n        /* > */\n        ) {\n            result.pos = pos + 1;\n            result.str = unescapeAll(str.slice(start + 1, pos));\n            result.ok = true;\n            return result;\n          }\n\n        if (code === 0x5C\n        /* \\ */\n        && pos + 1 < max) {\n          pos += 2;\n          continue;\n        }\n\n        pos++;\n      } // no closing '>'\n\n\n      return result;\n    } // this should be ... } else { ... branch\n\n\n  level = 0;\n\n  while (pos < max) {\n    code = str.charCodeAt(pos);\n\n    if (code === 0x20) {\n      break;\n    } // ascii control characters\n\n\n    if (code < 0x20 || code === 0x7F) {\n      break;\n    }\n\n    if (code === 0x5C\n    /* \\ */\n    && pos + 1 < max) {\n      if (str.charCodeAt(pos + 1) === 0x20) {\n        break;\n      }\n\n      pos += 2;\n      continue;\n    }\n\n    if (code === 0x28\n    /* ( */\n    ) {\n        level++;\n\n        if (level > 32) {\n          return result;\n        }\n      }\n\n    if (code === 0x29\n    /* ) */\n    ) {\n        if (level === 0) {\n          break;\n        }\n\n        level--;\n      }\n\n    pos++;\n  }\n\n  if (start === pos) {\n    return result;\n  }\n\n  if (level !== 0) {\n    return result;\n  }\n\n  result.str = unescapeAll(str.slice(start, pos));\n  result.pos = pos;\n  result.ok = true;\n  return result;\n};","// Parse link title\n//\n'use strict';\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\nmodule.exports = function parseLinkTitle(str, start, max) {\n  var code,\n      marker,\n      lines = 0,\n      pos = start,\n      result = {\n    ok: false,\n    pos: 0,\n    lines: 0,\n    str: ''\n  };\n\n  if (pos >= max) {\n    return result;\n  }\n\n  marker = str.charCodeAt(pos);\n\n  if (marker !== 0x22\n  /* \" */\n  && marker !== 0x27\n  /* ' */\n  && marker !== 0x28\n  /* ( */\n  ) {\n      return result;\n    }\n\n  pos++; // if opening marker is \"(\", switch it to closing marker \")\"\n\n  if (marker === 0x28) {\n    marker = 0x29;\n  }\n\n  while (pos < max) {\n    code = str.charCodeAt(pos);\n\n    if (code === marker) {\n      result.pos = pos + 1;\n      result.lines = lines;\n      result.str = unescapeAll(str.slice(start + 1, pos));\n      result.ok = true;\n      return result;\n    } else if (code === 0x28\n    /* ( */\n    && marker === 0x29\n    /* ) */\n    ) {\n        return result;\n      } else if (code === 0x0A) {\n      lines++;\n    } else if (code === 0x5C\n    /* \\ */\n    && pos + 1 < max) {\n      pos++;\n\n      if (str.charCodeAt(pos) === 0x0A) {\n        lines++;\n      }\n    }\n\n    pos++;\n  }\n\n  return result;\n};","/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\nvar assign = require('./common/utils').assign;\n\nvar unescapeAll = require('./common/utils').unescapeAll;\n\nvar escapeHtml = require('./common/utils').escapeHtml; ////////////////////////////////////////////////////////////////////////////////\n\n\nvar default_rules = {};\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n  return '<code' + slf.renderAttrs(token) + '>' + escapeHtml(token.content) + '</code>';\n};\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n  return '<pre' + slf.renderAttrs(token) + '><code>' + escapeHtml(tokens[idx].content) + '</code></pre>\\n';\n};\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx],\n      info = token.info ? unescapeAll(token.info).trim() : '',\n      langName = '',\n      langAttrs = '',\n      highlighted,\n      i,\n      arr,\n      tmpAttrs,\n      tmpToken;\n\n  if (info) {\n    arr = info.split(/(\\s+)/g);\n    langName = arr[0];\n    langAttrs = arr.slice(2).join('');\n  }\n\n  if (options.highlight) {\n    highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content);\n  } else {\n    highlighted = escapeHtml(token.content);\n  }\n\n  if (highlighted.indexOf('<pre') === 0) {\n    return highlighted + '\\n';\n  } // If language exists, inject class gently, without modifying original token.\n  // May be, one day we will add .deepClone() for token and simplify this part, but\n  // now we prefer to keep things local.\n\n\n  if (info) {\n    i = token.attrIndex('class');\n    tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n    if (i < 0) {\n      tmpAttrs.push(['class', options.langPrefix + langName]);\n    } else {\n      tmpAttrs[i] = tmpAttrs[i].slice();\n      tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n    } // Fake token just to render attributes\n\n\n    tmpToken = {\n      attrs: tmpAttrs\n    };\n    return '<pre><code' + slf.renderAttrs(tmpToken) + '>' + highlighted + '</code></pre>\\n';\n  }\n\n  return '<pre><code' + slf.renderAttrs(token) + '>' + highlighted + '</code></pre>\\n';\n};\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx]; // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n  // should be placed on proper position for tests.\n  //\n  // Replace content with actual value\n\n  token.attrs[token.attrIndex('alt')][1] = slf.renderInlineAsText(token.children, options, env);\n  return slf.renderToken(tokens, idx, options);\n};\n\ndefault_rules.hardbreak = function (tokens, idx, options\n/*, env */\n) {\n  return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\n\ndefault_rules.softbreak = function (tokens, idx, options\n/*, env */\n) {\n  return options.breaks ? options.xhtmlOut ? '<br />\\n' : '<br>\\n' : '\\n';\n};\n\ndefault_rules.text = function (tokens, idx\n/*, options, env */\n) {\n  return escapeHtml(tokens[idx].content);\n};\n\ndefault_rules.html_block = function (tokens, idx\n/*, options, env */\n) {\n  return tokens[idx].content;\n};\n\ndefault_rules.html_inline = function (tokens, idx\n/*, options, env */\n) {\n  return tokens[idx].content;\n};\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\n\n\nfunction Renderer() {\n  /**\n   * Renderer#rules -> Object\n   *\n   * Contains render rules for tokens. Can be updated and extended.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * md.renderer.rules.strong_open  = function () { return '<b>'; };\n   * md.renderer.rules.strong_close = function () { return '</b>'; };\n   *\n   * var result = md.renderInline(...);\n   * ```\n   *\n   * Each rule is called as independent static function with fixed signature:\n   *\n   * ```javascript\n   * function my_token_render(tokens, idx, options, env, renderer) {\n   *   // ...\n   *   return renderedHTML;\n   * }\n   * ```\n   *\n   * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n   * for more details and examples.\n   **/\n  this.rules = assign({}, default_rules);\n}\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\n\n\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n  var i, l, result;\n\n  if (!token.attrs) {\n    return '';\n  }\n\n  result = '';\n\n  for (i = 0, l = token.attrs.length; i < l; i++) {\n    result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n  }\n\n  return result;\n};\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\n\n\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n  var nextToken,\n      result = '',\n      needLf = false,\n      token = tokens[idx]; // Tight list paragraphs\n\n  if (token.hidden) {\n    return '';\n  } // Insert a newline between hidden paragraph and subsequent opening\n  // block-level tag.\n  //\n  // For example, here we should insert a newline before blockquote:\n  //  - a\n  //    >\n  //\n\n\n  if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n    result += '\\n';\n  } // Add token name, e.g. `<img`\n\n\n  result += (token.nesting === -1 ? '</' : '<') + token.tag; // Encode attributes, e.g. `<img src=\"foo\"`\n\n  result += this.renderAttrs(token); // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n\n  if (token.nesting === 0 && options.xhtmlOut) {\n    result += ' /';\n  } // Check if we need to add a newline after this tag\n\n\n  if (token.block) {\n    needLf = true;\n\n    if (token.nesting === 1) {\n      if (idx + 1 < tokens.length) {\n        nextToken = tokens[idx + 1];\n\n        if (nextToken.type === 'inline' || nextToken.hidden) {\n          // Block-level tag containing an inline tag.\n          //\n          needLf = false;\n        } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n          // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n          //\n          needLf = false;\n        }\n      }\n    }\n  }\n\n  result += needLf ? '>\\n' : '>';\n  return result;\n};\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\n\n\nRenderer.prototype.renderInline = function (tokens, options, env) {\n  var type,\n      result = '',\n      rules = this.rules;\n\n  for (var i = 0, len = tokens.length; i < len; i++) {\n    type = tokens[i].type;\n\n    if (typeof rules[type] !== 'undefined') {\n      result += rules[type](tokens, i, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i, options);\n    }\n  }\n\n  return result;\n};\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\n\n\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n  var result = '';\n\n  for (var i = 0, len = tokens.length; i < len; i++) {\n    if (tokens[i].type === 'text') {\n      result += tokens[i].content;\n    } else if (tokens[i].type === 'image') {\n      result += this.renderInlineAsText(tokens[i].children, options, env);\n    } else if (tokens[i].type === 'softbreak') {\n      result += '\\n';\n    }\n  }\n\n  return result;\n};\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\n\n\nRenderer.prototype.render = function (tokens, options, env) {\n  var i,\n      len,\n      type,\n      result = '',\n      rules = this.rules;\n\n  for (i = 0, len = tokens.length; i < len; i++) {\n    type = tokens[i].type;\n\n    if (type === 'inline') {\n      result += this.renderInline(tokens[i].children, options, env);\n    } else if (typeof rules[type] !== 'undefined') {\n      result += rules[type](tokens, i, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i, options, env);\n    }\n  }\n\n  return result;\n};\n\nmodule.exports = Renderer;","/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\nvar Ruler = require('./ruler');\n\nvar _rules = [['normalize', require('./rules_core/normalize')], ['block', require('./rules_core/block')], ['inline', require('./rules_core/inline')], ['linkify', require('./rules_core/linkify')], ['replacements', require('./rules_core/replacements')], ['smartquotes', require('./rules_core/smartquotes')], // `text_join` finds `text_special` tokens (for escape sequences)\n// and joins them with the rest of the text\n['text_join', require('./rules_core/text_join')]];\n/**\n * new Core()\n **/\n\nfunction Core() {\n  /**\n   * Core#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of core rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (var i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1]);\n  }\n}\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\n\n\nCore.prototype.process = function (state) {\n  var i, l, rules;\n  rules = this.ruler.getRules('');\n\n  for (i = 0, l = rules.length; i < l; i++) {\n    rules[i](state);\n  }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\nmodule.exports = Core;","// Normalize input string\n'use strict'; // https://spec.commonmark.org/0.29/#line-ending\n\nvar NEWLINES_RE = /\\r\\n?|\\n/g;\nvar NULL_RE = /\\0/g;\n\nmodule.exports = function normalize(state) {\n  var str; // Normalize newlines\n\n  str = state.src.replace(NEWLINES_RE, '\\n'); // Replace NULL characters\n\n  str = str.replace(NULL_RE, \"\\uFFFD\");\n  state.src = str;\n};","'use strict';\n\nmodule.exports = function block(state) {\n  var token;\n\n  if (state.inlineMode) {\n    token = new state.Token('inline', '', 0);\n    token.content = state.src;\n    token.map = [0, 1];\n    token.children = [];\n    state.tokens.push(token);\n  } else {\n    state.md.block.parse(state.src, state.md, state.env, state.tokens);\n  }\n};","'use strict';\n\nmodule.exports = function inline(state) {\n  var tokens = state.tokens,\n      tok,\n      i,\n      l; // Parse inlines\n\n  for (i = 0, l = tokens.length; i < l; i++) {\n    tok = tokens[i];\n\n    if (tok.type === 'inline') {\n      state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n    }\n  }\n};","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\nfunction isLinkOpen(str) {\n  return /^<a[>\\s]/i.test(str);\n}\n\nfunction isLinkClose(str) {\n  return /^<\\/a\\s*>/i.test(str);\n}\n\nmodule.exports = function linkify(state) {\n  var i,\n      j,\n      l,\n      tokens,\n      token,\n      currentToken,\n      nodes,\n      ln,\n      text,\n      pos,\n      lastPos,\n      level,\n      htmlLinkLevel,\n      url,\n      fullUrl,\n      urlText,\n      blockTokens = state.tokens,\n      links;\n\n  if (!state.md.options.linkify) {\n    return;\n  }\n\n  for (j = 0, l = blockTokens.length; j < l; j++) {\n    if (blockTokens[j].type !== 'inline' || !state.md.linkify.pretest(blockTokens[j].content)) {\n      continue;\n    }\n\n    tokens = blockTokens[j].children;\n    htmlLinkLevel = 0; // We scan from the end, to keep position when new tags added.\n    // Use reversed logic in links start/end match\n\n    for (i = tokens.length - 1; i >= 0; i--) {\n      currentToken = tokens[i]; // Skip content of markdown links\n\n      if (currentToken.type === 'link_close') {\n        i--;\n\n        while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n          i--;\n        }\n\n        continue;\n      } // Skip content of html tag links\n\n\n      if (currentToken.type === 'html_inline') {\n        if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n          htmlLinkLevel--;\n        }\n\n        if (isLinkClose(currentToken.content)) {\n          htmlLinkLevel++;\n        }\n      }\n\n      if (htmlLinkLevel > 0) {\n        continue;\n      }\n\n      if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n        text = currentToken.content;\n        links = state.md.linkify.match(text); // Now split string to nodes\n\n        nodes = [];\n        level = currentToken.level;\n        lastPos = 0; // forbid escape sequence at the start of the string,\n        // this avoids http\\://example.com/ from being linkified as\n        // http:<a href=\"//example.com/\">//example.com/</a>\n\n        if (links.length > 0 && links[0].index === 0 && i > 0 && tokens[i - 1].type === 'text_special') {\n          links = links.slice(1);\n        }\n\n        for (ln = 0; ln < links.length; ln++) {\n          url = links[ln].url;\n          fullUrl = state.md.normalizeLink(url);\n\n          if (!state.md.validateLink(fullUrl)) {\n            continue;\n          }\n\n          urlText = links[ln].text; // Linkifier might send raw hostnames like \"example.com\", where url\n          // starts with domain name. So we prepend http:// in those cases,\n          // and remove it afterwards.\n          //\n\n          if (!links[ln].schema) {\n            urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n          } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n            urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n          } else {\n            urlText = state.md.normalizeLinkText(urlText);\n          }\n\n          pos = links[ln].index;\n\n          if (pos > lastPos) {\n            token = new state.Token('text', '', 0);\n            token.content = text.slice(lastPos, pos);\n            token.level = level;\n            nodes.push(token);\n          }\n\n          token = new state.Token('link_open', 'a', 1);\n          token.attrs = [['href', fullUrl]];\n          token.level = level++;\n          token.markup = 'linkify';\n          token.info = 'auto';\n          nodes.push(token);\n          token = new state.Token('text', '', 0);\n          token.content = urlText;\n          token.level = level;\n          nodes.push(token);\n          token = new state.Token('link_close', 'a', -1);\n          token.level = --level;\n          token.markup = 'linkify';\n          token.info = 'auto';\n          nodes.push(token);\n          lastPos = links[ln].lastIndex;\n        }\n\n        if (lastPos < text.length) {\n          token = new state.Token('text', '', 0);\n          token.content = text.slice(lastPos);\n          token.level = level;\n          nodes.push(token);\n        } // replace current node\n\n\n        blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n      }\n    }\n  }\n};","// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → &ndash;, --- → &mdash;\n//\n'use strict'; // TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - multiplications 2 x 4 -> 2 × 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/; // Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\n\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i;\nvar SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig;\nvar SCOPED_ABBR = {\n  c: '©',\n  r: '®',\n  tm: '™'\n};\n\nfunction replaceFn(match, name) {\n  return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n  var i,\n      token,\n      inside_autolink = 0;\n\n  for (i = inlineTokens.length - 1; i >= 0; i--) {\n    token = inlineTokens[i];\n\n    if (token.type === 'text' && !inside_autolink) {\n      token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--;\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++;\n    }\n  }\n}\n\nfunction replace_rare(inlineTokens) {\n  var i,\n      token,\n      inside_autolink = 0;\n\n  for (i = inlineTokens.length - 1; i >= 0; i--) {\n    token = inlineTokens[i];\n\n    if (token.type === 'text' && !inside_autolink) {\n      if (RARE_RE.test(token.content)) {\n        token.content = token.content.replace(/\\+-/g, '±') // .., ..., ....... -> …\n        // but ?..... & !..... -> ?.. & !..\n        .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..').replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',') // em-dash\n        .replace(/(^|[^-])---(?=[^-]|$)/mg, \"$1\\u2014\") // en-dash\n        .replace(/(^|\\s)--(?=\\s|$)/mg, \"$1\\u2013\").replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, \"$1\\u2013\");\n      }\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--;\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++;\n    }\n  }\n}\n\nmodule.exports = function replace(state) {\n  var blkIdx;\n\n  if (!state.md.options.typographer) {\n    return;\n  }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n    if (state.tokens[blkIdx].type !== 'inline') {\n      continue;\n    }\n\n    if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n      replace_scoped(state.tokens[blkIdx].children);\n    }\n\n    if (RARE_RE.test(state.tokens[blkIdx].content)) {\n      replace_rare(state.tokens[blkIdx].children);\n    }\n  }\n};","// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\n\nvar isPunctChar = require('../common/utils').isPunctChar;\n\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = \"\\u2019\";\n/* ’ */\n\nfunction replaceAt(str, index, ch) {\n  return str.slice(0, index) + ch + str.slice(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n  var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar, isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace, canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n  stack = [];\n\n  for (i = 0; i < tokens.length; i++) {\n    token = tokens[i];\n    thisLevel = tokens[i].level;\n\n    for (j = stack.length - 1; j >= 0; j--) {\n      if (stack[j].level <= thisLevel) {\n        break;\n      }\n    }\n\n    stack.length = j + 1;\n\n    if (token.type !== 'text') {\n      continue;\n    }\n\n    text = token.content;\n    pos = 0;\n    max = text.length;\n    /*eslint no-labels:0,block-scoped-var:0*/\n\n    OUTER: while (pos < max) {\n      QUOTE_RE.lastIndex = pos;\n      t = QUOTE_RE.exec(text);\n\n      if (!t) {\n        break;\n      }\n\n      canOpen = canClose = true;\n      pos = t.index + 1;\n      isSingle = t[0] === \"'\"; // Find previous character,\n      // default to space if it's the beginning of the line\n      //\n\n      lastChar = 0x20;\n\n      if (t.index - 1 >= 0) {\n        lastChar = text.charCodeAt(t.index - 1);\n      } else {\n        for (j = i - 1; j >= 0; j--) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n\n          if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n          break;\n        }\n      } // Find next character,\n      // default to space if it's the end of the line\n      //\n\n\n      nextChar = 0x20;\n\n      if (pos < max) {\n        nextChar = text.charCodeAt(pos);\n      } else {\n        for (j = i + 1; j < tokens.length; j++) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n\n          if (!tokens[j].content) continue; // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          nextChar = tokens[j].content.charCodeAt(0);\n          break;\n        }\n      }\n\n      isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n      isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n      isLastWhiteSpace = isWhiteSpace(lastChar);\n      isNextWhiteSpace = isWhiteSpace(nextChar);\n\n      if (isNextWhiteSpace) {\n        canOpen = false;\n      } else if (isNextPunctChar) {\n        if (!(isLastWhiteSpace || isLastPunctChar)) {\n          canOpen = false;\n        }\n      }\n\n      if (isLastWhiteSpace) {\n        canClose = false;\n      } else if (isLastPunctChar) {\n        if (!(isNextWhiteSpace || isNextPunctChar)) {\n          canClose = false;\n        }\n      }\n\n      if (nextChar === 0x22\n      /* \" */\n      && t[0] === '\"') {\n        if (lastChar >= 0x30\n        /* 0 */\n        && lastChar <= 0x39\n        /* 9 */\n        ) {\n            // special case: 1\"\" - count first quote as an inch\n            canClose = canOpen = false;\n          }\n      }\n\n      if (canOpen && canClose) {\n        // Replace quotes in the middle of punctuation sequence, but not\n        // in the middle of the words, i.e.:\n        //\n        // 1. foo \" bar \" baz - not replaced\n        // 2. foo-\"-bar-\"-baz - replaced\n        // 3. foo\"bar\"baz     - not replaced\n        //\n        canOpen = isLastPunctChar;\n        canClose = isNextPunctChar;\n      }\n\n      if (!canOpen && !canClose) {\n        // middle of word\n        if (isSingle) {\n          token.content = replaceAt(token.content, t.index, APOSTROPHE);\n        }\n\n        continue;\n      }\n\n      if (canClose) {\n        // this could be a closing quote, rewind the stack to get a match\n        for (j = stack.length - 1; j >= 0; j--) {\n          item = stack[j];\n\n          if (stack[j].level < thisLevel) {\n            break;\n          }\n\n          if (item.single === isSingle && stack[j].level === thisLevel) {\n            item = stack[j];\n\n            if (isSingle) {\n              openQuote = state.md.options.quotes[2];\n              closeQuote = state.md.options.quotes[3];\n            } else {\n              openQuote = state.md.options.quotes[0];\n              closeQuote = state.md.options.quotes[1];\n            } // replace token.content *before* tokens[item.token].content,\n            // because, if they are pointing at the same token, replaceAt\n            // could mess up indices when quote length != 1\n\n\n            token.content = replaceAt(token.content, t.index, closeQuote);\n            tokens[item.token].content = replaceAt(tokens[item.token].content, item.pos, openQuote);\n            pos += closeQuote.length - 1;\n\n            if (item.token === i) {\n              pos += openQuote.length - 1;\n            }\n\n            text = token.content;\n            max = text.length;\n            stack.length = j;\n            continue OUTER;\n          }\n        }\n      }\n\n      if (canOpen) {\n        stack.push({\n          token: i,\n          pos: t.index,\n          single: isSingle,\n          level: thisLevel\n        });\n      } else if (canClose && isSingle) {\n        token.content = replaceAt(token.content, t.index, APOSTROPHE);\n      }\n    }\n  }\n}\n\nmodule.exports = function smartquotes(state) {\n  /*eslint max-depth:0*/\n  var blkIdx;\n\n  if (!state.md.options.typographer) {\n    return;\n  }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n    if (state.tokens[blkIdx].type !== 'inline' || !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n      continue;\n    }\n\n    process_inlines(state.tokens[blkIdx].children, state);\n  }\n};","// Join raw text tokens with the rest of the text\n//\n// This is set as a separate rule to provide an opportunity for plugins\n// to run text replacements after text join, but before escape join.\n//\n// For example, `\\:)` shouldn't be replaced with an emoji.\n//\n'use strict';\n\nmodule.exports = function text_join(state) {\n  var j,\n      l,\n      tokens,\n      curr,\n      max,\n      last,\n      blockTokens = state.tokens;\n\n  for (j = 0, l = blockTokens.length; j < l; j++) {\n    if (blockTokens[j].type !== 'inline') continue;\n    tokens = blockTokens[j].children;\n    max = tokens.length;\n\n    for (curr = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text_special') {\n        tokens[curr].type = 'text';\n      }\n    }\n\n    for (curr = last = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text' && curr + 1 < max && tokens[curr + 1].type === 'text') {\n        // collapse two adjacent text nodes\n        tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n      } else {\n        if (curr !== last) {\n          tokens[last] = tokens[curr];\n        }\n\n        last++;\n      }\n    }\n\n    if (curr !== last) {\n      tokens.length = last;\n    }\n  }\n};","// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\nfunction StateCore(src, md, env) {\n  this.src = src;\n  this.env = env;\n  this.tokens = [];\n  this.inlineMode = false;\n  this.md = md; // link to parser instance\n} // re-export Token class to use in core rules\n\n\nStateCore.prototype.Token = Token;\nmodule.exports = StateCore;","/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\nvar Ruler = require('./ruler');\n\nvar _rules = [// First 2 params - rule name & source. Secondary array - list of rules,\n// which can be terminated by this one.\n['table', require('./rules_block/table'), ['paragraph', 'reference']], ['code', require('./rules_block/code')], ['fence', require('./rules_block/fence'), ['paragraph', 'reference', 'blockquote', 'list']], ['blockquote', require('./rules_block/blockquote'), ['paragraph', 'reference', 'blockquote', 'list']], ['hr', require('./rules_block/hr'), ['paragraph', 'reference', 'blockquote', 'list']], ['list', require('./rules_block/list'), ['paragraph', 'reference', 'blockquote']], ['reference', require('./rules_block/reference')], ['html_block', require('./rules_block/html_block'), ['paragraph', 'reference', 'blockquote']], ['heading', require('./rules_block/heading'), ['paragraph', 'reference', 'blockquote']], ['lheading', require('./rules_block/lheading')], ['paragraph', require('./rules_block/paragraph')]];\n/**\n * new ParserBlock()\n **/\n\nfunction ParserBlock() {\n  /**\n   * ParserBlock#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of block rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (var i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1], {\n      alt: (_rules[i][2] || []).slice()\n    });\n  }\n} // Generate tokens for input range\n//\n\n\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n  var ok,\n      i,\n      prevLine,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      line = startLine,\n      hasEmptyLines = false,\n      maxNesting = state.md.options.maxNesting;\n\n  while (line < endLine) {\n    state.line = line = state.skipEmptyLines(line);\n\n    if (line >= endLine) {\n      break;\n    } // Termination condition for nested calls.\n    // Nested calls currently used for blockquotes & lists\n\n\n    if (state.sCount[line] < state.blkIndent) {\n      break;\n    } // If nesting level exceeded - skip tail to the end. That's not ordinary\n    // situation and we should not care about content.\n\n\n    if (state.level >= maxNesting) {\n      state.line = endLine;\n      break;\n    } // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.line`\n    // - update `state.tokens`\n    // - return true\n\n\n    prevLine = state.line;\n\n    for (i = 0; i < len; i++) {\n      ok = rules[i](state, line, endLine, false);\n\n      if (ok) {\n        if (prevLine >= state.line) {\n          throw new Error(\"block rule didn't increment state.line\");\n        }\n\n        break;\n      }\n    } // this can only happen if user disables paragraph rule\n\n\n    if (!ok) throw new Error('none of the block rules matched'); // set state.tight if we had an empty line before current tag\n    // i.e. latest empty line should not count\n\n    state.tight = !hasEmptyLines; // paragraph might \"eat\" one newline after it in nested lists\n\n    if (state.isEmpty(state.line - 1)) {\n      hasEmptyLines = true;\n    }\n\n    line = state.line;\n\n    if (line < endLine && state.isEmpty(line)) {\n      hasEmptyLines = true;\n      line++;\n      state.line = line;\n    }\n  }\n};\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\n\n\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n  var state;\n\n  if (!src) {\n    return;\n  }\n\n  state = new this.State(src, md, env, outTokens);\n  this.tokenize(state, state.line, state.lineMax);\n};\n\nParserBlock.prototype.State = require('./rules_block/state_block');\nmodule.exports = ParserBlock;","// GFM table, https://github.github.com/gfm/#tables-extension-\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nfunction getLine(state, line) {\n  var pos = state.bMarks[line] + state.tShift[line],\n      max = state.eMarks[line];\n  return state.src.slice(pos, max);\n}\n\nfunction escapedSplit(str) {\n  var result = [],\n      pos = 0,\n      max = str.length,\n      ch,\n      isEscaped = false,\n      lastPos = 0,\n      current = '';\n  ch = str.charCodeAt(pos);\n\n  while (pos < max) {\n    if (ch === 0x7c\n    /* | */\n    ) {\n        if (!isEscaped) {\n          // pipe separating cells, '|'\n          result.push(current + str.substring(lastPos, pos));\n          current = '';\n          lastPos = pos + 1;\n        } else {\n          // escaped pipe, '\\|'\n          current += str.substring(lastPos, pos - 1);\n          lastPos = pos;\n        }\n      }\n\n    isEscaped = ch === 0x5c\n    /* \\ */\n    ;\n    pos++;\n    ch = str.charCodeAt(pos);\n  }\n\n  result.push(current + str.substring(lastPos));\n  return result;\n}\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n  var ch, lineText, pos, i, l, nextLine, columns, columnCount, token, aligns, t, tableLines, tbodyLines, oldParentType, terminate, terminatorRules, firstCh, secondCh; // should have at least two lines\n\n  if (startLine + 2 > endLine) {\n    return false;\n  }\n\n  nextLine = startLine + 1;\n\n  if (state.sCount[nextLine] < state.blkIndent) {\n    return false;\n  } // if it's indented more than 3 spaces, it should be a code block\n\n\n  if (state.sCount[nextLine] - state.blkIndent >= 4) {\n    return false;\n  } // first character of the second line should be '|', '-', ':',\n  // and no other characters are allowed but spaces;\n  // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n\n  pos = state.bMarks[nextLine] + state.tShift[nextLine];\n\n  if (pos >= state.eMarks[nextLine]) {\n    return false;\n  }\n\n  firstCh = state.src.charCodeAt(pos++);\n\n  if (firstCh !== 0x7C\n  /* | */\n  && firstCh !== 0x2D\n  /* - */\n  && firstCh !== 0x3A\n  /* : */\n  ) {\n      return false;\n    }\n\n  if (pos >= state.eMarks[nextLine]) {\n    return false;\n  }\n\n  secondCh = state.src.charCodeAt(pos++);\n\n  if (secondCh !== 0x7C\n  /* | */\n  && secondCh !== 0x2D\n  /* - */\n  && secondCh !== 0x3A\n  /* : */\n  && !isSpace(secondCh)) {\n    return false;\n  } // if first character is '-', then second character must not be a space\n  // (due to parsing ambiguity with list)\n\n\n  if (firstCh === 0x2D\n  /* - */\n  && isSpace(secondCh)) {\n    return false;\n  }\n\n  while (pos < state.eMarks[nextLine]) {\n    ch = state.src.charCodeAt(pos);\n\n    if (ch !== 0x7C\n    /* | */\n    && ch !== 0x2D\n    /* - */\n    && ch !== 0x3A\n    /* : */\n    && !isSpace(ch)) {\n      return false;\n    }\n\n    pos++;\n  }\n\n  lineText = getLine(state, startLine + 1);\n  columns = lineText.split('|');\n  aligns = [];\n\n  for (i = 0; i < columns.length; i++) {\n    t = columns[i].trim();\n\n    if (!t) {\n      // allow empty columns before and after table, but not in between columns;\n      // e.g. allow ` |---| `, disallow ` ---||--- `\n      if (i === 0 || i === columns.length - 1) {\n        continue;\n      } else {\n        return false;\n      }\n    }\n\n    if (!/^:?-+:?$/.test(t)) {\n      return false;\n    }\n\n    if (t.charCodeAt(t.length - 1) === 0x3A\n    /* : */\n    ) {\n        aligns.push(t.charCodeAt(0) === 0x3A\n        /* : */\n        ? 'center' : 'right');\n      } else if (t.charCodeAt(0) === 0x3A\n    /* : */\n    ) {\n        aligns.push('left');\n      } else {\n      aligns.push('');\n    }\n  }\n\n  lineText = getLine(state, startLine).trim();\n\n  if (lineText.indexOf('|') === -1) {\n    return false;\n  }\n\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n\n  columns = escapedSplit(lineText);\n  if (columns.length && columns[0] === '') columns.shift();\n  if (columns.length && columns[columns.length - 1] === '') columns.pop(); // header row will define an amount of columns in the entire table,\n  // and align row should be exactly the same (the rest of the rows can differ)\n\n  columnCount = columns.length;\n\n  if (columnCount === 0 || columnCount !== aligns.length) {\n    return false;\n  }\n\n  if (silent) {\n    return true;\n  }\n\n  oldParentType = state.parentType;\n  state.parentType = 'table'; // use 'blockquote' lists for termination because it's\n  // the most similar to tables\n\n  terminatorRules = state.md.block.ruler.getRules('blockquote');\n  token = state.push('table_open', 'table', 1);\n  token.map = tableLines = [startLine, 0];\n  token = state.push('thead_open', 'thead', 1);\n  token.map = [startLine, startLine + 1];\n  token = state.push('tr_open', 'tr', 1);\n  token.map = [startLine, startLine + 1];\n\n  for (i = 0; i < columns.length; i++) {\n    token = state.push('th_open', 'th', 1);\n\n    if (aligns[i]) {\n      token.attrs = [['style', 'text-align:' + aligns[i]]];\n    }\n\n    token = state.push('inline', '', 0);\n    token.content = columns[i].trim();\n    token.children = [];\n    token = state.push('th_close', 'th', -1);\n  }\n\n  token = state.push('tr_close', 'tr', -1);\n  token = state.push('thead_close', 'thead', -1);\n\n  for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n    if (state.sCount[nextLine] < state.blkIndent) {\n      break;\n    }\n\n    terminate = false;\n\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n\n    if (terminate) {\n      break;\n    }\n\n    lineText = getLine(state, nextLine).trim();\n\n    if (!lineText) {\n      break;\n    }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      break;\n    }\n\n    columns = escapedSplit(lineText);\n    if (columns.length && columns[0] === '') columns.shift();\n    if (columns.length && columns[columns.length - 1] === '') columns.pop();\n\n    if (nextLine === startLine + 2) {\n      token = state.push('tbody_open', 'tbody', 1);\n      token.map = tbodyLines = [startLine + 2, 0];\n    }\n\n    token = state.push('tr_open', 'tr', 1);\n    token.map = [nextLine, nextLine + 1];\n\n    for (i = 0; i < columnCount; i++) {\n      token = state.push('td_open', 'td', 1);\n\n      if (aligns[i]) {\n        token.attrs = [['style', 'text-align:' + aligns[i]]];\n      }\n\n      token = state.push('inline', '', 0);\n      token.content = columns[i] ? columns[i].trim() : '';\n      token.children = [];\n      token = state.push('td_close', 'td', -1);\n    }\n\n    token = state.push('tr_close', 'tr', -1);\n  }\n\n  if (tbodyLines) {\n    token = state.push('tbody_close', 'tbody', -1);\n    tbodyLines[1] = nextLine;\n  }\n\n  token = state.push('table_close', 'table', -1);\n  tableLines[1] = nextLine;\n  state.parentType = oldParentType;\n  state.line = nextLine;\n  return true;\n};","// Code block (4 spaces padded)\n'use strict';\n\nmodule.exports = function code(state, startLine, endLine\n/*, silent*/\n) {\n  var nextLine, last, token;\n\n  if (state.sCount[startLine] - state.blkIndent < 4) {\n    return false;\n  }\n\n  last = nextLine = startLine + 1;\n\n  while (nextLine < endLine) {\n    if (state.isEmpty(nextLine)) {\n      nextLine++;\n      continue;\n    }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      nextLine++;\n      last = nextLine;\n      continue;\n    }\n\n    break;\n  }\n\n  state.line = last;\n  token = state.push('code_block', 'code', 0);\n  token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n';\n  token.map = [startLine, state.line];\n  return true;\n};","// fences (``` lang, ~~~ lang)\n'use strict';\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n  var marker,\n      len,\n      params,\n      nextLine,\n      mem,\n      token,\n      markup,\n      haveEndMarker = false,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine]; // if it's indented more than 3 spaces, it should be a code block\n\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n\n  if (pos + 3 > max) {\n    return false;\n  }\n\n  marker = state.src.charCodeAt(pos);\n\n  if (marker !== 0x7E\n  /* ~ */\n  && marker !== 0x60\n  /* ` */\n  ) {\n      return false;\n    } // scan marker length\n\n\n  mem = pos;\n  pos = state.skipChars(pos, marker);\n  len = pos - mem;\n\n  if (len < 3) {\n    return false;\n  }\n\n  markup = state.src.slice(mem, pos);\n  params = state.src.slice(pos, max);\n\n  if (marker === 0x60\n  /* ` */\n  ) {\n      if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n        return false;\n      }\n    } // Since start is found, we can report success here in validation mode\n\n\n  if (silent) {\n    return true;\n  } // search end of block\n\n\n  nextLine = startLine;\n\n  for (;;) {\n    nextLine++;\n\n    if (nextLine >= endLine) {\n      // unclosed block should be autoclosed by end of document.\n      // also block seems to be autoclosed by end of parent\n      break;\n    }\n\n    pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n\n    if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n      // non-empty line with negative indent should stop the list:\n      // - ```\n      //  test\n      break;\n    }\n\n    if (state.src.charCodeAt(pos) !== marker) {\n      continue;\n    }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      // closing fence should be indented less than 4 spaces\n      continue;\n    }\n\n    pos = state.skipChars(pos, marker); // closing code fence must be at least as long as the opening one\n\n    if (pos - mem < len) {\n      continue;\n    } // make sure tail has spaces only\n\n\n    pos = state.skipSpaces(pos);\n\n    if (pos < max) {\n      continue;\n    }\n\n    haveEndMarker = true; // found!\n\n    break;\n  } // If a fence has heading spaces, they should be removed from its inner block\n\n\n  len = state.sCount[startLine];\n  state.line = nextLine + (haveEndMarker ? 1 : 0);\n  token = state.push('fence', 'code', 0);\n  token.info = params;\n  token.content = state.getLines(startLine + 1, nextLine, len, true);\n  token.markup = markup;\n  token.map = [startLine, state.line];\n  return true;\n};","// Block quotes\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n  var adjustTab,\n      ch,\n      i,\n      initial,\n      l,\n      lastLineEmpty,\n      lines,\n      nextLine,\n      offset,\n      oldBMarks,\n      oldBSCount,\n      oldIndent,\n      oldParentType,\n      oldSCount,\n      oldTShift,\n      spaceAfterMarker,\n      terminate,\n      terminatorRules,\n      token,\n      isOutdented,\n      oldLineMax = state.lineMax,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine]; // if it's indented more than 3 spaces, it should be a code block\n\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  } // check the block quote marker\n\n\n  if (state.src.charCodeAt(pos) !== 0x3E\n  /* > */\n  ) {\n      return false;\n    } // we know that it's going to be a valid blockquote,\n  // so no point trying to find the end of it in silent mode\n\n\n  if (silent) {\n    return true;\n  }\n\n  oldBMarks = [];\n  oldBSCount = [];\n  oldSCount = [];\n  oldTShift = [];\n  terminatorRules = state.md.block.ruler.getRules('blockquote');\n  oldParentType = state.parentType;\n  state.parentType = 'blockquote'; // Search the end of the block\n  //\n  // Block ends with either:\n  //  1. an empty line outside:\n  //     ```\n  //     > test\n  //\n  //     ```\n  //  2. an empty line inside:\n  //     ```\n  //     >\n  //     test\n  //     ```\n  //  3. another tag:\n  //     ```\n  //     > test\n  //      - - -\n  //     ```\n\n  for (nextLine = startLine; nextLine < endLine; nextLine++) {\n    // check if it's outdented, i.e. it's inside list item and indented\n    // less than said list item:\n    //\n    // ```\n    // 1. anything\n    //    > current blockquote\n    // 2. checking this line\n    // ```\n    isOutdented = state.sCount[nextLine] < state.blkIndent;\n    pos = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n\n    if (pos >= max) {\n      // Case 1: line is not inside the blockquote, and this line is empty.\n      break;\n    }\n\n    if (state.src.charCodeAt(pos++) === 0x3E\n    /* > */\n    && !isOutdented) {\n      // This line is inside the blockquote.\n      // set offset past spaces and \">\"\n      initial = state.sCount[nextLine] + 1; // skip one optional space after '>'\n\n      if (state.src.charCodeAt(pos) === 0x20\n      /* space */\n      ) {\n          // ' >   test '\n          //     ^ -- position start of line here:\n          pos++;\n          initial++;\n          adjustTab = false;\n          spaceAfterMarker = true;\n        } else if (state.src.charCodeAt(pos) === 0x09\n      /* tab */\n      ) {\n          spaceAfterMarker = true;\n\n          if ((state.bsCount[nextLine] + initial) % 4 === 3) {\n            // '  >\\t  test '\n            //       ^ -- position start of line here (tab has width===1)\n            pos++;\n            initial++;\n            adjustTab = false;\n          } else {\n            // ' >\\t  test '\n            //    ^ -- position start of line here + shift bsCount slightly\n            //         to make extra space appear\n            adjustTab = true;\n          }\n        } else {\n        spaceAfterMarker = false;\n      }\n\n      offset = initial;\n      oldBMarks.push(state.bMarks[nextLine]);\n      state.bMarks[nextLine] = pos;\n\n      while (pos < max) {\n        ch = state.src.charCodeAt(pos);\n\n        if (isSpace(ch)) {\n          if (ch === 0x09) {\n            offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n          } else {\n            offset++;\n          }\n        } else {\n          break;\n        }\n\n        pos++;\n      }\n\n      lastLineEmpty = pos >= max;\n      oldBSCount.push(state.bsCount[nextLine]);\n      state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n      oldSCount.push(state.sCount[nextLine]);\n      state.sCount[nextLine] = offset - initial;\n      oldTShift.push(state.tShift[nextLine]);\n      state.tShift[nextLine] = pos - state.bMarks[nextLine];\n      continue;\n    } // Case 2: line is not inside the blockquote, and the last line was empty.\n\n\n    if (lastLineEmpty) {\n      break;\n    } // Case 3: another tag found.\n\n\n    terminate = false;\n\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n\n    if (terminate) {\n      // Quirk to enforce \"hard termination mode\" for paragraphs;\n      // normally if you call `tokenize(state, startLine, nextLine)`,\n      // paragraphs will look below nextLine for paragraph continuation,\n      // but if blockquote is terminated by another tag, they shouldn't\n      state.lineMax = nextLine;\n\n      if (state.blkIndent !== 0) {\n        // state.blkIndent was non-zero, we now set it to zero,\n        // so we need to re-calculate all offsets to appear as\n        // if indent wasn't changed\n        oldBMarks.push(state.bMarks[nextLine]);\n        oldBSCount.push(state.bsCount[nextLine]);\n        oldTShift.push(state.tShift[nextLine]);\n        oldSCount.push(state.sCount[nextLine]);\n        state.sCount[nextLine] -= state.blkIndent;\n      }\n\n      break;\n    }\n\n    oldBMarks.push(state.bMarks[nextLine]);\n    oldBSCount.push(state.bsCount[nextLine]);\n    oldTShift.push(state.tShift[nextLine]);\n    oldSCount.push(state.sCount[nextLine]); // A negative indentation means that this is a paragraph continuation\n    //\n\n    state.sCount[nextLine] = -1;\n  }\n\n  oldIndent = state.blkIndent;\n  state.blkIndent = 0;\n  token = state.push('blockquote_open', 'blockquote', 1);\n  token.markup = '>';\n  token.map = lines = [startLine, 0];\n  state.md.block.tokenize(state, startLine, nextLine);\n  token = state.push('blockquote_close', 'blockquote', -1);\n  token.markup = '>';\n  state.lineMax = oldLineMax;\n  state.parentType = oldParentType;\n  lines[1] = state.line; // Restore original tShift; this might not be necessary since the parser\n  // has already been here, but just to make sure we can do that.\n\n  for (i = 0; i < oldTShift.length; i++) {\n    state.bMarks[i + startLine] = oldBMarks[i];\n    state.tShift[i + startLine] = oldTShift[i];\n    state.sCount[i + startLine] = oldSCount[i];\n    state.bsCount[i + startLine] = oldBSCount[i];\n  }\n\n  state.blkIndent = oldIndent;\n  return true;\n};","// Horizontal rule\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n  var marker,\n      cnt,\n      ch,\n      token,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine]; // if it's indented more than 3 spaces, it should be a code block\n\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n\n  marker = state.src.charCodeAt(pos++); // Check hr marker\n\n  if (marker !== 0x2A\n  /* * */\n  && marker !== 0x2D\n  /* - */\n  && marker !== 0x5F\n  /* _ */\n  ) {\n      return false;\n    } // markers can be mixed with spaces, but there should be at least 3 of them\n\n\n  cnt = 1;\n\n  while (pos < max) {\n    ch = state.src.charCodeAt(pos++);\n\n    if (ch !== marker && !isSpace(ch)) {\n      return false;\n    }\n\n    if (ch === marker) {\n      cnt++;\n    }\n  }\n\n  if (cnt < 3) {\n    return false;\n  }\n\n  if (silent) {\n    return true;\n  }\n\n  state.line = startLine + 1;\n  token = state.push('hr', 'hr', 0);\n  token.map = [startLine, state.line];\n  token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n  return true;\n};","// Lists\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace; // Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\n\n\nfunction skipBulletListMarker(state, startLine) {\n  var marker, pos, max, ch;\n  pos = state.bMarks[startLine] + state.tShift[startLine];\n  max = state.eMarks[startLine];\n  marker = state.src.charCodeAt(pos++); // Check bullet\n\n  if (marker !== 0x2A\n  /* * */\n  && marker !== 0x2D\n  /* - */\n  && marker !== 0x2B\n  /* + */\n  ) {\n      return -1;\n    }\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (!isSpace(ch)) {\n      // \" -test \" - is not a list item\n      return -1;\n    }\n  }\n\n  return pos;\n} // Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\n\n\nfunction skipOrderedListMarker(state, startLine) {\n  var ch,\n      start = state.bMarks[startLine] + state.tShift[startLine],\n      pos = start,\n      max = state.eMarks[startLine]; // List marker should have at least 2 chars (digit + dot)\n\n  if (pos + 1 >= max) {\n    return -1;\n  }\n\n  ch = state.src.charCodeAt(pos++);\n\n  if (ch < 0x30\n  /* 0 */\n  || ch > 0x39\n  /* 9 */\n  ) {\n      return -1;\n    }\n\n  for (;;) {\n    // EOL -> fail\n    if (pos >= max) {\n      return -1;\n    }\n\n    ch = state.src.charCodeAt(pos++);\n\n    if (ch >= 0x30\n    /* 0 */\n    && ch <= 0x39\n    /* 9 */\n    ) {\n        // List marker should have no more than 9 digits\n        // (prevents integer overflow in browsers)\n        if (pos - start >= 10) {\n          return -1;\n        }\n\n        continue;\n      } // found valid marker\n\n\n    if (ch === 0x29\n    /* ) */\n    || ch === 0x2e\n    /* . */\n    ) {\n        break;\n      }\n\n    return -1;\n  }\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (!isSpace(ch)) {\n      // \" 1.test \" - is not a list item\n      return -1;\n    }\n  }\n\n  return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n  var i,\n      l,\n      level = state.level + 2;\n\n  for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n    if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n      state.tokens[i + 2].hidden = true;\n      state.tokens[i].hidden = true;\n      i += 2;\n    }\n  }\n}\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n  var ch,\n      contentStart,\n      i,\n      indent,\n      indentAfterMarker,\n      initial,\n      isOrdered,\n      itemLines,\n      l,\n      listLines,\n      listTokIdx,\n      markerCharCode,\n      markerValue,\n      max,\n      offset,\n      oldListIndent,\n      oldParentType,\n      oldSCount,\n      oldTShift,\n      oldTight,\n      pos,\n      posAfterMarker,\n      prevEmptyEnd,\n      start,\n      terminate,\n      terminatorRules,\n      token,\n      nextLine = startLine,\n      isTerminatingParagraph = false,\n      tight = true; // if it's indented more than 3 spaces, it should be a code block\n\n  if (state.sCount[nextLine] - state.blkIndent >= 4) {\n    return false;\n  } // Special case:\n  //  - item 1\n  //   - item 2\n  //    - item 3\n  //     - item 4\n  //      - this one is a paragraph continuation\n\n\n  if (state.listIndent >= 0 && state.sCount[nextLine] - state.listIndent >= 4 && state.sCount[nextLine] < state.blkIndent) {\n    return false;\n  } // limit conditions when list can interrupt\n  // a paragraph (validation mode only)\n\n\n  if (silent && state.parentType === 'paragraph') {\n    // Next list item should still terminate previous list item;\n    //\n    // This code can fail if plugins use blkIndent as well as lists,\n    // but I hope the spec gets fixed long before that happens.\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      isTerminatingParagraph = true;\n    }\n  } // Detect list type and position after marker\n\n\n  if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n    isOrdered = true;\n    start = state.bMarks[nextLine] + state.tShift[nextLine];\n    markerValue = Number(state.src.slice(start, posAfterMarker - 1)); // If we're starting a new ordered list right after\n    // a paragraph, it should start with 1.\n\n    if (isTerminatingParagraph && markerValue !== 1) return false;\n  } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {\n    isOrdered = false;\n  } else {\n    return false;\n  } // If we're starting a new unordered list right after\n  // a paragraph, first line should not be empty.\n\n\n  if (isTerminatingParagraph) {\n    if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false;\n  } // For validation mode we can terminate immediately\n\n\n  if (silent) {\n    return true;\n  } // We should terminate list on style change. Remember first one to compare.\n\n\n  markerCharCode = state.src.charCodeAt(posAfterMarker - 1); // Start list\n\n  listTokIdx = state.tokens.length;\n\n  if (isOrdered) {\n    token = state.push('ordered_list_open', 'ol', 1);\n\n    if (markerValue !== 1) {\n      token.attrs = [['start', markerValue]];\n    }\n  } else {\n    token = state.push('bullet_list_open', 'ul', 1);\n  }\n\n  token.map = listLines = [nextLine, 0];\n  token.markup = String.fromCharCode(markerCharCode); //\n  // Iterate list items\n  //\n\n  prevEmptyEnd = false;\n  terminatorRules = state.md.block.ruler.getRules('list');\n  oldParentType = state.parentType;\n  state.parentType = 'list';\n\n  while (nextLine < endLine) {\n    pos = posAfterMarker;\n    max = state.eMarks[nextLine];\n    initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine]);\n\n    while (pos < max) {\n      ch = state.src.charCodeAt(pos);\n\n      if (ch === 0x09) {\n        offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n      } else if (ch === 0x20) {\n        offset++;\n      } else {\n        break;\n      }\n\n      pos++;\n    }\n\n    contentStart = pos;\n\n    if (contentStart >= max) {\n      // trimming space in \"-    \\n  3\" case, indent is 1 here\n      indentAfterMarker = 1;\n    } else {\n      indentAfterMarker = offset - initial;\n    } // If we have more than 4 spaces, the indent is 1\n    // (the rest is just indented code block)\n\n\n    if (indentAfterMarker > 4) {\n      indentAfterMarker = 1;\n    } // \"  -  test\"\n    //  ^^^^^ - calculating total length of this thing\n\n\n    indent = initial + indentAfterMarker; // Run subparser & write tokens\n\n    token = state.push('list_item_open', 'li', 1);\n    token.markup = String.fromCharCode(markerCharCode);\n    token.map = itemLines = [nextLine, 0];\n\n    if (isOrdered) {\n      token.info = state.src.slice(start, posAfterMarker - 1);\n    } // change current state, then restore it after parser subcall\n\n\n    oldTight = state.tight;\n    oldTShift = state.tShift[nextLine];\n    oldSCount = state.sCount[nextLine]; //  - example list\n    // ^ listIndent position will be here\n    //   ^ blkIndent position will be here\n    //\n\n    oldListIndent = state.listIndent;\n    state.listIndent = state.blkIndent;\n    state.blkIndent = indent;\n    state.tight = true;\n    state.tShift[nextLine] = contentStart - state.bMarks[nextLine];\n    state.sCount[nextLine] = offset;\n\n    if (contentStart >= max && state.isEmpty(nextLine + 1)) {\n      // workaround for this case\n      // (list item is empty, list terminates before \"foo\"):\n      // ~~~~~~~~\n      //   -\n      //\n      //     foo\n      // ~~~~~~~~\n      state.line = Math.min(state.line + 2, endLine);\n    } else {\n      state.md.block.tokenize(state, nextLine, endLine, true);\n    } // If any of list item is tight, mark list as tight\n\n\n    if (!state.tight || prevEmptyEnd) {\n      tight = false;\n    } // Item become loose if finish with empty line,\n    // but we should filter last element, because it means list finish\n\n\n    prevEmptyEnd = state.line - nextLine > 1 && state.isEmpty(state.line - 1);\n    state.blkIndent = state.listIndent;\n    state.listIndent = oldListIndent;\n    state.tShift[nextLine] = oldTShift;\n    state.sCount[nextLine] = oldSCount;\n    state.tight = oldTight;\n    token = state.push('list_item_close', 'li', -1);\n    token.markup = String.fromCharCode(markerCharCode);\n    nextLine = state.line;\n    itemLines[1] = nextLine;\n\n    if (nextLine >= endLine) {\n      break;\n    } //\n    // Try to check if list is terminated or continued.\n    //\n\n\n    if (state.sCount[nextLine] < state.blkIndent) {\n      break;\n    } // if it's indented more than 3 spaces, it should be a code block\n\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      break;\n    } // fail if terminating block found\n\n\n    terminate = false;\n\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n\n    if (terminate) {\n      break;\n    } // fail if list has another type\n\n\n    if (isOrdered) {\n      posAfterMarker = skipOrderedListMarker(state, nextLine);\n\n      if (posAfterMarker < 0) {\n        break;\n      }\n\n      start = state.bMarks[nextLine] + state.tShift[nextLine];\n    } else {\n      posAfterMarker = skipBulletListMarker(state, nextLine);\n\n      if (posAfterMarker < 0) {\n        break;\n      }\n    }\n\n    if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) {\n      break;\n    }\n  } // Finalize list\n\n\n  if (isOrdered) {\n    token = state.push('ordered_list_close', 'ol', -1);\n  } else {\n    token = state.push('bullet_list_close', 'ul', -1);\n  }\n\n  token.markup = String.fromCharCode(markerCharCode);\n  listLines[1] = nextLine;\n  state.line = nextLine;\n  state.parentType = oldParentType; // mark paragraphs tight if needed\n\n  if (tight) {\n    markTightParagraphs(state, listTokIdx);\n  }\n\n  return true;\n};","'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n  var ch,\n      destEndPos,\n      destEndLineNo,\n      endLine,\n      href,\n      i,\n      l,\n      label,\n      labelEnd,\n      oldParentType,\n      res,\n      start,\n      str,\n      terminate,\n      terminatorRules,\n      title,\n      lines = 0,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine],\n      nextLine = startLine + 1; // if it's indented more than 3 spaces, it should be a code block\n\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n\n  if (state.src.charCodeAt(pos) !== 0x5B\n  /* [ */\n  ) {\n      return false;\n    } // Simple check to quickly interrupt scan on [link](url) at the start of line.\n  // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n\n\n  while (++pos < max) {\n    if (state.src.charCodeAt(pos) === 0x5D\n    /* ] */\n    && state.src.charCodeAt(pos - 1) !== 0x5C\n    /* \\ */\n    ) {\n        if (pos + 1 === max) {\n          return false;\n        }\n\n        if (state.src.charCodeAt(pos + 1) !== 0x3A\n        /* : */\n        ) {\n            return false;\n          }\n\n        break;\n      }\n  }\n\n  endLine = state.lineMax; // jump line-by-line until empty one or EOF\n\n  terminatorRules = state.md.block.ruler.getRules('reference');\n  oldParentType = state.parentType;\n  state.parentType = 'reference';\n\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) {\n      continue;\n    } // quirk for blockquotes, this line should already be checked by that rule\n\n\n    if (state.sCount[nextLine] < 0) {\n      continue;\n    } // Some tags can terminate paragraph without empty line.\n\n\n    terminate = false;\n\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n\n    if (terminate) {\n      break;\n    }\n  }\n\n  str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n  max = str.length;\n\n  for (pos = 1; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n\n    if (ch === 0x5B\n    /* [ */\n    ) {\n        return false;\n      } else if (ch === 0x5D\n    /* ] */\n    ) {\n        labelEnd = pos;\n        break;\n      } else if (ch === 0x0A\n    /* \\n */\n    ) {\n        lines++;\n      } else if (ch === 0x5C\n    /* \\ */\n    ) {\n        pos++;\n\n        if (pos < max && str.charCodeAt(pos) === 0x0A) {\n          lines++;\n        }\n      }\n  }\n\n  if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A\n  /* : */\n  ) {\n      return false;\n    } // [label]:   destination   'title'\n  //         ^^^ skip optional whitespace here\n\n\n  for (pos = labelEnd + 2; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n\n    if (ch === 0x0A) {\n      lines++;\n    } else if (isSpace(ch)) {\n      /*eslint no-empty:0*/\n    } else {\n      break;\n    }\n  } // [label]:   destination   'title'\n  //            ^^^^^^^^^^^ parse this\n\n\n  res = state.md.helpers.parseLinkDestination(str, pos, max);\n\n  if (!res.ok) {\n    return false;\n  }\n\n  href = state.md.normalizeLink(res.str);\n\n  if (!state.md.validateLink(href)) {\n    return false;\n  }\n\n  pos = res.pos;\n  lines += res.lines; // save cursor state, we could require to rollback later\n\n  destEndPos = pos;\n  destEndLineNo = lines; // [label]:   destination   'title'\n  //                       ^^^ skipping those spaces\n\n  start = pos;\n\n  for (; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n\n    if (ch === 0x0A) {\n      lines++;\n    } else if (isSpace(ch)) {\n      /*eslint no-empty:0*/\n    } else {\n      break;\n    }\n  } // [label]:   destination   'title'\n  //                          ^^^^^^^ parse this\n\n\n  res = state.md.helpers.parseLinkTitle(str, pos, max);\n\n  if (pos < max && start !== pos && res.ok) {\n    title = res.str;\n    pos = res.pos;\n    lines += res.lines;\n  } else {\n    title = '';\n    pos = destEndPos;\n    lines = destEndLineNo;\n  } // skip trailing spaces until the rest of the line\n\n\n  while (pos < max) {\n    ch = str.charCodeAt(pos);\n\n    if (!isSpace(ch)) {\n      break;\n    }\n\n    pos++;\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    if (title) {\n      // garbage at the end of the line after title,\n      // but it could still be a valid reference if we roll back\n      title = '';\n      pos = destEndPos;\n      lines = destEndLineNo;\n\n      while (pos < max) {\n        ch = str.charCodeAt(pos);\n\n        if (!isSpace(ch)) {\n          break;\n        }\n\n        pos++;\n      }\n    }\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    // garbage at the end of the line\n    return false;\n  }\n\n  label = normalizeReference(str.slice(1, labelEnd));\n\n  if (!label) {\n    // CommonMark 0.20 disallows empty labels\n    return false;\n  } // Reference can not terminate anything. This check is for safety only.\n\n  /*istanbul ignore if*/\n\n\n  if (silent) {\n    return true;\n  }\n\n  if (typeof state.env.references === 'undefined') {\n    state.env.references = {};\n  }\n\n  if (typeof state.env.references[label] === 'undefined') {\n    state.env.references[label] = {\n      title: title,\n      href: href\n    };\n  }\n\n  state.parentType = oldParentType;\n  state.line = startLine + lines + 1;\n  return true;\n};","// HTML block\n'use strict';\n\nvar block_names = require('../common/html_blocks');\n\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE; // An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\n\n\nvar HTML_SEQUENCES = [[/^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true], [/^<!--/, /-->/, true], [/^<\\?/, /\\?>/, true], [/^<![A-Z]/, />/, true], [/^<!\\[CDATA\\[/, /\\]\\]>/, true], [new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true], [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false]];\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n  var i,\n      nextLine,\n      token,\n      lineText,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine]; // if it's indented more than 3 spaces, it should be a code block\n\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n\n  if (!state.md.options.html) {\n    return false;\n  }\n\n  if (state.src.charCodeAt(pos) !== 0x3C\n  /* < */\n  ) {\n      return false;\n    }\n\n  lineText = state.src.slice(pos, max);\n\n  for (i = 0; i < HTML_SEQUENCES.length; i++) {\n    if (HTML_SEQUENCES[i][0].test(lineText)) {\n      break;\n    }\n  }\n\n  if (i === HTML_SEQUENCES.length) {\n    return false;\n  }\n\n  if (silent) {\n    // true if this sequence can be a terminator, false otherwise\n    return HTML_SEQUENCES[i][2];\n  }\n\n  nextLine = startLine + 1; // If we are here - we detected HTML block.\n  // Let's roll down till block end.\n\n  if (!HTML_SEQUENCES[i][1].test(lineText)) {\n    for (; nextLine < endLine; nextLine++) {\n      if (state.sCount[nextLine] < state.blkIndent) {\n        break;\n      }\n\n      pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n      lineText = state.src.slice(pos, max);\n\n      if (HTML_SEQUENCES[i][1].test(lineText)) {\n        if (lineText.length !== 0) {\n          nextLine++;\n        }\n\n        break;\n      }\n    }\n  }\n\n  state.line = nextLine;\n  token = state.push('html_block', '', 0);\n  token.map = [startLine, nextLine];\n  token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n  return true;\n};","// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n'use strict';\n\nmodule.exports = ['address', 'article', 'aside', 'base', 'basefont', 'blockquote', 'body', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dialog', 'dir', 'div', 'dl', 'dt', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hr', 'html', 'iframe', 'legend', 'li', 'link', 'main', 'menu', 'menuitem', 'nav', 'noframes', 'ol', 'optgroup', 'option', 'p', 'param', 'section', 'source', 'summary', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul'];","// heading (#, ##, ...)\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n  var ch,\n      level,\n      tmp,\n      token,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine]; // if it's indented more than 3 spaces, it should be a code block\n\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n\n  ch = state.src.charCodeAt(pos);\n\n  if (ch !== 0x23\n  /* # */\n  || pos >= max) {\n    return false;\n  } // count heading level\n\n\n  level = 1;\n  ch = state.src.charCodeAt(++pos);\n\n  while (ch === 0x23\n  /* # */\n  && pos < max && level <= 6) {\n    level++;\n    ch = state.src.charCodeAt(++pos);\n  }\n\n  if (level > 6 || pos < max && !isSpace(ch)) {\n    return false;\n  }\n\n  if (silent) {\n    return true;\n  } // Let's cut tails like '    ###  ' from the end of string\n\n\n  max = state.skipSpacesBack(max, pos);\n  tmp = state.skipCharsBack(max, 0x23, pos); // #\n\n  if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n    max = tmp;\n  }\n\n  state.line = startLine + 1;\n  token = state.push('heading_open', 'h' + String(level), 1);\n  token.markup = '########'.slice(0, level);\n  token.map = [startLine, state.line];\n  token = state.push('inline', '', 0);\n  token.content = state.src.slice(pos, max).trim();\n  token.map = [startLine, state.line];\n  token.children = [];\n  token = state.push('heading_close', 'h' + String(level), -1);\n  token.markup = '########'.slice(0, level);\n  return true;\n};","// lheading (---, ===)\n'use strict';\n\nmodule.exports = function lheading(state, startLine, endLine\n/*, silent*/\n) {\n  var content,\n      terminate,\n      i,\n      l,\n      token,\n      pos,\n      max,\n      level,\n      marker,\n      nextLine = startLine + 1,\n      oldParentType,\n      terminatorRules = state.md.block.ruler.getRules('paragraph'); // if it's indented more than 3 spaces, it should be a code block\n\n  if (state.sCount[startLine] - state.blkIndent >= 4) {\n    return false;\n  }\n\n  oldParentType = state.parentType;\n  state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n  // jump line-by-line until empty one or EOF\n\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) {\n      continue;\n    } //\n    // Check for underline in setext header\n    //\n\n\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n\n      if (pos < max) {\n        marker = state.src.charCodeAt(pos);\n\n        if (marker === 0x2D\n        /* - */\n        || marker === 0x3D\n        /* = */\n        ) {\n            pos = state.skipChars(pos, marker);\n            pos = state.skipSpaces(pos);\n\n            if (pos >= max) {\n              level = marker === 0x3D\n              /* = */\n              ? 1 : 2;\n              break;\n            }\n          }\n      }\n    } // quirk for blockquotes, this line should already be checked by that rule\n\n\n    if (state.sCount[nextLine] < 0) {\n      continue;\n    } // Some tags can terminate paragraph without empty line.\n\n\n    terminate = false;\n\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n\n    if (terminate) {\n      break;\n    }\n  }\n\n  if (!level) {\n    // Didn't find valid underline\n    return false;\n  }\n\n  content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n  state.line = nextLine + 1;\n  token = state.push('heading_open', 'h' + String(level), 1);\n  token.markup = String.fromCharCode(marker);\n  token.map = [startLine, state.line];\n  token = state.push('inline', '', 0);\n  token.content = content;\n  token.map = [startLine, state.line - 1];\n  token.children = [];\n  token = state.push('heading_close', 'h' + String(level), -1);\n  token.markup = String.fromCharCode(marker);\n  state.parentType = oldParentType;\n  return true;\n};","// Paragraph\n'use strict';\n\nmodule.exports = function paragraph(state, startLine, endLine) {\n  var content,\n      terminate,\n      i,\n      l,\n      token,\n      oldParentType,\n      nextLine = startLine + 1,\n      terminatorRules = state.md.block.ruler.getRules('paragraph');\n  oldParentType = state.parentType;\n  state.parentType = 'paragraph'; // jump line-by-line until empty one or EOF\n\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) {\n      continue;\n    } // quirk for blockquotes, this line should already be checked by that rule\n\n\n    if (state.sCount[nextLine] < 0) {\n      continue;\n    } // Some tags can terminate paragraph without empty line.\n\n\n    terminate = false;\n\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n\n    if (terminate) {\n      break;\n    }\n  }\n\n  content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n  state.line = nextLine;\n  token = state.push('paragraph_open', 'p', 1);\n  token.map = [startLine, state.line];\n  token = state.push('inline', '', 0);\n  token.content = content;\n  token.map = [startLine, state.line];\n  token.children = [];\n  token = state.push('paragraph_close', 'p', -1);\n  state.parentType = oldParentType;\n  return true;\n};","// Parser state class\n'use strict';\n\nvar Token = require('../token');\n\nvar isSpace = require('../common/utils').isSpace;\n\nfunction StateBlock(src, md, env, tokens) {\n  var ch, s, start, pos, len, indent, offset, indent_found;\n  this.src = src; // link to parser instance\n\n  this.md = md;\n  this.env = env; //\n  // Internal state vartiables\n  //\n\n  this.tokens = tokens;\n  this.bMarks = []; // line begin offsets for fast jumps\n\n  this.eMarks = []; // line end offsets for fast jumps\n\n  this.tShift = []; // offsets of the first non-space characters (tabs not expanded)\n\n  this.sCount = []; // indents for each line (tabs expanded)\n  // An amount of virtual spaces (tabs expanded) between beginning\n  // of each line (bMarks) and real beginning of that line.\n  //\n  // It exists only as a hack because blockquotes override bMarks\n  // losing information in the process.\n  //\n  // It's used only when expanding tabs, you can think about it as\n  // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n  // means first tab should be expanded to 4-21%4 === 3 spaces.\n  //\n\n  this.bsCount = []; // block parser variables\n\n  this.blkIndent = 0; // required block content indent (for example, if we are\n  // inside a list, it would be positioned after list marker)\n\n  this.line = 0; // line index in src\n\n  this.lineMax = 0; // lines count\n\n  this.tight = false; // loose/tight mode for lists\n\n  this.ddIndent = -1; // indent of the current dd block (-1 if there isn't any)\n\n  this.listIndent = -1; // indent of the current list block (-1 if there isn't any)\n  // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n  // used in lists to determine if they interrupt a paragraph\n\n  this.parentType = 'root';\n  this.level = 0; // renderer\n\n  this.result = ''; // Create caches\n  // Generate markers.\n\n  s = this.src;\n  indent_found = false;\n\n  for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n    ch = s.charCodeAt(pos);\n\n    if (!indent_found) {\n      if (isSpace(ch)) {\n        indent++;\n\n        if (ch === 0x09) {\n          offset += 4 - offset % 4;\n        } else {\n          offset++;\n        }\n\n        continue;\n      } else {\n        indent_found = true;\n      }\n    }\n\n    if (ch === 0x0A || pos === len - 1) {\n      if (ch !== 0x0A) {\n        pos++;\n      }\n\n      this.bMarks.push(start);\n      this.eMarks.push(pos);\n      this.tShift.push(indent);\n      this.sCount.push(offset);\n      this.bsCount.push(0);\n      indent_found = false;\n      indent = 0;\n      offset = 0;\n      start = pos + 1;\n    }\n  } // Push fake entry to simplify cache bounds checks\n\n\n  this.bMarks.push(s.length);\n  this.eMarks.push(s.length);\n  this.tShift.push(0);\n  this.sCount.push(0);\n  this.bsCount.push(0);\n  this.lineMax = this.bMarks.length - 1; // don't count last fake line\n} // Push new token to \"stream\".\n//\n\n\nStateBlock.prototype.push = function (type, tag, nesting) {\n  var token = new Token(type, tag, nesting);\n  token.block = true;\n  if (nesting < 0) this.level--; // closing tag\n\n  token.level = this.level;\n  if (nesting > 0) this.level++; // opening tag\n\n  this.tokens.push(token);\n  return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n  return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n  for (var max = this.lineMax; from < max; from++) {\n    if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n      break;\n    }\n  }\n\n  return from;\n}; // Skip spaces from given position.\n\n\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n  var ch;\n\n  for (var max = this.src.length; pos < max; pos++) {\n    ch = this.src.charCodeAt(pos);\n\n    if (!isSpace(ch)) {\n      break;\n    }\n  }\n\n  return pos;\n}; // Skip spaces from given position in reverse.\n\n\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n  if (pos <= min) {\n    return pos;\n  }\n\n  while (pos > min) {\n    if (!isSpace(this.src.charCodeAt(--pos))) {\n      return pos + 1;\n    }\n  }\n\n  return pos;\n}; // Skip char codes from given position\n\n\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n  for (var max = this.src.length; pos < max; pos++) {\n    if (this.src.charCodeAt(pos) !== code) {\n      break;\n    }\n  }\n\n  return pos;\n}; // Skip char codes reverse from given position - 1\n\n\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n  if (pos <= min) {\n    return pos;\n  }\n\n  while (pos > min) {\n    if (code !== this.src.charCodeAt(--pos)) {\n      return pos + 1;\n    }\n  }\n\n  return pos;\n}; // cut lines range from source.\n\n\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n  var i,\n      lineIndent,\n      ch,\n      first,\n      last,\n      queue,\n      lineStart,\n      line = begin;\n\n  if (begin >= end) {\n    return '';\n  }\n\n  queue = new Array(end - begin);\n\n  for (i = 0; line < end; line++, i++) {\n    lineIndent = 0;\n    lineStart = first = this.bMarks[line];\n\n    if (line + 1 < end || keepLastLF) {\n      // No need for bounds check because we have fake entry on tail.\n      last = this.eMarks[line] + 1;\n    } else {\n      last = this.eMarks[line];\n    }\n\n    while (first < last && lineIndent < indent) {\n      ch = this.src.charCodeAt(first);\n\n      if (isSpace(ch)) {\n        if (ch === 0x09) {\n          lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n        } else {\n          lineIndent++;\n        }\n      } else if (first - lineStart < this.tShift[line]) {\n        // patched tShift masked characters to look like spaces (blockquotes, list markers)\n        lineIndent++;\n      } else {\n        break;\n      }\n\n      first++;\n    }\n\n    if (lineIndent > indent) {\n      // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n      // with indent=2 becomes '  \\tfoobar'\n      queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n    } else {\n      queue[i] = this.src.slice(first, last);\n    }\n  }\n\n  return queue.join('');\n}; // re-export Token class to use in block rules\n\n\nStateBlock.prototype.Token = Token;\nmodule.exports = StateBlock;","/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\nvar Ruler = require('./ruler'); ////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\n\nvar _rules = [['text', require('./rules_inline/text')], ['linkify', require('./rules_inline/linkify')], ['newline', require('./rules_inline/newline')], ['escape', require('./rules_inline/escape')], ['backticks', require('./rules_inline/backticks')], ['strikethrough', require('./rules_inline/strikethrough').tokenize], ['emphasis', require('./rules_inline/emphasis').tokenize], ['link', require('./rules_inline/link')], ['image', require('./rules_inline/image')], ['autolink', require('./rules_inline/autolink')], ['html_inline', require('./rules_inline/html_inline')], ['entity', require('./rules_inline/entity')]]; // `rule2` ruleset was created specifically for emphasis/strikethrough\n// post-processing and may be changed in the future.\n//\n// Don't use this for anything except pairs (plugins working with `balance_pairs`).\n//\n\nvar _rules2 = [['balance_pairs', require('./rules_inline/balance_pairs')], ['strikethrough', require('./rules_inline/strikethrough').postProcess], ['emphasis', require('./rules_inline/emphasis').postProcess], // rules for pairs separate '**' into its own text tokens, which may be left unused,\n// rule below merges unused segments back with the rest of the text\n['fragments_join', require('./rules_inline/fragments_join')]];\n/**\n * new ParserInline()\n **/\n\nfunction ParserInline() {\n  var i;\n  /**\n   * ParserInline#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of inline rules.\n   **/\n\n  this.ruler = new Ruler();\n\n  for (i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1]);\n  }\n  /**\n   * ParserInline#ruler2 -> Ruler\n   *\n   * [[Ruler]] instance. Second ruler used for post-processing\n   * (e.g. in emphasis-like rules).\n   **/\n\n\n  this.ruler2 = new Ruler();\n\n  for (i = 0; i < _rules2.length; i++) {\n    this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n  }\n} // Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\n\n\nParserInline.prototype.skipToken = function (state) {\n  var ok,\n      i,\n      pos = state.pos,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      maxNesting = state.md.options.maxNesting,\n      cache = state.cache;\n\n  if (typeof cache[pos] !== 'undefined') {\n    state.pos = cache[pos];\n    return;\n  }\n\n  if (state.level < maxNesting) {\n    for (i = 0; i < len; i++) {\n      // Increment state.level and decrement it later to limit recursion.\n      // It's harmless to do here, because no tokens are created. But ideally,\n      // we'd need a separate private state variable for this purpose.\n      //\n      state.level++;\n      ok = rules[i](state, true);\n      state.level--;\n\n      if (ok) {\n        if (pos >= state.pos) {\n          throw new Error(\"inline rule didn't increment state.pos\");\n        }\n\n        break;\n      }\n    }\n  } else {\n    // Too much nesting, just skip until the end of the paragraph.\n    //\n    // NOTE: this will cause links to behave incorrectly in the following case,\n    //       when an amount of `[` is exactly equal to `maxNesting + 1`:\n    //\n    //       [[[[[[[[[[[[[[[[[[[[[foo]()\n    //\n    // TODO: remove this workaround when CM standard will allow nested links\n    //       (we can replace it by preventing links from being parsed in\n    //       validation mode)\n    //\n    state.pos = state.posMax;\n  }\n\n  if (!ok) {\n    state.pos++;\n  }\n\n  cache[pos] = state.pos;\n}; // Generate tokens for input range\n//\n\n\nParserInline.prototype.tokenize = function (state) {\n  var ok,\n      i,\n      prevPos,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      end = state.posMax,\n      maxNesting = state.md.options.maxNesting;\n\n  while (state.pos < end) {\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.pos`\n    // - update `state.tokens`\n    // - return true\n    prevPos = state.pos;\n\n    if (state.level < maxNesting) {\n      for (i = 0; i < len; i++) {\n        ok = rules[i](state, false);\n\n        if (ok) {\n          if (prevPos >= state.pos) {\n            throw new Error(\"inline rule didn't increment state.pos\");\n          }\n\n          break;\n        }\n      }\n    }\n\n    if (ok) {\n      if (state.pos >= end) {\n        break;\n      }\n\n      continue;\n    }\n\n    state.pending += state.src[state.pos++];\n  }\n\n  if (state.pending) {\n    state.pushPending();\n  }\n};\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\n\n\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n  var i, rules, len;\n  var state = new this.State(str, md, env, outTokens);\n  this.tokenize(state);\n  rules = this.ruler2.getRules('');\n  len = rules.length;\n\n  for (i = 0; i < len; i++) {\n    rules[i](state);\n  }\n};\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\nmodule.exports = ParserInline;","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n'use strict'; // Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n\nfunction isTerminatorChar(ch) {\n  switch (ch) {\n    case 0x0A\n    /* \\n */\n    :\n    case 0x21\n    /* ! */\n    :\n    case 0x23\n    /* # */\n    :\n    case 0x24\n    /* $ */\n    :\n    case 0x25\n    /* % */\n    :\n    case 0x26\n    /* & */\n    :\n    case 0x2A\n    /* * */\n    :\n    case 0x2B\n    /* + */\n    :\n    case 0x2D\n    /* - */\n    :\n    case 0x3A\n    /* : */\n    :\n    case 0x3C\n    /* < */\n    :\n    case 0x3D\n    /* = */\n    :\n    case 0x3E\n    /* > */\n    :\n    case 0x40\n    /* @ */\n    :\n    case 0x5B\n    /* [ */\n    :\n    case 0x5C\n    /* \\ */\n    :\n    case 0x5D\n    /* ] */\n    :\n    case 0x5E\n    /* ^ */\n    :\n    case 0x5F\n    /* _ */\n    :\n    case 0x60\n    /* ` */\n    :\n    case 0x7B\n    /* { */\n    :\n    case 0x7D\n    /* } */\n    :\n    case 0x7E\n    /* ~ */\n    :\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos;\n\n  while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n    pos++;\n  }\n\n  if (pos === state.pos) {\n    return false;\n  }\n\n  if (!silent) {\n    state.pending += state.src.slice(state.pos, pos);\n  }\n\n  state.pos = pos;\n  return true;\n}; // Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos,\n      idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n  // first char is terminator -> empty text\n  if (idx === 0) { return false; }\n\n  // no terminator -> text till end of string\n  if (idx < 0) {\n    if (!silent) { state.pending += state.src.slice(pos); }\n    state.pos = state.src.length;\n    return true;\n  }\n\n  if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n  state.pos += idx;\n\n  return true;\n};*/","// Process links like https://example.org/\n'use strict'; // RFC3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n\nvar SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;\n\nmodule.exports = function linkify(state, silent) {\n  var pos, max, match, proto, link, url, fullUrl, token;\n  if (!state.md.options.linkify) return false;\n  if (state.linkLevel > 0) return false;\n  pos = state.pos;\n  max = state.posMax;\n  if (pos + 3 > max) return false;\n  if (state.src.charCodeAt(pos) !== 0x3A\n  /* : */\n  ) return false;\n  if (state.src.charCodeAt(pos + 1) !== 0x2F\n  /* / */\n  ) return false;\n  if (state.src.charCodeAt(pos + 2) !== 0x2F\n  /* / */\n  ) return false;\n  match = state.pending.match(SCHEME_RE);\n  if (!match) return false;\n  proto = match[1];\n  link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length));\n  if (!link) return false;\n  url = link.url; // invalid link, but still detected by linkify somehow;\n  // need to check to prevent infinite loop below\n\n  if (url.length <= proto.length) return false; // disallow '*' at the end of the link (conflicts with emphasis)\n\n  url = url.replace(/\\*+$/, '');\n  fullUrl = state.md.normalizeLink(url);\n  if (!state.md.validateLink(fullUrl)) return false;\n\n  if (!silent) {\n    state.pending = state.pending.slice(0, -proto.length);\n    token = state.push('link_open', 'a', 1);\n    token.attrs = [['href', fullUrl]];\n    token.markup = 'linkify';\n    token.info = 'auto';\n    token = state.push('text', '', 0);\n    token.content = state.md.normalizeLinkText(url);\n    token = state.push('link_close', 'a', -1);\n    token.markup = 'linkify';\n    token.info = 'auto';\n  }\n\n  state.pos += url.length - proto.length;\n  return true;\n};","// Proceess '\\n'\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function newline(state, silent) {\n  var pmax,\n      max,\n      ws,\n      pos = state.pos;\n\n  if (state.src.charCodeAt(pos) !== 0x0A\n  /* \\n */\n  ) {\n      return false;\n    }\n\n  pmax = state.pending.length - 1;\n  max = state.posMax; // '  \\n' -> hardbreak\n  // Lookup in pending chars is bad practice! Don't copy to other rules!\n  // Pending string is stored in concat mode, indexed lookups will cause\n  // convertion to flat mode.\n\n  if (!silent) {\n    if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n      if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n        // Find whitespaces tail of pending chars.\n        ws = pmax - 1;\n\n        while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) {\n          ws--;\n        }\n\n        state.pending = state.pending.slice(0, ws);\n        state.push('hardbreak', 'br', 0);\n      } else {\n        state.pending = state.pending.slice(0, -1);\n        state.push('softbreak', 'br', 0);\n      }\n    } else {\n      state.push('softbreak', 'br', 0);\n    }\n  }\n\n  pos++; // skip heading spaces for next line\n\n  while (pos < max && isSpace(state.src.charCodeAt(pos))) {\n    pos++;\n  }\n\n  state.pos = pos;\n  return true;\n};","// Process escaped chars and hardbreaks\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) {\n  ESCAPED.push(0);\n}\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'.split('').forEach(function (ch) {\n  ESCAPED[ch.charCodeAt(0)] = 1;\n});\n\nmodule.exports = function escape(state, silent) {\n  var ch1,\n      ch2,\n      origStr,\n      escapedStr,\n      token,\n      pos = state.pos,\n      max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 0x5C\n  /* \\ */\n  ) return false;\n  pos++; // '\\' at the end of the inline block\n\n  if (pos >= max) return false;\n  ch1 = state.src.charCodeAt(pos);\n\n  if (ch1 === 0x0A) {\n    if (!silent) {\n      state.push('hardbreak', 'br', 0);\n    }\n\n    pos++; // skip leading whitespaces from next line\n\n    while (pos < max) {\n      ch1 = state.src.charCodeAt(pos);\n      if (!isSpace(ch1)) break;\n      pos++;\n    }\n\n    state.pos = pos;\n    return true;\n  }\n\n  escapedStr = state.src[pos];\n\n  if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {\n    ch2 = state.src.charCodeAt(pos + 1);\n\n    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {\n      escapedStr += state.src[pos + 1];\n      pos++;\n    }\n  }\n\n  origStr = '\\\\' + escapedStr;\n\n  if (!silent) {\n    token = state.push('text_special', '', 0);\n\n    if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n      token.content = escapedStr;\n    } else {\n      token.content = origStr;\n    }\n\n    token.markup = origStr;\n    token.info = 'escape';\n  }\n\n  state.pos = pos + 1;\n  return true;\n};","// Parse backticks\n'use strict';\n\nmodule.exports = function backtick(state, silent) {\n  var start,\n      max,\n      marker,\n      token,\n      matchStart,\n      matchEnd,\n      openerLength,\n      closerLength,\n      pos = state.pos,\n      ch = state.src.charCodeAt(pos);\n\n  if (ch !== 0x60\n  /* ` */\n  ) {\n      return false;\n    }\n\n  start = pos;\n  pos++;\n  max = state.posMax; // scan marker length\n\n  while (pos < max && state.src.charCodeAt(pos) === 0x60\n  /* ` */\n  ) {\n    pos++;\n  }\n\n  marker = state.src.slice(start, pos);\n  openerLength = marker.length;\n\n  if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n    if (!silent) state.pending += marker;\n    state.pos += openerLength;\n    return true;\n  }\n\n  matchEnd = pos; // Nothing found in the cache, scan until the end of the line (or until marker is found)\n\n  while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n    matchEnd = matchStart + 1; // scan marker length\n\n    while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60\n    /* ` */\n    ) {\n      matchEnd++;\n    }\n\n    closerLength = matchEnd - matchStart;\n\n    if (closerLength === openerLength) {\n      // Found matching closer length.\n      if (!silent) {\n        token = state.push('code_inline', 'code', 0);\n        token.markup = marker;\n        token.content = state.src.slice(pos, matchStart).replace(/\\n/g, ' ').replace(/^ (.+) $/, '$1');\n      }\n\n      state.pos = matchEnd;\n      return true;\n    } // Some different length found, put it in cache as upper limit of where closer can be found\n\n\n    state.backticks[closerLength] = matchStart;\n  } // Scanned through the end, didn't find anything\n\n\n  state.backticksScanned = true;\n  if (!silent) state.pending += marker;\n  state.pos += openerLength;\n  return true;\n};","// Process [link](<to> \"stuff\")\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function link(state, silent) {\n  var attrs,\n      code,\n      label,\n      labelEnd,\n      labelStart,\n      pos,\n      res,\n      ref,\n      token,\n      href = '',\n      title = '',\n      oldPos = state.pos,\n      max = state.posMax,\n      start = state.pos,\n      parseReference = true;\n\n  if (state.src.charCodeAt(state.pos) !== 0x5B\n  /* [ */\n  ) {\n      return false;\n    }\n\n  labelStart = state.pos + 1;\n  labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true); // parser failed to find ']', so it's not a valid link\n\n  if (labelEnd < 0) {\n    return false;\n  }\n\n  pos = labelEnd + 1;\n\n  if (pos < max && state.src.charCodeAt(pos) === 0x28\n  /* ( */\n  ) {\n      //\n      // Inline link\n      //\n      // might have found a valid shortcut link, disable reference parsing\n      parseReference = false; // [link](  <href>  \"title\"  )\n      //        ^^ skipping these spaces\n\n      pos++;\n\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n\n        if (!isSpace(code) && code !== 0x0A) {\n          break;\n        }\n      }\n\n      if (pos >= max) {\n        return false;\n      } // [link](  <href>  \"title\"  )\n      //          ^^^^^^ parsing link destination\n\n\n      start = pos;\n      res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n\n      if (res.ok) {\n        href = state.md.normalizeLink(res.str);\n\n        if (state.md.validateLink(href)) {\n          pos = res.pos;\n        } else {\n          href = '';\n        } // [link](  <href>  \"title\"  )\n        //                ^^ skipping these spaces\n\n\n        start = pos;\n\n        for (; pos < max; pos++) {\n          code = state.src.charCodeAt(pos);\n\n          if (!isSpace(code) && code !== 0x0A) {\n            break;\n          }\n        } // [link](  <href>  \"title\"  )\n        //                  ^^^^^^^ parsing link title\n\n\n        res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n\n        if (pos < max && start !== pos && res.ok) {\n          title = res.str;\n          pos = res.pos; // [link](  <href>  \"title\"  )\n          //                         ^^ skipping these spaces\n\n          for (; pos < max; pos++) {\n            code = state.src.charCodeAt(pos);\n\n            if (!isSpace(code) && code !== 0x0A) {\n              break;\n            }\n          }\n        }\n      }\n\n      if (pos >= max || state.src.charCodeAt(pos) !== 0x29\n      /* ) */\n      ) {\n          // parsing a valid shortcut link failed, fallback to reference\n          parseReference = true;\n        }\n\n      pos++;\n    }\n\n  if (parseReference) {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') {\n      return false;\n    }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B\n    /* [ */\n    ) {\n        start = pos + 1;\n        pos = state.md.helpers.parseLinkLabel(state, pos);\n\n        if (pos >= 0) {\n          label = state.src.slice(start, pos++);\n        } else {\n          pos = labelEnd + 1;\n        }\n      } else {\n      pos = labelEnd + 1;\n    } // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n\n\n    if (!label) {\n      label = state.src.slice(labelStart, labelEnd);\n    }\n\n    ref = state.env.references[normalizeReference(label)];\n\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n\n    href = ref.href;\n    title = ref.title;\n  } //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n\n\n  if (!silent) {\n    state.pos = labelStart;\n    state.posMax = labelEnd;\n    token = state.push('link_open', 'a', 1);\n    token.attrs = attrs = [['href', href]];\n\n    if (title) {\n      attrs.push(['title', title]);\n    }\n\n    state.linkLevel++;\n    state.md.inline.tokenize(state);\n    state.linkLevel--;\n    token = state.push('link_close', 'a', -1);\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n};","// Process ![image](<src> \"title\")\n'use strict';\n\nvar normalizeReference = require('../common/utils').normalizeReference;\n\nvar isSpace = require('../common/utils').isSpace;\n\nmodule.exports = function image(state, silent) {\n  var attrs,\n      code,\n      content,\n      label,\n      labelEnd,\n      labelStart,\n      pos,\n      ref,\n      res,\n      title,\n      token,\n      tokens,\n      start,\n      href = '',\n      oldPos = state.pos,\n      max = state.posMax;\n\n  if (state.src.charCodeAt(state.pos) !== 0x21\n  /* ! */\n  ) {\n      return false;\n    }\n\n  if (state.src.charCodeAt(state.pos + 1) !== 0x5B\n  /* [ */\n  ) {\n      return false;\n    }\n\n  labelStart = state.pos + 2;\n  labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false); // parser failed to find ']', so it's not a valid link\n\n  if (labelEnd < 0) {\n    return false;\n  }\n\n  pos = labelEnd + 1;\n\n  if (pos < max && state.src.charCodeAt(pos) === 0x28\n  /* ( */\n  ) {\n      //\n      // Inline link\n      //\n      // [link](  <href>  \"title\"  )\n      //        ^^ skipping these spaces\n      pos++;\n\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n\n        if (!isSpace(code) && code !== 0x0A) {\n          break;\n        }\n      }\n\n      if (pos >= max) {\n        return false;\n      } // [link](  <href>  \"title\"  )\n      //          ^^^^^^ parsing link destination\n\n\n      start = pos;\n      res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n\n      if (res.ok) {\n        href = state.md.normalizeLink(res.str);\n\n        if (state.md.validateLink(href)) {\n          pos = res.pos;\n        } else {\n          href = '';\n        }\n      } // [link](  <href>  \"title\"  )\n      //                ^^ skipping these spaces\n\n\n      start = pos;\n\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n\n        if (!isSpace(code) && code !== 0x0A) {\n          break;\n        }\n      } // [link](  <href>  \"title\"  )\n      //                  ^^^^^^^ parsing link title\n\n\n      res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n\n      if (pos < max && start !== pos && res.ok) {\n        title = res.str;\n        pos = res.pos; // [link](  <href>  \"title\"  )\n        //                         ^^ skipping these spaces\n\n        for (; pos < max; pos++) {\n          code = state.src.charCodeAt(pos);\n\n          if (!isSpace(code) && code !== 0x0A) {\n            break;\n          }\n        }\n      } else {\n        title = '';\n      }\n\n      if (pos >= max || state.src.charCodeAt(pos) !== 0x29\n      /* ) */\n      ) {\n          state.pos = oldPos;\n          return false;\n        }\n\n      pos++;\n    } else {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') {\n      return false;\n    }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B\n    /* [ */\n    ) {\n        start = pos + 1;\n        pos = state.md.helpers.parseLinkLabel(state, pos);\n\n        if (pos >= 0) {\n          label = state.src.slice(start, pos++);\n        } else {\n          pos = labelEnd + 1;\n        }\n      } else {\n      pos = labelEnd + 1;\n    } // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n\n\n    if (!label) {\n      label = state.src.slice(labelStart, labelEnd);\n    }\n\n    ref = state.env.references[normalizeReference(label)];\n\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n\n    href = ref.href;\n    title = ref.title;\n  } //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n\n\n  if (!silent) {\n    content = state.src.slice(labelStart, labelEnd);\n    state.md.inline.parse(content, state.md, state.env, tokens = []);\n    token = state.push('image', 'img', 0);\n    token.attrs = attrs = [['src', href], ['alt', '']];\n    token.children = tokens;\n    token.content = content;\n\n    if (title) {\n      attrs.push(['title', title]);\n    }\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n};","// Process autolinks '<protocol:...>'\n'use strict';\n/*eslint max-len:0*/\n\nvar EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;\nvar AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)$/;\n\nmodule.exports = function autolink(state, silent) {\n  var url,\n      fullUrl,\n      token,\n      ch,\n      start,\n      max,\n      pos = state.pos;\n\n  if (state.src.charCodeAt(pos) !== 0x3C\n  /* < */\n  ) {\n      return false;\n    }\n\n  start = state.pos;\n  max = state.posMax;\n\n  for (;;) {\n    if (++pos >= max) return false;\n    ch = state.src.charCodeAt(pos);\n    if (ch === 0x3C\n    /* < */\n    ) return false;\n    if (ch === 0x3E\n    /* > */\n    ) break;\n  }\n\n  url = state.src.slice(start + 1, pos);\n\n  if (AUTOLINK_RE.test(url)) {\n    fullUrl = state.md.normalizeLink(url);\n\n    if (!state.md.validateLink(fullUrl)) {\n      return false;\n    }\n\n    if (!silent) {\n      token = state.push('link_open', 'a', 1);\n      token.attrs = [['href', fullUrl]];\n      token.markup = 'autolink';\n      token.info = 'auto';\n      token = state.push('text', '', 0);\n      token.content = state.md.normalizeLinkText(url);\n      token = state.push('link_close', 'a', -1);\n      token.markup = 'autolink';\n      token.info = 'auto';\n    }\n\n    state.pos += url.length + 2;\n    return true;\n  }\n\n  if (EMAIL_RE.test(url)) {\n    fullUrl = state.md.normalizeLink('mailto:' + url);\n\n    if (!state.md.validateLink(fullUrl)) {\n      return false;\n    }\n\n    if (!silent) {\n      token = state.push('link_open', 'a', 1);\n      token.attrs = [['href', fullUrl]];\n      token.markup = 'autolink';\n      token.info = 'auto';\n      token = state.push('text', '', 0);\n      token.content = state.md.normalizeLinkText(url);\n      token = state.push('link_close', 'a', -1);\n      token.markup = 'autolink';\n      token.info = 'auto';\n    }\n\n    state.pos += url.length + 2;\n    return true;\n  }\n\n  return false;\n};","// Process html tags\n'use strict';\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\nfunction isLinkOpen(str) {\n  return /^<a[>\\s]/i.test(str);\n}\n\nfunction isLinkClose(str) {\n  return /^<\\/a\\s*>/i.test(str);\n}\n\nfunction isLetter(ch) {\n  /*eslint no-bitwise:0*/\n  var lc = ch | 0x20; // to lower case\n\n  return lc >= 0x61\n  /* a */\n  && lc <= 0x7a\n  /* z */\n  ;\n}\n\nmodule.exports = function html_inline(state, silent) {\n  var ch,\n      match,\n      max,\n      token,\n      pos = state.pos;\n\n  if (!state.md.options.html) {\n    return false;\n  } // Check start\n\n\n  max = state.posMax;\n\n  if (state.src.charCodeAt(pos) !== 0x3C\n  /* < */\n  || pos + 2 >= max) {\n    return false;\n  } // Quick fail on second char\n\n\n  ch = state.src.charCodeAt(pos + 1);\n\n  if (ch !== 0x21\n  /* ! */\n  && ch !== 0x3F\n  /* ? */\n  && ch !== 0x2F\n  /* / */\n  && !isLetter(ch)) {\n    return false;\n  }\n\n  match = state.src.slice(pos).match(HTML_TAG_RE);\n\n  if (!match) {\n    return false;\n  }\n\n  if (!silent) {\n    token = state.push('html_inline', '', 0);\n    token.content = match[0];\n    if (isLinkOpen(token.content)) state.linkLevel++;\n    if (isLinkClose(token.content)) state.linkLevel--;\n  }\n\n  state.pos += match[0].length;\n  return true;\n};","// Process html entity - &#123;, &#xAF;, &quot;, ...\n'use strict';\n\nvar entities = require('../common/entities');\n\nvar has = require('../common/utils').has;\n\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\n\nvar fromCodePoint = require('../common/utils').fromCodePoint;\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;\nvar NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;\n\nmodule.exports = function entity(state, silent) {\n  var ch,\n      code,\n      match,\n      token,\n      pos = state.pos,\n      max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 0x26\n  /* & */\n  ) return false;\n  if (pos + 1 >= max) return false;\n  ch = state.src.charCodeAt(pos + 1);\n\n  if (ch === 0x23\n  /* # */\n  ) {\n      match = state.src.slice(pos).match(DIGITAL_RE);\n\n      if (match) {\n        if (!silent) {\n          code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n          token = state.push('text_special', '', 0);\n          token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n          token.markup = match[0];\n          token.info = 'entity';\n        }\n\n        state.pos += match[0].length;\n        return true;\n      }\n    } else {\n    match = state.src.slice(pos).match(NAMED_RE);\n\n    if (match) {\n      if (has(entities, match[1])) {\n        if (!silent) {\n          token = state.push('text_special', '', 0);\n          token.content = entities[match[1]];\n          token.markup = match[0];\n          token.info = 'entity';\n        }\n\n        state.pos += match[0].length;\n        return true;\n      }\n    }\n  }\n\n  return false;\n};","// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\nfunction processDelimiters(delimiters) {\n  var closerIdx,\n      openerIdx,\n      closer,\n      opener,\n      minOpenerIdx,\n      newMinOpenerIdx,\n      isOddMatch,\n      lastJump,\n      openersBottom = {},\n      max = delimiters.length;\n  if (!max) return; // headerIdx is the first delimiter of the current (where closer is) delimiter run\n\n  var headerIdx = 0;\n  var lastTokenIdx = -2; // needs any value lower than -1\n\n  var jumps = [];\n\n  for (closerIdx = 0; closerIdx < max; closerIdx++) {\n    closer = delimiters[closerIdx];\n    jumps.push(0); // markers belong to same delimiter run if:\n    //  - they have adjacent tokens\n    //  - AND markers are the same\n    //\n\n    if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n      headerIdx = closerIdx;\n    }\n\n    lastTokenIdx = closer.token; // Length is only used for emphasis-specific \"rule of 3\",\n    // if it's not defined (in strikethrough or 3rd party plugins),\n    // we can default it to 0 to disable those checks.\n    //\n\n    closer.length = closer.length || 0;\n    if (!closer.close) continue; // Previously calculated lower bounds (previous fails)\n    // for each marker, each delimiter length modulo 3,\n    // and for whether this closer can be an opener;\n    // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n\n    if (!openersBottom.hasOwnProperty(closer.marker)) {\n      openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1];\n    }\n\n    minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + closer.length % 3];\n    openerIdx = headerIdx - jumps[headerIdx] - 1;\n    newMinOpenerIdx = openerIdx;\n\n    for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n      opener = delimiters[openerIdx];\n      if (opener.marker !== closer.marker) continue;\n\n      if (opener.open && opener.end < 0) {\n        isOddMatch = false; // from spec:\n        //\n        // If one of the delimiters can both open and close emphasis, then the\n        // sum of the lengths of the delimiter runs containing the opening and\n        // closing delimiters must not be a multiple of 3 unless both lengths\n        // are multiples of 3.\n        //\n\n        if (opener.close || closer.open) {\n          if ((opener.length + closer.length) % 3 === 0) {\n            if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n              isOddMatch = true;\n            }\n          }\n        }\n\n        if (!isOddMatch) {\n          // If previous delimiter cannot be an opener, we can safely skip\n          // the entire sequence in future checks. This is required to make\n          // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n          //\n          lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ? jumps[openerIdx - 1] + 1 : 0;\n          jumps[closerIdx] = closerIdx - openerIdx + lastJump;\n          jumps[openerIdx] = lastJump;\n          closer.open = false;\n          opener.end = closerIdx;\n          opener.close = false;\n          newMinOpenerIdx = -1; // treat next token as start of run,\n          // it optimizes skips in **<...>**a**<...>** pathological case\n\n          lastTokenIdx = -2;\n          break;\n        }\n      }\n    }\n\n    if (newMinOpenerIdx !== -1) {\n      // If match for this delimiter run failed, we want to set lower bound for\n      // future lookups. This is required to make sure algorithm has linear\n      // complexity.\n      //\n      // See details here:\n      // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n      //\n      openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length || 0) % 3] = newMinOpenerIdx;\n    }\n  }\n}\n\nmodule.exports = function link_pairs(state) {\n  var curr,\n      tokens_meta = state.tokens_meta,\n      max = state.tokens_meta.length;\n  processDelimiters(state.delimiters);\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      processDelimiters(tokens_meta[curr].delimiters);\n    }\n  }\n};","// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n'use strict';\n\nmodule.exports = function fragments_join(state) {\n  var curr,\n      last,\n      level = 0,\n      tokens = state.tokens,\n      max = state.tokens.length;\n\n  for (curr = last = 0; curr < max; curr++) {\n    // re-calculate levels after emphasis/strikethrough turns some text nodes\n    // into opening/closing tags\n    if (tokens[curr].nesting < 0) level--; // closing tag\n\n    tokens[curr].level = level;\n    if (tokens[curr].nesting > 0) level++; // opening tag\n\n    if (tokens[curr].type === 'text' && curr + 1 < max && tokens[curr + 1].type === 'text') {\n      // collapse two adjacent text nodes\n      tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n    } else {\n      if (curr !== last) {\n        tokens[last] = tokens[curr];\n      }\n\n      last++;\n    }\n  }\n\n  if (curr !== last) {\n    tokens.length = last;\n  }\n};","// Inline parser state\n'use strict';\n\nvar Token = require('../token');\n\nvar isWhiteSpace = require('../common/utils').isWhiteSpace;\n\nvar isPunctChar = require('../common/utils').isPunctChar;\n\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nfunction StateInline(src, md, env, outTokens) {\n  this.src = src;\n  this.env = env;\n  this.md = md;\n  this.tokens = outTokens;\n  this.tokens_meta = Array(outTokens.length);\n  this.pos = 0;\n  this.posMax = this.src.length;\n  this.level = 0;\n  this.pending = '';\n  this.pendingLevel = 0; // Stores { start: end } pairs. Useful for backtrack\n  // optimization of pairs parse (emphasis, strikes).\n\n  this.cache = {}; // List of emphasis-like delimiters for current tag\n\n  this.delimiters = []; // Stack of delimiter lists for upper level tags\n\n  this._prev_delimiters = []; // backtick length => last seen position\n\n  this.backticks = {};\n  this.backticksScanned = false; // Counter used to disable inline linkify-it execution\n  // inside <a> and markdown links\n\n  this.linkLevel = 0;\n} // Flush pending text\n//\n\n\nStateInline.prototype.pushPending = function () {\n  var token = new Token('text', '', 0);\n  token.content = this.pending;\n  token.level = this.pendingLevel;\n  this.tokens.push(token);\n  this.pending = '';\n  return token;\n}; // Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\n\n\nStateInline.prototype.push = function (type, tag, nesting) {\n  if (this.pending) {\n    this.pushPending();\n  }\n\n  var token = new Token(type, tag, nesting);\n  var token_meta = null;\n\n  if (nesting < 0) {\n    // closing tag\n    this.level--;\n    this.delimiters = this._prev_delimiters.pop();\n  }\n\n  token.level = this.level;\n\n  if (nesting > 0) {\n    // opening tag\n    this.level++;\n\n    this._prev_delimiters.push(this.delimiters);\n\n    this.delimiters = [];\n    token_meta = {\n      delimiters: this.delimiters\n    };\n  }\n\n  this.pendingLevel = this.level;\n  this.tokens.push(token);\n  this.tokens_meta.push(token_meta);\n  return token;\n}; // Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n//  - start - position to scan from (it should point at a valid marker);\n//  - canSplitWord - determine if these markers can be found inside a word\n//\n\n\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n  var pos = start,\n      lastChar,\n      nextChar,\n      count,\n      can_open,\n      can_close,\n      isLastWhiteSpace,\n      isLastPunctChar,\n      isNextWhiteSpace,\n      isNextPunctChar,\n      left_flanking = true,\n      right_flanking = true,\n      max = this.posMax,\n      marker = this.src.charCodeAt(start); // treat beginning of the line as a whitespace\n\n  lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n  while (pos < max && this.src.charCodeAt(pos) === marker) {\n    pos++;\n  }\n\n  count = pos - start; // treat end of the line as a whitespace\n\n  nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n  isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n  isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n  isLastWhiteSpace = isWhiteSpace(lastChar);\n  isNextWhiteSpace = isWhiteSpace(nextChar);\n\n  if (isNextWhiteSpace) {\n    left_flanking = false;\n  } else if (isNextPunctChar) {\n    if (!(isLastWhiteSpace || isLastPunctChar)) {\n      left_flanking = false;\n    }\n  }\n\n  if (isLastWhiteSpace) {\n    right_flanking = false;\n  } else if (isLastPunctChar) {\n    if (!(isNextWhiteSpace || isNextPunctChar)) {\n      right_flanking = false;\n    }\n  }\n\n  if (!canSplitWord) {\n    can_open = left_flanking && (!right_flanking || isLastPunctChar);\n    can_close = right_flanking && (!left_flanking || isNextPunctChar);\n  } else {\n    can_open = left_flanking;\n    can_close = right_flanking;\n  }\n\n  return {\n    can_open: can_open,\n    can_close: can_close,\n    length: count\n  };\n}; // re-export Token class to use in block rules\n\n\nStateInline.prototype.Token = Token;\nmodule.exports = StateInline;","// markdown-it default options\n'use strict';\n\nmodule.exports = {\n  options: {\n    html: false,\n    // Enable HTML tags in source\n    xhtmlOut: false,\n    // Use '/' to close single tags (<br />)\n    breaks: false,\n    // Convert '\\n' in paragraphs into <br>\n    langPrefix: 'language-',\n    // CSS language prefix for fenced blocks\n    linkify: false,\n    // autoconvert URL-like texts to links\n    // Enable some language-neutral replacements + quotes beautification\n    typographer: false,\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: \"\\u201C\\u201D\\u2018\\u2019\",\n\n    /* “”‘’ */\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n    maxNesting: 100 // Internal protection, recursion limit\n\n  },\n  components: {\n    core: {},\n    block: {},\n    inline: {}\n  }\n};","// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n'use strict';\n\nmodule.exports = {\n  options: {\n    html: false,\n    // Enable HTML tags in source\n    xhtmlOut: false,\n    // Use '/' to close single tags (<br />)\n    breaks: false,\n    // Convert '\\n' in paragraphs into <br>\n    langPrefix: 'language-',\n    // CSS language prefix for fenced blocks\n    linkify: false,\n    // autoconvert URL-like texts to links\n    // Enable some language-neutral replacements + quotes beautification\n    typographer: false,\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: \"\\u201C\\u201D\\u2018\\u2019\",\n\n    /* “”‘’ */\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n    maxNesting: 20 // Internal protection, recursion limit\n\n  },\n  components: {\n    core: {\n      rules: ['normalize', 'block', 'inline', 'text_join']\n    },\n    block: {\n      rules: ['paragraph']\n    },\n    inline: {\n      rules: ['text'],\n      rules2: ['balance_pairs', 'fragments_join']\n    }\n  }\n};","// Commonmark default options\n'use strict';\n\nmodule.exports = {\n  options: {\n    html: true,\n    // Enable HTML tags in source\n    xhtmlOut: true,\n    // Use '/' to close single tags (<br />)\n    breaks: false,\n    // Convert '\\n' in paragraphs into <br>\n    langPrefix: 'language-',\n    // CSS language prefix for fenced blocks\n    linkify: false,\n    // autoconvert URL-like texts to links\n    // Enable some language-neutral replacements + quotes beautification\n    typographer: false,\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: \"\\u201C\\u201D\\u2018\\u2019\",\n\n    /* “”‘’ */\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n    maxNesting: 20 // Internal protection, recursion limit\n\n  },\n  components: {\n    core: {\n      rules: ['normalize', 'block', 'inline', 'text_join']\n    },\n    block: {\n      rules: ['blockquote', 'code', 'fence', 'heading', 'hr', 'html_block', 'lheading', 'list', 'reference', 'paragraph']\n    },\n    inline: {\n      rules: ['autolink', 'backticks', 'emphasis', 'entity', 'escape', 'html_inline', 'image', 'link', 'newline', 'text'],\n      rules2: ['balance_pairs', 'emphasis', 'fragments_join']\n    }\n  }\n};","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","module.exports = /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4E\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/;","'use strict';\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse = require('./parse');","/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n/**\n * new Ruler()\n **/\n\nfunction Ruler() {\n  // List of added rules. Each element is:\n  //\n  // {\n  //   name: XXX,\n  //   enabled: Boolean,\n  //   fn: Function(),\n  //   alt: [ name2, name3 ]\n  // }\n  //\n  this.__rules__ = []; // Cached rule chains.\n  //\n  // First level - chain name, '' for default.\n  // Second level - diginal anchor for fast filtering by charcodes.\n  //\n\n  this.__cache__ = null;\n} ////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n// Find rule index by name\n//\n\n\nRuler.prototype.__find__ = function (name) {\n  for (var i = 0; i < this.__rules__.length; i++) {\n    if (this.__rules__[i].name === name) {\n      return i;\n    }\n  }\n\n  return -1;\n}; // Build rules lookup cache\n//\n\n\nRuler.prototype.__compile__ = function () {\n  var self = this;\n  var chains = ['']; // collect unique names\n\n  self.__rules__.forEach(function (rule) {\n    if (!rule.enabled) {\n      return;\n    }\n\n    rule.alt.forEach(function (altName) {\n      if (chains.indexOf(altName) < 0) {\n        chains.push(altName);\n      }\n    });\n  });\n\n  self.__cache__ = {};\n  chains.forEach(function (chain) {\n    self.__cache__[chain] = [];\n\n    self.__rules__.forEach(function (rule) {\n      if (!rule.enabled) {\n        return;\n      }\n\n      if (chain && rule.alt.indexOf(chain) < 0) {\n        return;\n      }\n\n      self.__cache__[chain].push(rule.fn);\n    });\n  });\n};\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n *   //...\n * });\n * ```\n **/\n\n\nRuler.prototype.at = function (name, fn, options) {\n  var index = this.__find__(name);\n\n  var opt = options || {};\n\n  if (index === -1) {\n    throw new Error('Parser rule not found: ' + name);\n  }\n\n  this.__rules__[index].fn = fn;\n  this.__rules__[index].alt = opt.alt || [];\n  this.__cache__ = null;\n};\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\n\n\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n  var index = this.__find__(beforeName);\n\n  var opt = options || {};\n\n  if (index === -1) {\n    throw new Error('Parser rule not found: ' + beforeName);\n  }\n\n  this.__rules__.splice(index, 0, {\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\n\n\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n  var index = this.__find__(afterName);\n\n  var opt = options || {};\n\n  if (index === -1) {\n    throw new Error('Parser rule not found: ' + afterName);\n  }\n\n  this.__rules__.splice(index + 1, 0, {\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\n\n\nRuler.prototype.push = function (ruleName, fn, options) {\n  var opt = options || {};\n\n  this.__rules__.push({\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\n\n\nRuler.prototype.enable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) {\n    list = [list];\n  }\n\n  var result = []; // Search by name and enable\n\n  list.forEach(function (name) {\n    var idx = this.__find__(name);\n\n    if (idx < 0) {\n      if (ignoreInvalid) {\n        return;\n      }\n\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n\n    this.__rules__[idx].enabled = true;\n    result.push(name);\n  }, this);\n  this.__cache__ = null;\n  return result;\n};\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\n\n\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) {\n    list = [list];\n  }\n\n  this.__rules__.forEach(function (rule) {\n    rule.enabled = false;\n  });\n\n  this.enable(list, ignoreInvalid);\n};\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\n\n\nRuler.prototype.disable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) {\n    list = [list];\n  }\n\n  var result = []; // Search by name and disable\n\n  list.forEach(function (name) {\n    var idx = this.__find__(name);\n\n    if (idx < 0) {\n      if (ignoreInvalid) {\n        return;\n      }\n\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n\n    this.__rules__[idx].enabled = false;\n    result.push(name);\n  }, this);\n  this.__cache__ = null;\n  return result;\n};\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\n\n\nRuler.prototype.getRules = function (chainName) {\n  if (this.__cache__ === null) {\n    this.__compile__();\n  } // Chain can be empty, if rules disabled. But we still have to return Array.\n\n\n  return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;","// Token class\n'use strict';\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\n\nfunction Token(type, tag, nesting) {\n  /**\n   * Token#type -> String\n   *\n   * Type of the token (string, e.g. \"paragraph_open\")\n   **/\n  this.type = type;\n  /**\n   * Token#tag -> String\n   *\n   * html tag name, e.g. \"p\"\n   **/\n\n  this.tag = tag;\n  /**\n   * Token#attrs -> Array\n   *\n   * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n   **/\n\n  this.attrs = null;\n  /**\n   * Token#map -> Array\n   *\n   * Source map info. Format: `[ line_begin, line_end ]`\n   **/\n\n  this.map = null;\n  /**\n   * Token#nesting -> Number\n   *\n   * Level change (number in {-1, 0, 1} set), where:\n   *\n   * -  `1` means the tag is opening\n   * -  `0` means the tag is self-closing\n   * - `-1` means the tag is closing\n   **/\n\n  this.nesting = nesting;\n  /**\n   * Token#level -> Number\n   *\n   * nesting level, the same as `state.level`\n   **/\n\n  this.level = 0;\n  /**\n   * Token#children -> Array\n   *\n   * An array of child nodes (inline and img tokens)\n   **/\n\n  this.children = null;\n  /**\n   * Token#content -> String\n   *\n   * In a case of self-closing tag (code, html, fence, etc.),\n   * it has contents of this tag.\n   **/\n\n  this.content = '';\n  /**\n   * Token#markup -> String\n   *\n   * '*' or '_' for emphasis, fence string for fence, etc.\n   **/\n\n  this.markup = '';\n  /**\n   * Token#info -> String\n   *\n   * Additional information:\n   *\n   * - Info string for \"fence\" tokens\n   * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n   * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n   **/\n\n  this.info = '';\n  /**\n   * Token#meta -> Object\n   *\n   * A place for plugins to store an arbitrary data\n   **/\n\n  this.meta = null;\n  /**\n   * Token#block -> Boolean\n   *\n   * True for block-level tokens, false for inline tokens.\n   * Used in renderer to calculate line breaks\n   **/\n\n  this.block = false;\n  /**\n   * Token#hidden -> Boolean\n   *\n   * If it's true, ignore this element when rendering. Used for tight lists\n   * to hide paragraphs.\n   **/\n\n  this.hidden = false;\n}\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\n\n\nToken.prototype.attrIndex = function attrIndex(name) {\n  var attrs, i, len;\n\n  if (!this.attrs) {\n    return -1;\n  }\n\n  attrs = this.attrs;\n\n  for (i = 0, len = attrs.length; i < len; i++) {\n    if (attrs[i][0] === name) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\n\n\nToken.prototype.attrPush = function attrPush(attrData) {\n  if (this.attrs) {\n    this.attrs.push(attrData);\n  } else {\n    this.attrs = [attrData];\n  }\n};\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\n\n\nToken.prototype.attrSet = function attrSet(name, value) {\n  var idx = this.attrIndex(name),\n      attrData = [name, value];\n\n  if (idx < 0) {\n    this.attrPush(attrData);\n  } else {\n    this.attrs[idx] = attrData;\n  }\n};\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\n\n\nToken.prototype.attrGet = function attrGet(name) {\n  var idx = this.attrIndex(name),\n      value = null;\n\n  if (idx >= 0) {\n    value = this.attrs[idx][1];\n  }\n\n  return value;\n};\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\n\n\nToken.prototype.attrJoin = function attrJoin(name, value) {\n  var idx = this.attrIndex(name);\n\n  if (idx < 0) {\n    this.attrPush([name, value]);\n  } else {\n    this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n  }\n};\n\nmodule.exports = Token;","module.exports = /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;","module.exports = /[\\0-\\x1F\\x7F-\\x9F]/;","module.exports = /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;","// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n/*eslint quotes:0*/\n\nmodule.exports = require('entities/lib/maps/entities.json');","// Regexps to match html elements\n'use strict';\n\nvar attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\nvar unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\nvar attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\nvar attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\nvar open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\nvar close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing = '<[?][\\\\s\\\\S]*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment + '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;","// ~~strike through~~\n//\n'use strict'; // Insert each marker as a separate text token, and add it to delimiter list\n//\n\nmodule.exports.tokenize = function strikethrough(state, silent) {\n  var i,\n      scanned,\n      token,\n      len,\n      ch,\n      start = state.pos,\n      marker = state.src.charCodeAt(start);\n\n  if (silent) {\n    return false;\n  }\n\n  if (marker !== 0x7E\n  /* ~ */\n  ) {\n      return false;\n    }\n\n  scanned = state.scanDelims(state.pos, true);\n  len = scanned.length;\n  ch = String.fromCharCode(marker);\n\n  if (len < 2) {\n    return false;\n  }\n\n  if (len % 2) {\n    token = state.push('text', '', 0);\n    token.content = ch;\n    len--;\n  }\n\n  for (i = 0; i < len; i += 2) {\n    token = state.push('text', '', 0);\n    token.content = ch + ch;\n    state.delimiters.push({\n      marker: marker,\n      length: 0,\n      // disable \"rule of 3\" length checks meant for emphasis\n      token: state.tokens.length - 1,\n      end: -1,\n      open: scanned.can_open,\n      close: scanned.can_close\n    });\n  }\n\n  state.pos += scanned.length;\n  return true;\n};\n\nfunction postProcess(state, delimiters) {\n  var i,\n      j,\n      startDelim,\n      endDelim,\n      token,\n      loneMarkers = [],\n      max = delimiters.length;\n\n  for (i = 0; i < max; i++) {\n    startDelim = delimiters[i];\n\n    if (startDelim.marker !== 0x7E\n    /* ~ */\n    ) {\n        continue;\n      }\n\n    if (startDelim.end === -1) {\n      continue;\n    }\n\n    endDelim = delimiters[startDelim.end];\n    token = state.tokens[startDelim.token];\n    token.type = 's_open';\n    token.tag = 's';\n    token.nesting = 1;\n    token.markup = '~~';\n    token.content = '';\n    token = state.tokens[endDelim.token];\n    token.type = 's_close';\n    token.tag = 's';\n    token.nesting = -1;\n    token.markup = '~~';\n    token.content = '';\n\n    if (state.tokens[endDelim.token - 1].type === 'text' && state.tokens[endDelim.token - 1].content === '~') {\n      loneMarkers.push(endDelim.token - 1);\n    }\n  } // If a marker sequence has an odd number of characters, it's splitted\n  // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n  // start of the sequence.\n  //\n  // So, we have to move all those markers after subsequent s_close tags.\n  //\n\n\n  while (loneMarkers.length) {\n    i = loneMarkers.pop();\n    j = i + 1;\n\n    while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n      j++;\n    }\n\n    j--;\n\n    if (i !== j) {\n      token = state.tokens[j];\n      state.tokens[j] = state.tokens[i];\n      state.tokens[i] = token;\n    }\n  }\n} // Walk through delimiter list and replace text tokens with tags\n//\n\n\nmodule.exports.postProcess = function strikethrough(state) {\n  var curr,\n      tokens_meta = state.tokens_meta,\n      max = state.tokens_meta.length;\n  postProcess(state, state.delimiters);\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess(state, tokens_meta[curr].delimiters);\n    }\n  }\n};","// Process *this* and _that_\n//\n'use strict'; // Insert each marker as a separate text token, and add it to delimiter list\n//\n\nmodule.exports.tokenize = function emphasis(state, silent) {\n  var i,\n      scanned,\n      token,\n      start = state.pos,\n      marker = state.src.charCodeAt(start);\n\n  if (silent) {\n    return false;\n  }\n\n  if (marker !== 0x5F\n  /* _ */\n  && marker !== 0x2A\n  /* * */\n  ) {\n      return false;\n    }\n\n  scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n  for (i = 0; i < scanned.length; i++) {\n    token = state.push('text', '', 0);\n    token.content = String.fromCharCode(marker);\n    state.delimiters.push({\n      // Char code of the starting marker (number).\n      //\n      marker: marker,\n      // Total length of these series of delimiters.\n      //\n      length: scanned.length,\n      // A position of the token this delimiter corresponds to.\n      //\n      token: state.tokens.length - 1,\n      // If this delimiter is matched as a valid opener, `end` will be\n      // equal to its position, otherwise it's `-1`.\n      //\n      end: -1,\n      // Boolean flags that determine if this delimiter could open or close\n      // an emphasis.\n      //\n      open: scanned.can_open,\n      close: scanned.can_close\n    });\n  }\n\n  state.pos += scanned.length;\n  return true;\n};\n\nfunction postProcess(state, delimiters) {\n  var i,\n      startDelim,\n      endDelim,\n      token,\n      ch,\n      isStrong,\n      max = delimiters.length;\n\n  for (i = max - 1; i >= 0; i--) {\n    startDelim = delimiters[i];\n\n    if (startDelim.marker !== 0x5F\n    /* _ */\n    && startDelim.marker !== 0x2A\n    /* * */\n    ) {\n        continue;\n      } // Process only opening markers\n\n\n    if (startDelim.end === -1) {\n      continue;\n    }\n\n    endDelim = delimiters[startDelim.end]; // If the previous delimiter has the same marker and is adjacent to this one,\n    // merge those into one strong delimiter.\n    //\n    // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n    //\n\n    isStrong = i > 0 && delimiters[i - 1].end === startDelim.end + 1 && // check that first two markers match and adjacent\n    delimiters[i - 1].marker === startDelim.marker && delimiters[i - 1].token === startDelim.token - 1 && // check that last two markers are adjacent (we can safely assume they match)\n    delimiters[startDelim.end + 1].token === endDelim.token + 1;\n    ch = String.fromCharCode(startDelim.marker);\n    token = state.tokens[startDelim.token];\n    token.type = isStrong ? 'strong_open' : 'em_open';\n    token.tag = isStrong ? 'strong' : 'em';\n    token.nesting = 1;\n    token.markup = isStrong ? ch + ch : ch;\n    token.content = '';\n    token = state.tokens[endDelim.token];\n    token.type = isStrong ? 'strong_close' : 'em_close';\n    token.tag = isStrong ? 'strong' : 'em';\n    token.nesting = -1;\n    token.markup = isStrong ? ch + ch : ch;\n    token.content = '';\n\n    if (isStrong) {\n      state.tokens[delimiters[i - 1].token].content = '';\n      state.tokens[delimiters[startDelim.end + 1].token].content = '';\n      i--;\n    }\n  }\n} // Walk through delimiter list and replace text tokens with tags\n//\n\n\nmodule.exports.postProcess = function emphasis(state) {\n  var curr,\n      tokens_meta = state.tokens_meta,\n      max = state.tokens_meta.length;\n  postProcess(state, state.delimiters);\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n      postProcess(state, tokens_meta[curr].delimiters);\n    }\n  }\n};","// Utilities\n//\n'use strict';\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _class(obj) {\n  return Object.prototype.toString.call(obj);\n}\n\nfunction isString(obj) {\n  return _class(obj) === '[object String]';\n}\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n  return _hasOwnProperty.call(object, key);\n} // Merge objects\n//\n\n\nfunction assign(obj\n/*from1, from2, from3, ...*/\n) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  sources.forEach(function (source) {\n    if (!source) {\n      return;\n    }\n\n    if (_typeof(source) !== 'object') {\n      throw new TypeError(source + 'must be object');\n    }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n  return obj;\n} // Remove element from array and put another array at those position.\n// Useful for some operations with tokens\n\n\nfunction arrayReplaceAt(src, pos, newElements) {\n  return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nfunction isValidEntityCode(c) {\n  /*eslint no-bitwise:0*/\n  // broken sequence\n  if (c >= 0xD800 && c <= 0xDFFF) {\n    return false;\n  } // never used\n\n\n  if (c >= 0xFDD0 && c <= 0xFDEF) {\n    return false;\n  }\n\n  if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) {\n    return false;\n  } // control codes\n\n\n  if (c >= 0x00 && c <= 0x08) {\n    return false;\n  }\n\n  if (c === 0x0B) {\n    return false;\n  }\n\n  if (c >= 0x0E && c <= 0x1F) {\n    return false;\n  }\n\n  if (c >= 0x7F && c <= 0x9F) {\n    return false;\n  } // out of range\n\n\n  if (c > 0x10FFFF) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction fromCodePoint(c) {\n  /*eslint no-bitwise:0*/\n  if (c > 0xffff) {\n    c -= 0x10000;\n    var surrogate1 = 0xd800 + (c >> 10),\n        surrogate2 = 0xdc00 + (c & 0x3ff);\n    return String.fromCharCode(surrogate1, surrogate2);\n  }\n\n  return String.fromCharCode(c);\n}\n\nvar UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n  var code;\n\n  if (has(entities, name)) {\n    return entities[name];\n  }\n\n  if (name.charCodeAt(0) === 0x23\n  /* # */\n  && DIGITAL_ENTITY_TEST_RE.test(name)) {\n    code = name[1].toLowerCase() === 'x' ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n\n    if (isValidEntityCode(code)) {\n      return fromCodePoint(code);\n    }\n  }\n\n  return match;\n}\n/*function replaceEntities(str) {\n  if (str.indexOf('&') < 0) { return str; }\n\n  return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\n\nfunction unescapeMd(str) {\n  if (str.indexOf('\\\\') < 0) {\n    return str;\n  }\n\n  return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n  if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) {\n    return str;\n  }\n\n  return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n    if (escaped) {\n      return escaped;\n    }\n\n    return replaceEntityPattern(match, entity);\n  });\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n  return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n  if (HTML_ESCAPE_TEST_RE.test(str)) {\n    return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n  }\n\n  return str;\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n  return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n} ////////////////////////////////////////////////////////////////////////////////\n\n\nfunction isSpace(code) {\n  switch (code) {\n    case 0x09:\n    case 0x20:\n      return true;\n  }\n\n  return false;\n} // Zs (unicode class) || [\\t\\f\\v\\r\\n]\n\n\nfunction isWhiteSpace(code) {\n  if (code >= 0x2000 && code <= 0x200A) {\n    return true;\n  }\n\n  switch (code) {\n    case 0x09: // \\t\n\n    case 0x0A: // \\n\n\n    case 0x0B: // \\v\n\n    case 0x0C: // \\f\n\n    case 0x0D: // \\r\n\n    case 0x20:\n    case 0xA0:\n    case 0x1680:\n    case 0x202F:\n    case 0x205F:\n    case 0x3000:\n      return true;\n  }\n\n  return false;\n} ////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\n\n\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex'); // Currently without astral characters support.\n\n\nfunction isPunctChar(ch) {\n  return UNICODE_PUNCT_RE.test(ch);\n} // Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\n\n\nfunction isMdAsciiPunct(ch) {\n  switch (ch) {\n    case 0x21\n    /* ! */\n    :\n    case 0x22\n    /* \" */\n    :\n    case 0x23\n    /* # */\n    :\n    case 0x24\n    /* $ */\n    :\n    case 0x25\n    /* % */\n    :\n    case 0x26\n    /* & */\n    :\n    case 0x27\n    /* ' */\n    :\n    case 0x28\n    /* ( */\n    :\n    case 0x29\n    /* ) */\n    :\n    case 0x2A\n    /* * */\n    :\n    case 0x2B\n    /* + */\n    :\n    case 0x2C\n    /* , */\n    :\n    case 0x2D\n    /* - */\n    :\n    case 0x2E\n    /* . */\n    :\n    case 0x2F\n    /* / */\n    :\n    case 0x3A\n    /* : */\n    :\n    case 0x3B\n    /* ; */\n    :\n    case 0x3C\n    /* < */\n    :\n    case 0x3D\n    /* = */\n    :\n    case 0x3E\n    /* > */\n    :\n    case 0x3F\n    /* ? */\n    :\n    case 0x40\n    /* @ */\n    :\n    case 0x5B\n    /* [ */\n    :\n    case 0x5C\n    /* \\ */\n    :\n    case 0x5D\n    /* ] */\n    :\n    case 0x5E\n    /* ^ */\n    :\n    case 0x5F\n    /* _ */\n    :\n    case 0x60\n    /* ` */\n    :\n    case 0x7B\n    /* { */\n    :\n    case 0x7C\n    /* | */\n    :\n    case 0x7D\n    /* } */\n    :\n    case 0x7E\n    /* ~ */\n    :\n      return true;\n\n    default:\n      return false;\n  }\n} // Hepler to unify [reference labels].\n//\n\n\nfunction normalizeReference(str) {\n  // Trim and collapse whitespace\n  //\n  str = str.trim().replace(/\\s+/g, ' '); // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n  // fixed in v12 (couldn't find any details).\n  //\n  // So treat this one as a special case\n  // (remove this when node v10 is no longer supported).\n  //\n\n  if ('ẞ'.toLowerCase() === 'Ṿ') {\n    str = str.replace(/ẞ/g, 'ß');\n  } // .toLowerCase().toUpperCase() should get rid of all differences\n  // between letter variants.\n  //\n  // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n  // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n  // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n  // uppercased versions).\n  //\n  // Here's an example showing how it happens. Lets take greek letter omega:\n  // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n  //\n  // Unicode entries:\n  // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n  // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n  // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n  // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n  //\n  // Case-insensitive comparison should treat all of them as equivalent.\n  //\n  // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n  // and .toUpperCase() doesn't change ϴ (already uppercase).\n  //\n  // Applying first lower then upper case normalizes any character:\n  // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n  //\n  // Note: this is equivalent to unicode case folding; unicode normalization\n  // is a different step that is not required here.\n  //\n  // Final result should be uppercased, because it's later stored in an object\n  // (this avoid a conflict with Object.prototype members,\n  // most notably, `__proto__`)\n  //\n\n\n  return str.toLowerCase().toUpperCase();\n} ////////////////////////////////////////////////////////////////////////////////\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\n\n\nexports.lib = {};\nexports.lib.mdurl = require('mdurl');\nexports.lib.ucmicro = require('uc.micro');\nexports.assign = assign;\nexports.isString = isString;\nexports.has = has;\nexports.unescapeMd = unescapeMd;\nexports.unescapeAll = unescapeAll;\nexports.isValidEntityCode = isValidEntityCode;\nexports.fromCodePoint = fromCodePoint; // exports.replaceEntities     = replaceEntities;\n\nexports.escapeHtml = escapeHtml;\nexports.arrayReplaceAt = arrayReplaceAt;\nexports.isSpace = isSpace;\nexports.isWhiteSpace = isWhiteSpace;\nexports.isMdAsciiPunct = isMdAsciiPunct;\nexports.isPunctChar = isPunctChar;\nexports.escapeRE = escapeRE;\nexports.normalizeReference = normalizeReference;"],"sourceRoot":""}