/*!
 * Legacy browser support
 */
[].map ||
  (Array.prototype.map = function (a, b) {
    for (var c = this, d = c.length, e = new Array(d), f = 0; d > f; f++)
      f in c && (e[f] = a.call(b, c[f], f, c));
    return e;
  }),
  [].filter ||
    (Array.prototype.filter = function (a) {
      if (null == this) throw new TypeError();
      var b = Object(this),
        c = b.length >>> 0;
      if ("function" != typeof a) throw new TypeError();
      for (var d = [], e = arguments[1], f = 0; c > f; f++)
        if (f in b) {
          var g = b[f];
          a.call(e, g, f, b) && d.push(g);
        }
      return d;
    }),
  [].indexOf ||
    (Array.prototype.indexOf = function (a) {
      if (null == this) throw new TypeError();
      var b = Object(this),
        c = b.length >>> 0;
      if (0 === c) return -1;
      var d = 0;
      if (
        (arguments.length > 1 &&
          ((d = Number(arguments[1])),
          d != d
            ? (d = 0)
            : 0 !== d &&
              d != 1 / 0 &&
              d != -(1 / 0) &&
              (d = (d > 0 || -1) * Math.floor(Math.abs(d)))),
        d >= c)
      )
        return -1;
      for (var e = d >= 0 ? d : Math.max(c - Math.abs(d), 0); c > e; e++)
        if (e in b && b[e] === a) return e;
      return -1;
    });
/*!
 * Cross-Browser Split 1.1.1
 * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>
 * Available under the MIT License
 * http://blog.stevenlevithan.com/archives/cross-browser-split
 */
var nativeSplit = String.prototype.split,
  compliantExecNpcg = void 0 === /()??/.exec("")[1];
String.prototype.split = function (a, b) {
  var c = this;
  if ("[object RegExp]" !== Object.prototype.toString.call(a))
    return nativeSplit.call(c, a, b);
  var d,
    e,
    f,
    g,
    h = [],
    i =
      (a.ignoreCase ? "i" : "") +
      (a.multiline ? "m" : "") +
      (a.extended ? "x" : "") +
      (a.sticky ? "y" : ""),
    j = 0;
  for (
    a = new RegExp(a.source, i + "g"),
      c += "",
      compliantExecNpcg || (d = new RegExp("^" + a.source + "$(?!\\s)", i)),
      b = void 0 === b ? -1 >>> 0 : b >>> 0;
    (e = a.exec(c)) &&
    ((f = e.index + e[0].length),
    !(
      f > j &&
      (h.push(c.slice(j, e.index)),
      !compliantExecNpcg &&
        e.length > 1 &&
        e[0].replace(d, function () {
          for (var a = 1; a < arguments.length - 2; a++)
            void 0 === arguments[a] && (e[a] = void 0);
        }),
      e.length > 1 &&
        e.index < c.length &&
        Array.prototype.push.apply(h, e.slice(1)),
      (g = e[0].length),
      (j = f),
      h.length >= b)
    ));

  )
    a.lastIndex === e.index && a.lastIndex++;
  return (
    j === c.length ? (g || !a.test("")) && h.push("") : h.push(c.slice(j)),
    h.length > b ? h.slice(0, b) : h
  );
};
