"use strict";

function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
//     Underscore.js 1.9.1
//     http://underscorejs.org
//     (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
//     Underscore may be freely distributed under the MIT license.
!function () {
  var n = "object" == (typeof self === "undefined" ? "undefined" : _typeof(self)) && self.self === self && self || "object" == (typeof global === "undefined" ? "undefined" : _typeof(global)) && global.global === global && global || this || {},
    r = n._,
    e = Array.prototype,
    o = Object.prototype,
    s = "undefined" != typeof Symbol ? Symbol.prototype : null,
    u = e.push,
    c = e.slice,
    p = o.toString,
    i = o.hasOwnProperty,
    t = Array.isArray,
    a = Object.keys,
    l = Object.create,
    f = function f() {},
    h = function h(n) {
      return n instanceof h ? n : this instanceof h ? void (this._wrapped = n) : new h(n);
    };
  "undefined" == typeof exports || exports.nodeType ? n._ = h : ("undefined" != typeof module && !module.nodeType && module.exports && (exports = module.exports = h), exports._ = h), h.VERSION = "1.9.1";
  var v,
    y = function y(u, i, n) {
      if (void 0 === i) return u;
      switch (null == n ? 3 : n) {
        case 1:
          return function (n) {
            return u.call(i, n);
          };
        case 3:
          return function (n, r, t) {
            return u.call(i, n, r, t);
          };
        case 4:
          return function (n, r, t, e) {
            return u.call(i, n, r, t, e);
          };
      }
      return function () {
        return u.apply(i, arguments);
      };
    },
    d = function d(n, r, t) {
      return h.iteratee !== v ? h.iteratee(n, r) : null == n ? h.identity : h.isFunction(n) ? y(n, r, t) : h.isObject(n) && !h.isArray(n) ? h.matcher(n) : h.property(n);
    };
  h.iteratee = v = function v(n, r) {
    return d(n, r, 1 / 0);
  };
  var g = function g(u, i) {
      return i = null == i ? u.length - 1 : +i, function () {
        for (var n = Math.max(arguments.length - i, 0), r = Array(n), t = 0; t < n; t++) r[t] = arguments[t + i];
        switch (i) {
          case 0:
            return u.call(this, r);
          case 1:
            return u.call(this, arguments[0], r);
          case 2:
            return u.call(this, arguments[0], arguments[1], r);
        }
        var e = Array(i + 1);
        for (t = 0; t < i; t++) e[t] = arguments[t];
        return e[i] = r, u.apply(this, e);
      };
    },
    m = function m(n) {
      if (!h.isObject(n)) return {};
      if (l) return l(n);
      f.prototype = n;
      var r = new f();
      return f.prototype = null, r;
    },
    b = function b(r) {
      return function (n) {
        return null == n ? void 0 : n[r];
      };
    },
    j = function j(n, r) {
      return null != n && i.call(n, r);
    },
    x = function x(n, r) {
      for (var t = r.length, e = 0; e < t; e++) {
        if (null == n) return;
        n = n[r[e]];
      }
      return t ? n : void 0;
    },
    _ = Math.pow(2, 53) - 1,
    A = b("length"),
    w = function w(n) {
      var r = A(n);
      return "number" == typeof r && 0 <= r && r <= _;
    };
  h.each = h.forEach = function (n, r, t) {
    var e, u;
    if (r = y(r, t), w(n)) for (e = 0, u = n.length; e < u; e++) r(n[e], e, n);else {
      var i = h.keys(n);
      for (e = 0, u = i.length; e < u; e++) r(n[i[e]], i[e], n);
    }
    return n;
  }, h.map = h.collect = function (n, r, t) {
    r = d(r, t);
    for (var e = !w(n) && h.keys(n), u = (e || n).length, i = Array(u), o = 0; o < u; o++) {
      var a = e ? e[o] : o;
      i[o] = r(n[a], a, n);
    }
    return i;
  };
  var O = function O(c) {
    return function (n, r, t, e) {
      var u = 3 <= arguments.length;
      return function (n, r, t, e) {
        var u = !w(n) && h.keys(n),
          i = (u || n).length,
          o = 0 < c ? 0 : i - 1;
        for (e || (t = n[u ? u[o] : o], o += c); 0 <= o && o < i; o += c) {
          var a = u ? u[o] : o;
          t = r(t, n[a], a, n);
        }
        return t;
      }(n, y(r, e, 4), t, u);
    };
  };
  h.reduce = h.foldl = h.inject = O(1), h.reduceRight = h.foldr = O(-1), h.find = h.detect = function (n, r, t) {
    var e = (w(n) ? h.findIndex : h.findKey)(n, r, t);
    if (void 0 !== e && -1 !== e) return n[e];
  }, h.filter = h.select = function (n, e, r) {
    var u = [];
    return e = d(e, r), h.each(n, function (n, r, t) {
      e(n, r, t) && u.push(n);
    }), u;
  }, h.reject = function (n, r, t) {
    return h.filter(n, h.negate(d(r)), t);
  }, h.every = h.all = function (n, r, t) {
    r = d(r, t);
    for (var e = !w(n) && h.keys(n), u = (e || n).length, i = 0; i < u; i++) {
      var o = e ? e[i] : i;
      if (!r(n[o], o, n)) return !1;
    }
    return !0;
  }, h.some = h.any = function (n, r, t) {
    r = d(r, t);
    for (var e = !w(n) && h.keys(n), u = (e || n).length, i = 0; i < u; i++) {
      var o = e ? e[i] : i;
      if (r(n[o], o, n)) return !0;
    }
    return !1;
  }, h.contains = h.includes = h.include = function (n, r, t, e) {
    return w(n) || (n = h.values(n)), ("number" != typeof t || e) && (t = 0), 0 <= h.indexOf(n, r, t);
  }, h.invoke = g(function (n, t, e) {
    var u, i;
    return h.isFunction(t) ? i = t : h.isArray(t) && (u = t.slice(0, -1), t = t[t.length - 1]), h.map(n, function (n) {
      var r = i;
      if (!r) {
        if (u && u.length && (n = x(n, u)), null == n) return;
        r = n[t];
      }
      return null == r ? r : r.apply(n, e);
    });
  }), h.pluck = function (n, r) {
    return h.map(n, h.property(r));
  }, h.where = function (n, r) {
    return h.filter(n, h.matcher(r));
  }, h.findWhere = function (n, r) {
    return h.find(n, h.matcher(r));
  }, h.max = function (n, e, r) {
    var t,
      u,
      i = -1 / 0,
      o = -1 / 0;
    if (null == e || "number" == typeof e && "object" != _typeof(n[0]) && null != n) for (var a = 0, c = (n = w(n) ? n : h.values(n)).length; a < c; a++) null != (t = n[a]) && i < t && (i = t);else e = d(e, r), h.each(n, function (n, r, t) {
      u = e(n, r, t), (o < u || u === -1 / 0 && i === -1 / 0) && (i = n, o = u);
    });
    return i;
  }, h.min = function (n, e, r) {
    var t,
      u,
      i = 1 / 0,
      o = 1 / 0;
    if (null == e || "number" == typeof e && "object" != _typeof(n[0]) && null != n) for (var a = 0, c = (n = w(n) ? n : h.values(n)).length; a < c; a++) null != (t = n[a]) && t < i && (i = t);else e = d(e, r), h.each(n, function (n, r, t) {
      ((u = e(n, r, t)) < o || u === 1 / 0 && i === 1 / 0) && (i = n, o = u);
    });
    return i;
  }, h.shuffle = function (n) {
    return h.sample(n, 1 / 0);
  }, h.sample = function (n, r, t) {
    if (null == r || t) return w(n) || (n = h.values(n)), n[h.random(n.length - 1)];
    var e = w(n) ? h.clone(n) : h.values(n),
      u = A(e);
    r = Math.max(Math.min(r, u), 0);
    for (var i = u - 1, o = 0; o < r; o++) {
      var a = h.random(o, i),
        c = e[o];
      e[o] = e[a], e[a] = c;
    }
    return e.slice(0, r);
  }, h.sortBy = function (n, e, r) {
    var u = 0;
    return e = d(e, r), h.pluck(h.map(n, function (n, r, t) {
      return {
        value: n,
        index: u++,
        criteria: e(n, r, t)
      };
    }).sort(function (n, r) {
      var t = n.criteria,
        e = r.criteria;
      if (t !== e) {
        if (e < t || void 0 === t) return 1;
        if (t < e || void 0 === e) return -1;
      }
      return n.index - r.index;
    }), "value");
  };
  var k = function k(o, r) {
    return function (e, u, n) {
      var i = r ? [[], []] : {};
      return u = d(u, n), h.each(e, function (n, r) {
        var t = u(n, r, e);
        o(i, n, t);
      }), i;
    };
  };
  h.groupBy = k(function (n, r, t) {
    j(n, t) ? n[t].push(r) : n[t] = [r];
  }), h.indexBy = k(function (n, r, t) {
    n[t] = r;
  }), h.countBy = k(function (n, r, t) {
    j(n, t) ? n[t]++ : n[t] = 1;
  });
  var S = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
  h.toArray = function (n) {
    return n ? h.isArray(n) ? c.call(n) : h.isString(n) ? n.match(S) : w(n) ? h.map(n, h.identity) : h.values(n) : [];
  }, h.size = function (n) {
    return null == n ? 0 : w(n) ? n.length : h.keys(n).length;
  }, h.partition = k(function (n, r, t) {
    n[t ? 0 : 1].push(r);
  }, !0), h.first = h.head = h.take = function (n, r, t) {
    return null == n || n.length < 1 ? null == r ? void 0 : [] : null == r || t ? n[0] : h.initial(n, n.length - r);
  }, h.initial = function (n, r, t) {
    return c.call(n, 0, Math.max(0, n.length - (null == r || t ? 1 : r)));
  }, h.last = function (n, r, t) {
    return null == n || n.length < 1 ? null == r ? void 0 : [] : null == r || t ? n[n.length - 1] : h.rest(n, Math.max(0, n.length - r));
  }, h.rest = h.tail = h.drop = function (n, r, t) {
    return c.call(n, null == r || t ? 1 : r);
  }, h.compact = function (n) {
    return h.filter(n, Boolean);
  };
  var M = function M(n, r, t, e) {
    for (var u = (e = e || []).length, i = 0, o = A(n); i < o; i++) {
      var a = n[i];
      if (w(a) && (h.isArray(a) || h.isArguments(a))) {
        if (r) for (var c = 0, l = a.length; c < l;) e[u++] = a[c++];else M(a, r, t, e), u = e.length;
      } else t || (e[u++] = a);
    }
    return e;
  };
  h.flatten = function (n, r) {
    return M(n, r, !1);
  }, h.without = g(function (n, r) {
    return h.difference(n, r);
  }), h.uniq = h.unique = function (n, r, t, e) {
    h.isBoolean(r) || (e = t, t = r, r = !1), null != t && (t = d(t, e));
    for (var u = [], i = [], o = 0, a = A(n); o < a; o++) {
      var c = n[o],
        l = t ? t(c, o, n) : c;
      r && !t ? (o && i === l || u.push(c), i = l) : t ? h.contains(i, l) || (i.push(l), u.push(c)) : h.contains(u, c) || u.push(c);
    }
    return u;
  }, h.union = g(function (n) {
    return h.uniq(M(n, !0, !0));
  }), h.intersection = function (n) {
    for (var r = [], t = arguments.length, e = 0, u = A(n); e < u; e++) {
      var i = n[e];
      if (!h.contains(r, i)) {
        var o;
        for (o = 1; o < t && h.contains(arguments[o], i); o++);
        o === t && r.push(i);
      }
    }
    return r;
  }, h.difference = g(function (n, r) {
    return r = M(r, !0, !0), h.filter(n, function (n) {
      return !h.contains(r, n);
    });
  }), h.unzip = function (n) {
    for (var r = n && h.max(n, A).length || 0, t = Array(r), e = 0; e < r; e++) t[e] = h.pluck(n, e);
    return t;
  }, h.zip = g(h.unzip), h.object = function (n, r) {
    for (var t = {}, e = 0, u = A(n); e < u; e++) r ? t[n[e]] = r[e] : t[n[e][0]] = n[e][1];
    return t;
  };
  var F = function F(i) {
    return function (n, r, t) {
      r = d(r, t);
      for (var e = A(n), u = 0 < i ? 0 : e - 1; 0 <= u && u < e; u += i) if (r(n[u], u, n)) return u;
      return -1;
    };
  };
  h.findIndex = F(1), h.findLastIndex = F(-1), h.sortedIndex = function (n, r, t, e) {
    for (var u = (t = d(t, e, 1))(r), i = 0, o = A(n); i < o;) {
      var a = Math.floor((i + o) / 2);
      t(n[a]) < u ? i = a + 1 : o = a;
    }
    return i;
  };
  var E = function E(i, o, a) {
    return function (n, r, t) {
      var e = 0,
        u = A(n);
      if ("number" == typeof t) 0 < i ? e = 0 <= t ? t : Math.max(t + u, e) : u = 0 <= t ? Math.min(t + 1, u) : t + u + 1;else if (a && t && u) return n[t = a(n, r)] === r ? t : -1;
      if (r != r) return 0 <= (t = o(c.call(n, e, u), h.isNaN)) ? t + e : -1;
      for (t = 0 < i ? e : u - 1; 0 <= t && t < u; t += i) if (n[t] === r) return t;
      return -1;
    };
  };
  h.indexOf = E(1, h.findIndex, h.sortedIndex), h.lastIndexOf = E(-1, h.findLastIndex), h.range = function (n, r, t) {
    null == r && (r = n || 0, n = 0), t || (t = r < n ? -1 : 1);
    for (var e = Math.max(Math.ceil((r - n) / t), 0), u = Array(e), i = 0; i < e; i++, n += t) u[i] = n;
    return u;
  }, h.chunk = function (n, r) {
    if (null == r || r < 1) return [];
    for (var t = [], e = 0, u = n.length; e < u;) t.push(c.call(n, e, e += r));
    return t;
  };
  var N = function N(n, r, t, e, u) {
    if (!(e instanceof r)) return n.apply(t, u);
    var i = m(n.prototype),
      o = n.apply(i, u);
    return h.isObject(o) ? o : i;
  };
  h.bind = g(function (r, t, e) {
    if (!h.isFunction(r)) throw new TypeError("Bind must be called on a function");
    var u = g(function (n) {
      return N(r, u, t, this, e.concat(n));
    });
    return u;
  }), h.partial = g(function (u, i) {
    var o = h.partial.placeholder,
      a = function a() {
        for (var n = 0, r = i.length, t = Array(r), e = 0; e < r; e++) t[e] = i[e] === o ? arguments[n++] : i[e];
        for (; n < arguments.length;) t.push(arguments[n++]);
        return N(u, a, this, this, t);
      };
    return a;
  }), (h.partial.placeholder = h).bindAll = g(function (n, r) {
    var t = (r = M(r, !1, !1)).length;
    if (t < 1) throw new Error("bindAll must be passed function names");
    for (; t--;) {
      var e = r[t];
      n[e] = h.bind(n[e], n);
    }
  }), h.memoize = function (e, u) {
    var i = function i(n) {
      var r = i.cache,
        t = "" + (u ? u.apply(this, arguments) : n);
      return j(r, t) || (r[t] = e.apply(this, arguments)), r[t];
    };
    return i.cache = {}, i;
  }, h.delay = g(function (n, r, t) {
    return setTimeout(function () {
      return n.apply(null, t);
    }, r);
  }), h.defer = h.partial(h.delay, h, 1), h.throttle = function (t, e, u) {
    var i,
      o,
      a,
      c,
      l = 0;
    u || (u = {});
    var f = function f() {
        l = !1 === u.leading ? 0 : h.now(), i = null, c = t.apply(o, a), i || (o = a = null);
      },
      n = function n() {
        var n = h.now();
        l || !1 !== u.leading || (l = n);
        var r = e - (n - l);
        return o = this, a = arguments, r <= 0 || e < r ? (i && (clearTimeout(i), i = null), l = n, c = t.apply(o, a), i || (o = a = null)) : i || !1 === u.trailing || (i = setTimeout(f, r)), c;
      };
    return n.cancel = function () {
      clearTimeout(i), l = 0, i = o = a = null;
    }, n;
  }, h.debounce = function (t, e, u) {
    var i,
      o,
      a = function a(n, r) {
        i = null, r && (o = t.apply(n, r));
      },
      n = g(function (n) {
        if (i && clearTimeout(i), u) {
          var r = !i;
          i = setTimeout(a, e), r && (o = t.apply(this, n));
        } else i = h.delay(a, e, this, n);
        return o;
      });
    return n.cancel = function () {
      clearTimeout(i), i = null;
    }, n;
  }, h.wrap = function (n, r) {
    return h.partial(r, n);
  }, h.negate = function (n) {
    return function () {
      return !n.apply(this, arguments);
    };
  }, h.compose = function () {
    var t = arguments,
      e = t.length - 1;
    return function () {
      for (var n = e, r = t[e].apply(this, arguments); n--;) r = t[n].call(this, r);
      return r;
    };
  }, h.after = function (n, r) {
    return function () {
      if (--n < 1) return r.apply(this, arguments);
    };
  }, h.before = function (n, r) {
    var t;
    return function () {
      return 0 < --n && (t = r.apply(this, arguments)), n <= 1 && (r = null), t;
    };
  }, h.once = h.partial(h.before, 2), h.restArguments = g;
  var I = !{
      toString: null
    }.propertyIsEnumerable("toString"),
    T = ["valueOf", "isPrototypeOf", "toString", "propertyIsEnumerable", "hasOwnProperty", "toLocaleString"],
    B = function B(n, r) {
      var t = T.length,
        e = n.constructor,
        u = h.isFunction(e) && e.prototype || o,
        i = "constructor";
      for (j(n, i) && !h.contains(r, i) && r.push(i); t--;) (i = T[t]) in n && n[i] !== u[i] && !h.contains(r, i) && r.push(i);
    };
  h.keys = function (n) {
    if (!h.isObject(n)) return [];
    if (a) return a(n);
    var r = [];
    for (var t in n) j(n, t) && r.push(t);
    return I && B(n, r), r;
  }, h.allKeys = function (n) {
    if (!h.isObject(n)) return [];
    var r = [];
    for (var t in n) r.push(t);
    return I && B(n, r), r;
  }, h.values = function (n) {
    for (var r = h.keys(n), t = r.length, e = Array(t), u = 0; u < t; u++) e[u] = n[r[u]];
    return e;
  }, h.mapObject = function (n, r, t) {
    r = d(r, t);
    for (var e = h.keys(n), u = e.length, i = {}, o = 0; o < u; o++) {
      var a = e[o];
      i[a] = r(n[a], a, n);
    }
    return i;
  }, h.pairs = function (n) {
    for (var r = h.keys(n), t = r.length, e = Array(t), u = 0; u < t; u++) e[u] = [r[u], n[r[u]]];
    return e;
  }, h.invert = function (n) {
    for (var r = {}, t = h.keys(n), e = 0, u = t.length; e < u; e++) r[n[t[e]]] = t[e];
    return r;
  }, h.functions = h.methods = function (n) {
    var r = [];
    for (var t in n) h.isFunction(n[t]) && r.push(t);
    return r.sort();
  };
  var R = function R(c, l) {
    return function (n) {
      var r = arguments.length;
      if (l && (n = Object(n)), r < 2 || null == n) return n;
      for (var t = 1; t < r; t++) for (var e = arguments[t], u = c(e), i = u.length, o = 0; o < i; o++) {
        var a = u[o];
        l && void 0 !== n[a] || (n[a] = e[a]);
      }
      return n;
    };
  };
  h.extend = R(h.allKeys), h.extendOwn = h.assign = R(h.keys), h.findKey = function (n, r, t) {
    r = d(r, t);
    for (var e, u = h.keys(n), i = 0, o = u.length; i < o; i++) if (r(n[e = u[i]], e, n)) return e;
  };
  var q,
    K,
    z = function z(n, r, t) {
      return r in t;
    };
  h.pick = g(function (n, r) {
    var t = {},
      e = r[0];
    if (null == n) return t;
    h.isFunction(e) ? (1 < r.length && (e = y(e, r[1])), r = h.allKeys(n)) : (e = z, r = M(r, !1, !1), n = Object(n));
    for (var u = 0, i = r.length; u < i; u++) {
      var o = r[u],
        a = n[o];
      e(a, o, n) && (t[o] = a);
    }
    return t;
  }), h.omit = g(function (n, t) {
    var r,
      e = t[0];
    return h.isFunction(e) ? (e = h.negate(e), 1 < t.length && (r = t[1])) : (t = h.map(M(t, !1, !1), String), e = function e(n, r) {
      return !h.contains(t, r);
    }), h.pick(n, e, r);
  }), h.defaults = R(h.allKeys, !0), h.create = function (n, r) {
    var t = m(n);
    return r && h.extendOwn(t, r), t;
  }, h.clone = function (n) {
    return h.isObject(n) ? h.isArray(n) ? n.slice() : h.extend({}, n) : n;
  }, h.tap = function (n, r) {
    return r(n), n;
  }, h.isMatch = function (n, r) {
    var t = h.keys(r),
      e = t.length;
    if (null == n) return !e;
    for (var u = Object(n), i = 0; i < e; i++) {
      var o = t[i];
      if (r[o] !== u[o] || !(o in u)) return !1;
    }
    return !0;
  }, q = function q(n, r, t, e) {
    if (n === r) return 0 !== n || 1 / n == 1 / r;
    if (null == n || null == r) return !1;
    if (n != n) return r != r;
    var u = _typeof(n);
    return ("function" === u || "object" === u || "object" == _typeof(r)) && K(n, r, t, e);
  }, K = function K(n, r, t, e) {
    n instanceof h && (n = n._wrapped), r instanceof h && (r = r._wrapped);
    var u = p.call(n);
    if (u !== p.call(r)) return !1;
    switch (u) {
      case "[object RegExp]":
      case "[object String]":
        return "" + n == "" + r;
      case "[object Number]":
        return +n != +n ? +r != +r : 0 == +n ? 1 / +n == 1 / r : +n == +r;
      case "[object Date]":
      case "[object Boolean]":
        return +n == +r;
      case "[object Symbol]":
        return s.valueOf.call(n) === s.valueOf.call(r);
    }
    var i = "[object Array]" === u;
    if (!i) {
      if ("object" != _typeof(n) || "object" != _typeof(r)) return !1;
      var o = n.constructor,
        a = r.constructor;
      if (o !== a && !(h.isFunction(o) && o instanceof o && h.isFunction(a) && a instanceof a) && "constructor" in n && "constructor" in r) return !1;
    }
    e = e || [];
    for (var c = (t = t || []).length; c--;) if (t[c] === n) return e[c] === r;
    if (t.push(n), e.push(r), i) {
      if ((c = n.length) !== r.length) return !1;
      for (; c--;) if (!q(n[c], r[c], t, e)) return !1;
    } else {
      var l,
        f = h.keys(n);
      if (c = f.length, h.keys(r).length !== c) return !1;
      for (; c--;) if (l = f[c], !j(r, l) || !q(n[l], r[l], t, e)) return !1;
    }
    return t.pop(), e.pop(), !0;
  }, h.isEqual = function (n, r) {
    return q(n, r);
  }, h.isEmpty = function (n) {
    return null == n || (w(n) && (h.isArray(n) || h.isString(n) || h.isArguments(n)) ? 0 === n.length : 0 === h.keys(n).length);
  }, h.isElement = function (n) {
    return !(!n || 1 !== n.nodeType);
  }, h.isArray = t || function (n) {
    return "[object Array]" === p.call(n);
  }, h.isObject = function (n) {
    var r = _typeof(n);
    return "function" === r || "object" === r && !!n;
  }, h.each(["Arguments", "Function", "String", "Number", "Date", "RegExp", "Error", "Symbol", "Map", "WeakMap", "Set", "WeakSet"], function (r) {
    h["is" + r] = function (n) {
      return p.call(n) === "[object " + r + "]";
    };
  }), h.isArguments(arguments) || (h.isArguments = function (n) {
    return j(n, "callee");
  });
  var D = n.document && n.document.childNodes;
  "function" != typeof /./ && "object" != (typeof Int8Array === "undefined" ? "undefined" : _typeof(Int8Array)) && "function" != typeof D && (h.isFunction = function (n) {
    return "function" == typeof n || !1;
  }), h.isFinite = function (n) {
    return !h.isSymbol(n) && isFinite(n) && !isNaN(parseFloat(n));
  }, h.isNaN = function (n) {
    return h.isNumber(n) && isNaN(n);
  }, h.isBoolean = function (n) {
    return !0 === n || !1 === n || "[object Boolean]" === p.call(n);
  }, h.isNull = function (n) {
    return null === n;
  }, h.isUndefined = function (n) {
    return void 0 === n;
  }, h.has = function (n, r) {
    if (!h.isArray(r)) return j(n, r);
    for (var t = r.length, e = 0; e < t; e++) {
      var u = r[e];
      if (null == n || !i.call(n, u)) return !1;
      n = n[u];
    }
    return !!t;
  }, h.noConflict = function () {
    return n._ = r, this;
  }, h.identity = function (n) {
    return n;
  }, h.constant = function (n) {
    return function () {
      return n;
    };
  }, h.noop = function () {}, h.property = function (r) {
    return h.isArray(r) ? function (n) {
      return x(n, r);
    } : b(r);
  }, h.propertyOf = function (r) {
    return null == r ? function () {} : function (n) {
      return h.isArray(n) ? x(r, n) : r[n];
    };
  }, h.matcher = h.matches = function (r) {
    return r = h.extendOwn({}, r), function (n) {
      return h.isMatch(n, r);
    };
  }, h.times = function (n, r, t) {
    var e = Array(Math.max(0, n));
    r = y(r, t, 1);
    for (var u = 0; u < n; u++) e[u] = r(u);
    return e;
  }, h.random = function (n, r) {
    return null == r && (r = n, n = 0), n + Math.floor(Math.random() * (r - n + 1));
  }, h.now = Date.now || function () {
    return new Date().getTime();
  };
  var L = {
      "&": "&amp;",
      "<": "&lt;",
      ">": "&gt;",
      '"': "&quot;",
      "'": "&#x27;",
      "`": "&#x60;"
    },
    P = h.invert(L),
    W = function W(r) {
      var t = function t(n) {
          return r[n];
        },
        n = "(?:" + h.keys(r).join("|") + ")",
        e = RegExp(n),
        u = RegExp(n, "g");
      return function (n) {
        return n = null == n ? "" : "" + n, e.test(n) ? n.replace(u, t) : n;
      };
    };
  h.escape = W(L), h.unescape = W(P), h.result = function (n, r, t) {
    h.isArray(r) || (r = [r]);
    var e = r.length;
    if (!e) return h.isFunction(t) ? t.call(n) : t;
    for (var u = 0; u < e; u++) {
      var i = null == n ? void 0 : n[r[u]];
      void 0 === i && (i = t, u = e), n = h.isFunction(i) ? i.call(n) : i;
    }
    return n;
  };
  var C = 0;
  h.uniqueId = function (n) {
    var r = ++C + "";
    return n ? n + r : r;
  }, h.templateSettings = {
    evaluate: /<%([\s\S]+?)%>/g,
    interpolate: /<%=([\s\S]+?)%>/g,
    escape: /<%-([\s\S]+?)%>/g
  };
  var J = /(.)^/,
    U = {
      "'": "'",
      "\\": "\\",
      "\r": "r",
      "\n": "n",
      "\u2028": "u2028",
      "\u2029": "u2029"
    },
    V = /\\|'|\r|\n|\u2028|\u2029/g,
    $ = function $(n) {
      return "\\" + U[n];
    };
  h.template = function (i, n, r) {
    !n && r && (n = r), n = h.defaults({}, n, h.templateSettings);
    var t,
      e = RegExp([(n.escape || J).source, (n.interpolate || J).source, (n.evaluate || J).source].join("|") + "|$", "g"),
      o = 0,
      a = "__p+='";
    i.replace(e, function (n, r, t, e, u) {
      return a += i.slice(o, u).replace(V, $), o = u + n.length, r ? a += "'+\n((__t=(" + r + "))==null?'':_.escape(__t))+\n'" : t ? a += "'+\n((__t=(" + t + "))==null?'':__t)+\n'" : e && (a += "';\n" + e + "\n__p+='"), n;
    }), a += "';\n", n.variable || (a = "with(obj||{}){\n" + a + "}\n"), a = "var __t,__p='',__j=Array.prototype.join," + "print=function(){__p+=__j.call(arguments,'');};\n" + a + "return __p;\n";
    try {
      t = new Function(n.variable || "obj", "_", a);
    } catch (n) {
      throw n.source = a, n;
    }
    var u = function u(n) {
        return t.call(this, n, h);
      },
      c = n.variable || "obj";
    return u.source = "function(" + c + "){\n" + a + "}", u;
  }, h.chain = function (n) {
    var r = h(n);
    return r._chain = !0, r;
  };
  var G = function G(n, r) {
    return n._chain ? h(r).chain() : r;
  };
  h.mixin = function (t) {
    return h.each(h.functions(t), function (n) {
      var r = h[n] = t[n];
      h.prototype[n] = function () {
        var n = [this._wrapped];
        return u.apply(n, arguments), G(this, r.apply(h, n));
      };
    }), h;
  }, h.mixin(h), h.each(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function (r) {
    var t = e[r];
    h.prototype[r] = function () {
      var n = this._wrapped;
      return t.apply(n, arguments), "shift" !== r && "splice" !== r || 0 !== n.length || delete n[0], G(this, n);
    };
  }), h.each(["concat", "join", "slice"], function (n) {
    var r = e[n];
    h.prototype[n] = function () {
      return G(this, r.apply(this._wrapped, arguments));
    };
  }), h.prototype.value = function () {
    return this._wrapped;
  }, h.prototype.valueOf = h.prototype.toJSON = h.prototype.value, h.prototype.toString = function () {
    return String(this._wrapped);
  }, "function" == typeof define && define.amd && define("underscore", [], function () {
    return h;
  });
}();