text: // https://github.com/nuysoft/regexp
  // forked from https://github.com/ForbesLindesay/regexp
  
  function parse (n) {
    if (typeof n !== 'string') {
      var l = new TypeError('The regexp to parse must be represented as a string.')
      throw l
    }
    return index = 1, cgs = {}, parser.parse(n)
  }
  
  function Token (n) {
    this.type = n, this.offset = Token.offset(), this.text = Token.text()
  }
  
  function Alternate (n, l) {
    Token.call(this, 'alternate'), this.left = n, this.right = l
  }
  
  function Match (n) {
    Token.call(this, 'match'), this.body = n.filter(Boolean)
  }
  
  function Group (n, l) {
    Token.call(this, n), this.body = l
  }
  
  function CaptureGroup (n) {
    Group.call(this, 'capture-group'), this.index = cgs[this.offset] || (cgs[this.offset] = index++),
    this.body = n
  }
  
  function Quantified (n, l) {
    Token.call(this, 'quantified'), this.body = n, this.quantifier = l
  }
  
  function Quantifier (n, l) {
    Token.call(this, 'quantifier'), this.min = n, this.max = l, this.greedy = !0
  }
  
  function CharSet (n, l) {
    Token.call(this, 'charset'), this.invert = n, this.body = l
  }
  
  function CharacterRange (n, l) {
    Token.call(this, 'range'), this.start = n, this.end = l
  }
  
  function Literal (n) {
    Token.call(this, 'literal'), this.body = n, this.escaped = this.body != this.text
  }
  
  function Unicode (n) {
    Token.call(this, 'unicode'), this.code = n.toUpperCase()
  }
  
  function Hex (n) {
    Token.call(this, 'hex'), this.code = n.toUpperCase()
  }
  
  function Octal (n) {
    Token.call(this, 'octal'), this.code = n.toUpperCase()
  }
  
  function BackReference (n) {
    Token.call(this, 'back-reference'), this.code = n.toUpperCase()
  }
  
  function ControlCharacter (n) {
    Token.call(this, 'control-character'), this.code = n.toUpperCase()
  }
  
  var parser = (function () {
    function n (n, l) {
      function u () {
        this.constructor = n
      }
      u.prototype = l.prototype, n.prototype = new u()
    }
    function l (n, l, u, t, r) {
      function e (n, l) {
        function u (n) {
          function l (n) {
            return n.charCodeAt(0).toString(16).toUpperCase()
          }
          return n.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\x08/g, '\\b').replace(/\t/g, '\\t').replace(/\n/g, '\\n').replace(/\f/g, '\\f').replace(/\r/g, '\\r').replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) {
            return '\\x0' + l(n)
          }).replace(/[\x10-\x1F\x80-\xFF]/g, function (n) {
            return '\\x' + l(n)
          }).replace(/[\u0180-\u0FFF]/g, function (n) {
            return '\\u0' + l(n)
          }).replace(/[\u1080-\uFFFF]/g, function (n) {
            return '\\u' + l(n)
          })
        }
        var t, r
        switch (n.length) {
          case 0:
            t = 'end of input'
            break
  
          case 1:
            t = n[0]
            break
  
          default:
            t = n.slice(0, -1).join(', ') + ' or ' + n[n.length - 1]
        }
        return r = l ? '"' + u(l) + '"' : 'end of input', 'Expected ' + t + ' but ' + r + ' found.'
      }
      this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r,
      this.name = 'SyntaxError', this.message = e(n, l)
    }
    function u (n) {
      function u () {
        return n.substring(Lt, qt)
      }
      function t () {
        return Lt
      }
      function r (l) {
        function u (l, u, t) {
          var r, e
          for (r = u; t > r; r++) {
            e = n.charAt(r), e === '\n' ? (l.seenCR || l.line++, l.column = 1,
            l.seenCR = !1) : e === '\r' || e === '\u2028' || e === '\u2029' ? (l.line++, l.column = 1,
            l.seenCR = !0) : (l.column++, l.seenCR = !1)
          }
        }
        return Mt !== l && (Mt > l && (Mt = 0, Dt = {
          line: 1,
          column: 1,
          seenCR: !1
        }), u(Dt, Mt, l), Mt = l), Dt
      }
      function e (n) {
        Ht > qt || (qt > Ht && (Ht = qt, Ot = []), Ot.push(n))
      }
      function o (n) {
        var l = 0
        for (n.sort(); l < n.length;) n[l - 1] === n[l] ? n.splice(l, 1) : l++
      }
      function c () {
        var l, u, t, r, o
        return l = qt, u = i(), u !== null ? (t = qt, n.charCodeAt(qt) === 124 ? (r = fl,
        qt++) : (r = null, Wt === 0 && e(sl)), r !== null ? (o = c(), o !== null ? (r = [ r, o ],
        t = r) : (qt = t, t = il)) : (qt = t, t = il), t === null && (t = al), t !== null ? (Lt = l,
        u = hl(u, t), u === null ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l,
        l = il), l
      }
      function i () {
        var n, l, u, t, r
        if (n = qt, l = f(), l === null && (l = al), l !== null) {
          if (u = qt, Wt++, t = d(),
          Wt--, t === null ? u = al : (qt = u, u = il), u !== null) {
            for (t = [], r = h(), r === null && (r = a()); r !== null;) {
              t.push(r), r = h(),
              r === null && (r = a())
            }
            t !== null ? (r = s(), r === null && (r = al), r !== null ? (Lt = n, l = dl(l, t, r),
            l === null ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il)
          } else qt = n, n = il
        } else qt = n, n = il
        return n
      }
      function a () {
        var n
        return n = x(), n === null && (n = Q(), n === null && (n = B())), n
      }
      function f () {
        var l, u
        return l = qt, n.charCodeAt(qt) === 94 ? (u = pl, qt++) : (u = null, Wt === 0 && e(vl)),
        u !== null && (Lt = l, u = wl()), u === null ? (qt = l, l = u) : l = u, l
      }
      function s () {
        var l, u
        return l = qt, n.charCodeAt(qt) === 36 ? (u = Al, qt++) : (u = null, Wt === 0 && e(Cl)),
        u !== null && (Lt = l, u = gl()), u === null ? (qt = l, l = u) : l = u, l
      }
      function h () {
        var n, l, u
        return n = qt, l = a(), l !== null ? (u = d(), u !== null ? (Lt = n, l = bl(l, u),
        l === null ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n
      }
      function d () {
        var n, l, u
        return Wt++, n = qt, l = p(), l !== null ? (u = k(), u === null && (u = al), u !== null ? (Lt = n,
        l = Tl(l, u), l === null ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n,
        n = il), Wt--, n === null && (l = null, Wt === 0 && e(kl)), n
      }
      function p () {
        var n
        return n = v(), n === null && (n = w(), n === null && (n = A(), n === null && (n = C(),
        n === null && (n = g(), n === null && (n = b()))))), n
      }
      function v () {
        var l, u, t, r, o, c
        return l = qt, n.charCodeAt(qt) === 123 ? (u = xl, qt++) : (u = null, Wt === 0 && e(yl)),
        u !== null ? (t = T(), t !== null ? (n.charCodeAt(qt) === 44 ? (r = ml, qt++) : (r = null,
        Wt === 0 && e(Rl)), r !== null ? (o = T(), o !== null ? (n.charCodeAt(qt) === 125 ? (c = Fl,
        qt++) : (c = null, Wt === 0 && e(Ql)), c !== null ? (Lt = l, u = Sl(t, o), u === null ? (qt = l,
        l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l,
        l = il)) : (qt = l, l = il), l
      }
      function w () {
        var l, u, t, r
        return l = qt, n.charCodeAt(qt) === 123 ? (u = xl, qt++) : (u = null, Wt === 0 && e(yl)),
        u !== null ? (t = T(), t !== null ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null,
        Wt === 0 && e(El)), r !== null ? (Lt = l, u = Gl(t), u === null ? (qt = l, l = u) : l = u) : (qt = l,
        l = il)) : (qt = l, l = il)) : (qt = l, l = il), l
      }
      function A () {
        var l, u, t, r
        return l = qt, n.charCodeAt(qt) === 123 ? (u = xl, qt++) : (u = null, Wt === 0 && e(yl)),
        u !== null ? (t = T(), t !== null ? (n.charCodeAt(qt) === 125 ? (r = Fl, qt++) : (r = null,
        Wt === 0 && e(Ql)), r !== null ? (Lt = l, u = Bl(t), u === null ? (qt = l, l = u) : l = u) : (qt = l,
        l = il)) : (qt = l, l = il)) : (qt = l, l = il), l
      }
      function C () {
        var l, u
        return l = qt, n.charCodeAt(qt) === 43 ? (u = jl, qt++) : (u = null, Wt === 0 && e($l)),
        u !== null && (Lt = l, u = ql()), u === null ? (qt = l, l = u) : l = u, l
      }
      function g () {
        var l, u
        return l = qt, n.charCodeAt(qt) === 42 ? (u = Ll, qt++) : (u = null, Wt === 0 && e(Ml)),
        u !== null && (Lt = l, u = Dl()), u === null ? (qt = l, l = u) : l = u, l
      }
      function b () {
        var l, u
        return l = qt, n.charCodeAt(qt) === 63 ? (u = Hl, qt++) : (u = null, Wt === 0 && e(Ol)),
        u !== null && (Lt = l, u = Wl()), u === null ? (qt = l, l = u) : l = u, l
      }
      function k () {
        var l
        return n.charCodeAt(qt) === 63 ? (l = Hl, qt++) : (l = null, Wt === 0 && e(Ol)),
        l
      }
      function T () {
        var l, u, t
        if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null,
        Wt === 0 && e(Il)), t !== null) {
          for (;t !== null;) {
            u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt),
            qt++) : (t = null, Wt === 0 && e(Il))
          }
        } else u = il
        return u !== null && (Lt = l, u = Jl(u)), u === null ? (qt = l, l = u) : l = u,
        l
      }
      function x () {
        var l, u, t, r
        return l = qt, n.charCodeAt(qt) === 40 ? (u = Kl, qt++) : (u = null, Wt === 0 && e(Nl)),
        u !== null ? (t = R(), t === null && (t = F(), t === null && (t = m(), t === null && (t = y()))),
        t !== null ? (n.charCodeAt(qt) === 41 ? (r = Pl, qt++) : (r = null, Wt === 0 && e(Vl)),
        r !== null ? (Lt = l, u = Xl(t), u === null ? (qt = l, l = u) : l = u) : (qt = l,
        l = il)) : (qt = l, l = il)) : (qt = l, l = il), l
      }
      function y () {
        var n, l
        return n = qt, l = c(), l !== null && (Lt = n, l = Yl(l)), l === null ? (qt = n,
        n = l) : n = l, n
      }
      function m () {
        var l, u, t
        return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, Wt === 0 && e(_l)),
        u !== null ? (t = c(), t !== null ? (Lt = l, u = nu(t), u === null ? (qt = l, l = u) : l = u) : (qt = l,
        l = il)) : (qt = l, l = il), l
      }
      function R () {
        var l, u, t
        return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, Wt === 0 && e(uu)),
        u !== null ? (t = c(), t !== null ? (Lt = l, u = tu(t), u === null ? (qt = l, l = u) : l = u) : (qt = l,
        l = il)) : (qt = l, l = il), l
      }
      function F () {
        var l, u, t
        return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, Wt === 0 && e(eu)),
        u !== null ? (t = c(), t !== null ? (Lt = l, u = ou(t), u === null ? (qt = l, l = u) : l = u) : (qt = l,
        l = il)) : (qt = l, l = il), l
      }
      function Q () {
        var l, u, t, r, o
        if (Wt++, l = qt, n.charCodeAt(qt) === 91 ? (u = iu, qt++) : (u = null, Wt === 0 && e(au)),
        u !== null) {
          if (n.charCodeAt(qt) === 94 ? (t = pl, qt++) : (t = null, Wt === 0 && e(vl)),
          t === null && (t = al), t !== null) {
            for (r = [], o = S(), o === null && (o = U()); o !== null;) {
              r.push(o), o = S(),
              o === null && (o = U())
            }
            r !== null ? (n.charCodeAt(qt) === 93 ? (o = fu, qt++) : (o = null, Wt === 0 && e(su)),
            o !== null ? (Lt = l, u = hu(t, r), u === null ? (qt = l, l = u) : l = u) : (qt = l,
            l = il)) : (qt = l, l = il)
          } else qt = l, l = il
        } else qt = l, l = il
        return Wt--, l === null && (u = null, Wt === 0 && e(cu)), l
      }
      function S () {
        var l, u, t, r
        return Wt++, l = qt, u = U(), u !== null ? (n.charCodeAt(qt) === 45 ? (t = pu, qt++) : (t = null,
        Wt === 0 && e(vu)), t !== null ? (r = U(), r !== null ? (Lt = l, u = wu(u, r), u === null ? (qt = l,
        l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--,
        l === null && (u = null, Wt === 0 && e(du)), l
      }
      function U () {
        var n, l
        return Wt++, n = G(), n === null && (n = E()), Wt--, n === null && (l = null, Wt === 0 && e(Au)),
        n
      }
      function E () {
        var l, u
        return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, Wt === 0 && e(gu)),
        u !== null && (Lt = l, u = bu(u)), u === null ? (qt = l, l = u) : l = u, l
      }
      function G () {
        var n
        return n = L(), n === null && (n = Y(), n === null && (n = H(), n === null && (n = O(),
        n === null && (n = W(), n === null && (n = z(), n === null && (n = I(), n === null && (n = J(),
        n === null && (n = K(), n === null && (n = N(), n === null && (n = P(), n === null && (n = V(),
        n === null && (n = X(), n === null && (n = _(), n === null && (n = nl(), n === null && (n = ll(),
        n === null && (n = ul(), n === null && (n = tl()))))))))))))))))), n
      }
      function B () {
        var n
        return n = j(), n === null && (n = q(), n === null && (n = $())), n
      }
      function j () {
        var l, u
        return l = qt, n.charCodeAt(qt) === 46 ? (u = ku, qt++) : (u = null, Wt === 0 && e(Tu)),
        u !== null && (Lt = l, u = xu()), u === null ? (qt = l, l = u) : l = u, l
      }
      function $ () {
        var l, u
        return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null,
        Wt === 0 && e(Ru)), u !== null && (Lt = l, u = bu(u)), u === null ? (qt = l, l = u) : l = u,
        Wt--, l === null && (u = null, Wt === 0 && e(yu)), l
      }
      function q () {
        var n
        return n = M(), n === null && (n = D(), n === null && (n = Y(), n === null && (n = H(),
        n === null && (n = O(), n === null && (n = W(), n === null && (n = z(), n === null && (n = I(),
        n === null && (n = J(), n === null && (n = K(), n === null && (n = N(), n === null && (n = P(),
        n === null && (n = V(), n === null && (n = X(), n === null && (n = Z(), n === null && (n = _(),
        n === null && (n = nl(), n === null && (n = ll(), n === null && (n = ul(), n === null && (n = tl()))))))))))))))))))),
        n
      }
      function L () {
        var l, u
        return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, Wt === 0 && e(Qu)),
        u !== null && (Lt = l, u = Su()), u === null ? (qt = l, l = u) : l = u, l
      }
      function M () {
        var l, u
        return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, Wt === 0 && e(Qu)),
        u !== null && (Lt = l, u = Uu()), u === null ? (qt = l, l = u) : l = u, l
      }
      function D () {
        var l, u
        return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, Wt === 0 && e(Gu)),
        u !== null && (Lt = l, u = Bu()), u === null ? (qt = l, l = u) : l = u, l
      }
      function H () {
        var l, u
        return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, Wt === 0 && e($u)),
        u !== null && (Lt = l, u = qu()), u === null ? (qt = l, l = u) : l = u, l
      }
      function O () {
        var l, u
        return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, Wt === 0 && e(Mu)),
        u !== null && (Lt = l, u = Du()), u === null ? (qt = l, l = u) : l = u, l
      }
      function W () {
        var l, u
        return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, Wt === 0 && e(Ou)),
        u !== null && (Lt = l, u = Wu()), u === null ? (qt = l, l = u) : l = u, l
      }
      function z () {
        var l, u
        return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, Wt === 0 && e(Iu)),
        u !== null && (Lt = l, u = Ju()), u === null ? (qt = l, l = u) : l = u, l
      }
      function I () {
        var l, u
        return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, Wt === 0 && e(Nu)),
        u !== null && (Lt = l, u = Pu()), u === null ? (qt = l, l = u) : l = u, l
      }
      function J () {
        var l, u
        return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, Wt === 0 && e(Xu)),
        u !== null && (Lt = l, u = Yu()), u === null ? (qt = l, l = u) : l = u, l
      }
      function K () {
        var l, u
        return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, Wt === 0 && e(_u)),
        u !== null && (Lt = l, u = nt()), u === null ? (qt = l, l = u) : l = u, l
      }
      function N () {
        var l, u
        return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, Wt === 0 && e(ut)),
        u !== null && (Lt = l, u = tt()), u === null ? (qt = l, l = u) : l = u, l
      }
      function P () {
        var l, u
        return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, Wt === 0 && e(et)),
        u !== null && (Lt = l, u = ot()), u === null ? (qt = l, l = u) : l = u, l
      }
      function V () {
        var l, u
        return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, Wt === 0 && e(it)),
        u !== null && (Lt = l, u = at()), u === null ? (qt = l, l = u) : l = u, l
      }
      function X () {
        var l, u
        return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, Wt === 0 && e(st)),
        u !== null && (Lt = l, u = ht()), u === null ? (qt = l, l = u) : l = u, l
      }
      function Y () {
        var l, u, t
        return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, Wt === 0 && e(pt)),
        u !== null ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, Wt === 0 && e(vt)),
        t !== null ? (Lt = l, u = wt(t), u === null ? (qt = l, l = u) : l = u) : (qt = l,
        l = il)) : (qt = l, l = il), l
      }
      function Z () {
        var l, u, t
        return l = qt, n.charCodeAt(qt) === 92 ? (u = At, qt++) : (u = null, Wt === 0 && e(Ct)),
        u !== null ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, Wt === 0 && e(bt)),
        t !== null ? (Lt = l, u = kt(t), u === null ? (qt = l, l = u) : l = u) : (qt = l,
        l = il)) : (qt = l, l = il), l
      }
      function _ () {
        var l, u, t, r
        if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, Wt === 0 && e(xt)),
        u !== null) {
          if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, Wt === 0 && e(mt)),
          r !== null) {
            for (;r !== null;) {
              t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt),
              qt++) : (r = null, Wt === 0 && e(mt))
            }
          } else t = il
          t !== null ? (Lt = l, u = Rt(t), u === null ? (qt = l, l = u) : l = u) : (qt = l,
          l = il)
        } else qt = l, l = il
        return l
      }
      function nl () {
        var l, u, t, r
        if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, Wt === 0 && e(Qt)),
        u !== null) {
          if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, Wt === 0 && e(Ut)),
          r !== null) {
            for (;r !== null;) {
              t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt),
              qt++) : (r = null, Wt === 0 && e(Ut))
            }
          } else t = il
          t !== null ? (Lt = l, u = Et(t), u === null ? (qt = l, l = u) : l = u) : (qt = l,
          l = il)
        } else qt = l, l = il
        return l
      }
      function ll () {
        var l, u, t, r
        if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, Wt === 0 && e(Bt)),
        u !== null) {
          if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, Wt === 0 && e(Ut)),
          r !== null) {
            for (;r !== null;) {
              t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt),
              qt++) : (r = null, Wt === 0 && e(Ut))
            }
          } else t = il
          t !== null ? (Lt = l, u = jt(t), u === null ? (qt = l, l = u) : l = u) : (qt = l,
          l = il)
        } else qt = l, l = il
        return l
      }
      function ul () {
        var l, u
        return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, Wt === 0 && e(xt)),
        u !== null && (Lt = l, u = $t()), u === null ? (qt = l, l = u) : l = u, l
      }
      function tl () {
        var l, u, t
        return l = qt, n.charCodeAt(qt) === 92 ? (u = At, qt++) : (u = null, Wt === 0 && e(Ct)),
        u !== null ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, Wt === 0 && e(vt)),
        t !== null ? (Lt = l, u = bu(t), u === null ? (qt = l, l = u) : l = u) : (qt = l,
        l = il)) : (qt = l, l = il), l
      }
      var rl; var el = arguments.length > 1 ? arguments[1] : {}; var ol = {
        regexp: c
      }; var cl = c; var il = null; var al = ''; var fl = '|'; var sl = '"|"'; var hl = function (n, l) {
        return l ? new Alternate(n, l[1]) : n
      }; var dl = function (n, l, u) {
        return new Match([ n ].concat(l).concat([ u ]))
      }; var pl = '^'; var vl = '"^"'; var wl = function () {
        return new Token('start')
      }; var Al = '$'; var Cl = '"$"'; var gl = function () {
        return new Token('end')
      }; var bl = function (n, l) {
        return new Quantified(n, l)
      }; var kl = 'Quantifier'; var Tl = function (n, l) {
        return l && (n.greedy = !1), n
      }; var xl = '{'; var yl = '"{"'; var ml = ','; var Rl = '","'; var Fl = '}'; var Ql = '"}"'; var Sl = function (n, l) {
        return new Quantifier(n, l)
      }; var Ul = ',}'; var El = '",}"'; var Gl = function (n) {
        return new Quantifier(n, 1 / 0)
      }; var Bl = function (n) {
        return new Quantifier(n, n)
      }; var jl = '+'; var $l = '"+"'; var ql = function () {
        return new Quantifier(1, 1 / 0)
      }; var Ll = '*'; var Ml = '"*"'; var Dl = function () {
        return new Quantifier(0, 1 / 0)
      }; var Hl = '?'; var Ol = '"?"'; var Wl = function () {
        return new Quantifier(0, 1)
      }; var zl = /^[0-9]/; var Il = '[0-9]'; var Jl = function (n) {
        return +n.join('')
      }; var Kl = '('; var Nl = '"("'; var Pl = ')'; var Vl = '")"'; var Xl = function (n) {
        return n
      }; var Yl = function (n) {
        return new CaptureGroup(n)
      }; var Zl = '?:'; var _l = '"?:"'; var nu = function (n) {
        return new Group('non-capture-group', n)
      }; var lu = '?='; var uu = '"?="'; var tu = function (n) {
        return new Group('positive-lookahead', n)
      }; var ru = '?!'; var eu = '"?!"'; var ou = function (n) {
        return new Group('negative-lookahead', n)
      }; var cu = 'CharacterSet'; var iu = '['; var au = '"["'; var fu = ']'; var su = '"]"'; var hu = function (n, l) {
        return new CharSet(!!n, l)
      }; var du = 'CharacterRange'; var pu = '-'; var vu = '"-"'; var wu = function (n, l) {
        return new CharacterRange(n, l)
      }; var Au = 'Character'; var Cu = /^[^\\\]]/; var gu = '[^\\\\\\]]'; var bu = function (n) {
        return new Literal(n)
      }; var ku = '.'; var Tu = '"."'; var xu = function () {
        return new Token('any-character')
      }; var yu = 'Literal'; var mu = /^[^|\\\/.[()?+*$\^]/; var Ru = '[^|\\\\\\/.[()?+*$\\^]'; var Fu = '\\b'; var Qu = '"\\\\b"'; var Su = function () {
        return new Token('backspace')
      }; var Uu = function () {
        return new Token('word-boundary')
      }; var Eu = '\\B'; var Gu = '"\\\\B"'; var Bu = function () {
        return new Token('non-word-boundary')
      }; var ju = '\\d'; var $u = '"\\\\d"'; var qu = function () {
        return new Token('digit')
      }; var Lu = '\\D'; var Mu = '"\\\\D"'; var Du = function () {
        return new Token('non-digit')
      }; var Hu = '\\f'; var Ou = '"\\\\f"'; var Wu = function () {
        return new Token('form-feed')
      }; var zu = '\\n'; var Iu = '"\\\\n"'; var Ju = function () {
        return new Token('line-feed')
      }; var Ku = '\\r'; var Nu = '"\\\\r"'; var Pu = function () {
        return new Token('carriage-return')
      }; var Vu = '\\s'; var Xu = '"\\\\s"'; var Yu = function () {
        return new Token('white-space')
      }; var Zu = '\\S'; var _u = '"\\\\S"'; var nt = function () {
        return new Token('non-white-space')
      }; var lt = '\\t'; var ut = '"\\\\t"'; var tt = function () {
        return new Token('tab')
      }; var rt = '\\v'; var et = '"\\\\v"'; var ot = function () {
        return new Token('vertical-tab')
      }; var ct = '\\w'; var it = '"\\\\w"'; var at = function () {
        return new Token('word')
      }; var ft = '\\W'; var st = '"\\\\W"'; var ht = function () {
        return new Token('non-word')
      }; var dt = '\\c'; var pt = '"\\\\c"'; var vt = 'any character'; var wt = function (n) {
        return new ControlCharacter(n)
      }; var At = '\\'; var Ct = '"\\\\"'; var gt = /^[1-9]/; var bt = '[1-9]'; var kt = function (n) {
        return new BackReference(n)
      }; var Tt = '\\0'; var xt = '"\\\\0"'; var yt = /^[0-7]/; var mt = '[0-7]'; var Rt = function (n) {
        return new Octal(n.join(''))
      }; var Ft = '\\x'; var Qt = '"\\\\x"'; var St = /^[0-9a-fA-F]/; var Ut = '[0-9a-fA-F]'; var Et = function (n) {
        return new Hex(n.join(''))
      }; var Gt = '\\u'; var Bt = '"\\\\u"'; var jt = function (n) {
        return new Unicode(n.join(''))
      }; var $t = function () {
        return new Token('null-character')
      }; var qt = 0; var Lt = 0; var Mt = 0; var Dt = {
        line: 1,
        column: 1,
        seenCR: !1
      }; var Ht = 0; var Ot = []; var Wt = 0
      if ('startRule' in el) {
        if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".')
        cl = ol[el.startRule]
      }
      if (Token.offset = t, Token.text = u, rl = cl(), rl !== null && qt === n.length) return rl
      throw o(Ot), Lt = Math.max(qt, Ht), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)
    }
    return n(l, Error), {
      SyntaxError: l,
      parse: u
    }
  }()); var index = 1; var cgs = {}
  
  module.exports = parser
  