var n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(n) {
    return typeof n;
} : function(n) {
    return n && "function" == typeof Symbol && n.constructor === Symbol && n !== Symbol.prototype ? "symbol" : typeof n;
}, t = "function" == typeof Symbol && "symbol" == n(Symbol.iterator) ? function(t) {
    return void 0 === t ? "undefined" : n(t);
} : function(t) {
    return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : void 0 === t ? "undefined" : n(t);
};

(function() {
    function n(n) {
        return function(t, r, e, u) {
            r = d(r, u, 4);
            var i = !x(t) && y.keys(t), o = (i || t).length, a = 0 < n ? 0 : o - 1;
            arguments.length < 3 && (e = t[i ? i[a] : a], a += n);
            for (var c = r, l = e; 0 <= a && a < o; a += n) {
                var f = i ? i[a] : a;
                l = c(l, t[f], f, t);
            }
            return l;
        };
    }
    function r(n) {
        return function(t, r, e) {
            r = g(r, e), e = null != t && t.length;
            for (var u = 0 < n ? 0 : e - 1; 0 <= u && u < e; u += n) if (r(t[u], u, t)) return u;
            return -1;
        };
    }
    function e(n, t) {
        var r = S.length, e = n.constructor, u = (e = y.isFunction(e) && e.prototype || i, 
        "constructor");
        for (y.has(n, u) && !y.contains(t, u) && t.push(u); r--; ) (u = S[r]) in n && n[u] !== e[u] && !y.contains(t, u) && t.push(u);
    }
    var u = Array.prototype, i = Object.prototype, o = u.push, a = u.slice, c = i.toString, l = i.hasOwnProperty, f = Array.isArray, s = Object.keys, p = Function.prototype.bind, h = Object.create, v = function() {}, y = function n(t) {
        return t instanceof n ? t : this instanceof n ? void (this._wrapped = t) : new n(t);
    };
    (module.exports = y).VERSION = "1.8.2";
    var d = function(n, t, r) {
        if (void 0 === t) return n;
        switch (null == r ? 3 : r) {
          case 1:
            return function(r) {
                return n.call(t, r);
            };

          case 2:
            return function(r, e) {
                return n.call(t, r, e);
            };

          case 3:
            return function(r, e, u) {
                return n.call(t, r, e, u);
            };

          case 4:
            return function(r, e, u, i) {
                return n.call(t, r, e, u, i);
            };
        }
        return function() {
            return n.apply(t, arguments);
        };
    }, g = function(n, t, r) {
        return null == n ? y.identity : y.isFunction(n) ? d(n, t, r) : y.isObject(n) ? y.matcher(n) : y.property(n);
    };
    y.iteratee = function(n, t) {
        return g(n, t, 1 / 0);
    };
    var m = function(n, t) {
        return function(r) {
            var e = arguments.length;
            if (e < 2 || null == r) return r;
            for (var u = 1; u < e; u++) for (var i = arguments[u], o = n(i), a = o.length, c = 0; c < a; c++) {
                var l = o[c];
                t && void 0 !== r[l] || (r[l] = i[l]);
            }
            return r;
        };
    }, b = function(n) {
        return y.isObject(n) ? h ? h(n) : (v.prototype = n, n = new v(), v.prototype = null, 
        n) : {};
    }, j = Math.pow(2, 53) - 1, x = function(n) {
        return "number" == typeof (n = null != n && n.length) && 0 <= n && n <= j;
    };
    y.each = y.forEach = function(n, t, r) {
        var e;
        if (t = d(t, r), x(n)) for (r = 0, e = n.length; r < e; r++) t(n[r], r, n); else {
            var u = y.keys(n);
            for (r = 0, e = u.length; r < e; r++) t(n[u[r]], u[r], n);
        }
        return n;
    }, y.map = y.collect = function(n, t, r) {
        t = g(t, r);
        for (var e = ((r = !x(n) && y.keys(n)) || n).length, u = Array(e), i = 0; i < e; i++) {
            var o = r ? r[i] : i;
            u[i] = t(n[o], o, n);
        }
        return u;
    }, y.reduce = y.foldl = y.inject = n(1), y.reduceRight = y.foldr = n(-1), y.find = y.detect = function(n, t, r) {
        if (void 0 !== (t = x(n) ? y.findIndex(n, t, r) : y.findKey(n, t, r)) && -1 !== t) return n[t];
    }, y.filter = y.select = function(n, t, r) {
        var e = [];
        return t = g(t, r), y.each(n, function(n, r, u) {
            t(n, r, u) && e.push(n);
        }), e;
    }, y.reject = function(n, t, r) {
        return y.filter(n, y.negate(g(t)), r);
    }, y.every = y.all = function(n, t, r) {
        t = g(t, r);
        for (var e = ((r = !x(n) && y.keys(n)) || n).length, u = 0; u < e; u++) {
            var i = r ? r[u] : u;
            if (!t(n[i], i, n)) return !1;
        }
        return !0;
    }, y.some = y.any = function(n, t, r) {
        t = g(t, r);
        for (var e = ((r = !x(n) && y.keys(n)) || n).length, u = 0; u < e; u++) {
            var i = r ? r[u] : u;
            if (t(n[i], i, n)) return !0;
        }
        return !1;
    }, y.contains = y.includes = y.include = function(n, t, r) {
        return x(n) || (n = y.values(n)), 0 <= y.indexOf(n, t, "number" == typeof r && r);
    }, y.invoke = function(n, t) {
        var r = a.call(arguments, 2), e = y.isFunction(t);
        return y.map(n, function(n) {
            var u = e ? t : n[t];
            return null == u ? u : u.apply(n, r);
        });
    }, y.pluck = function(n, t) {
        return y.map(n, y.property(t));
    }, y.where = function(n, t) {
        return y.filter(n, y.matcher(t));
    }, y.findWhere = function(n, t) {
        return y.find(n, y.matcher(t));
    }, y.max = function(n, t, r) {
        var e, u = -1 / 0, i = -1 / 0;
        if (null == t && null != n) for (var o = 0, a = (n = x(n) ? n : y.values(n)).length; o < a; o++) r = n[o], 
        u < r && (u = r); else t = g(t, r), y.each(n, function(n, r, o) {
            e = t(n, r, o), (i < e || -1 / 0 === e && -1 / 0 === u) && (u = n, i = e);
        });
        return u;
    }, y.min = function(n, t, r) {
        var e, u = 1 / 0, i = 1 / 0;
        if (null == t && null != n) for (var o = 0, a = (n = x(n) ? n : y.values(n)).length; o < a; o++) (r = n[o]) < u && (u = r); else t = g(t, r), 
        y.each(n, function(n, r, o) {
            ((e = t(n, r, o)) < i || 1 / 0 === e && 1 / 0 === u) && (u = n, i = e);
        });
        return u;
    }, y.shuffle = function(n) {
        for (var t, r = (n = x(n) ? n : y.values(n)).length, e = Array(r), u = 0; u < r; u++) (t = y.random(0, u)) !== u && (e[u] = e[t]), 
        e[t] = n[u];
        return e;
    }, y.sample = function(n, t, r) {
        return null == t || r ? (x(n) || (n = y.values(n)), n[y.random(n.length - 1)]) : y.shuffle(n).slice(0, Math.max(0, t));
    }, y.sortBy = function(n, t, r) {
        return t = g(t, r), y.pluck(y.map(n, function(n, r, e) {
            return {
                value: n,
                index: r,
                criteria: t(n, r, e)
            };
        }).sort(function(n, t) {
            var r = n.criteria, e = t.criteria;
            if (r !== e) {
                if (e < r || void 0 === r) return 1;
                if (r < e || void 0 === e) return -1;
            }
            return n.index - t.index;
        }), "value");
    };
    var _ = function(n) {
        return function(t, r, e) {
            var u = {};
            return r = g(r, e), y.each(t, function(e, i) {
                var o = r(e, i, t);
                n(u, e, o);
            }), u;
        };
    };
    y.groupBy = _(function(n, t, r) {
        y.has(n, r) ? n[r].push(t) : n[r] = [ t ];
    }), y.indexBy = _(function(n, t, r) {
        n[r] = t;
    }), y.countBy = _(function(n, t, r) {
        y.has(n, r) ? n[r]++ : n[r] = 1;
    }), y.toArray = function(n) {
        return n ? y.isArray(n) ? a.call(n) : x(n) ? y.map(n, y.identity) : y.values(n) : [];
    }, y.size = function(n) {
        return null == n ? 0 : x(n) ? n.length : y.keys(n).length;
    }, y.partition = function(n, t, r) {
        t = g(t, r);
        var e = [], u = [];
        return y.each(n, function(n, r, i) {
            (t(n, r, i) ? e : u).push(n);
        }), [ e, u ];
    }, y.first = y.head = y.take = function(n, t, r) {
        if (null != n) return null == t || r ? n[0] : y.initial(n, n.length - t);
    }, y.initial = function(n, t, r) {
        return a.call(n, 0, Math.max(0, n.length - (null == t || r ? 1 : t)));
    }, y.last = function(n, t, r) {
        if (null != n) return null == t || r ? n[n.length - 1] : y.rest(n, Math.max(0, n.length - t));
    }, y.rest = y.tail = y.drop = function(n, t, r) {
        return a.call(n, null == t || r ? 1 : t);
    }, y.compact = function(n) {
        return y.filter(n, y.identity);
    };
    var w = function n(t, r, e, u) {
        var i = [], o = 0;
        u = u || 0;
        for (var a = t && t.length; u < a; u++) {
            var c = t[u];
            if (x(c) && (y.isArray(c) || y.isArguments(c))) {
                r || (c = n(c, r, e));
                var l = 0, f = c.length;
                for (i.length += f; l < f; ) i[o++] = c[l++];
            } else e || (i[o++] = c);
        }
        return i;
    };
    y.flatten = function(n, t) {
        return w(n, t, !1);
    }, y.without = function(n) {
        return y.difference(n, a.call(arguments, 1));
    }, y.uniq = y.unique = function(n, t, r, e) {
        if (null == n) return [];
        y.isBoolean(t) || (e = r, r = t, t = !1), null != r && (r = g(r, e)), e = [];
        for (var u = [], i = 0, o = n.length; i < o; i++) {
            var a = n[i], c = r ? r(a, i, n) : a;
            t ? (i && u === c || e.push(a), u = c) : r ? y.contains(u, c) || (u.push(c), e.push(a)) : y.contains(e, a) || e.push(a);
        }
        return e;
    }, y.union = function() {
        return y.uniq(w(arguments, !0, !0));
    }, y.intersection = function(n) {
        if (null == n) return [];
        for (var t = [], r = arguments.length, e = 0, u = n.length; e < u; e++) {
            var i = n[e];
            if (!y.contains(t, i)) {
                for (var o = 1; o < r && y.contains(arguments[o], i); o++) ;
                o === r && t.push(i);
            }
        }
        return t;
    }, y.difference = function(n) {
        var t = w(arguments, !0, !0, 1);
        return y.filter(n, function(n) {
            return !y.contains(t, n);
        });
    }, y.zip = function() {
        return y.unzip(arguments);
    }, y.unzip = function(n) {
        for (var t = n && y.max(n, "length").length || 0, r = Array(t), e = 0; e < t; e++) r[e] = y.pluck(n, e);
        return r;
    }, y.object = function(n, t) {
        for (var r = {}, e = 0, u = n && n.length; e < u; e++) t ? r[n[e]] = t[e] : r[n[e][0]] = n[e][1];
        return r;
    }, y.indexOf = function(n, t, r) {
        var e = 0, u = n && n.length;
        if ("number" == typeof r) e = r < 0 ? Math.max(0, u + r) : r; else if (r && u) return n[e = y.sortedIndex(n, t)] === t ? e : -1;
        if (t != t) return y.findIndex(a.call(n, e), y.isNaN);
        for (;e < u; e++) if (n[e] === t) return e;
        return -1;
    }, y.lastIndexOf = function(n, t, r) {
        var e = n ? n.length : 0;
        if ("number" == typeof r && (e = r < 0 ? e + r + 1 : Math.min(e, r + 1)), t != t) return y.findLastIndex(a.call(n, 0, e), y.isNaN);
        for (;0 <= --e; ) if (n[e] === t) return e;
        return -1;
    }, y.findIndex = r(1), y.findLastIndex = r(-1), y.sortedIndex = function(n, t, r, e) {
        t = (r = g(r, e, 1))(t), e = 0;
        for (var u = n.length; e < u; ) {
            var i = Math.floor((e + u) / 2);
            r(n[i]) < t ? e = i + 1 : u = i;
        }
        return e;
    }, y.range = function(n, t, r) {
        arguments.length <= 1 && (t = n || 0, n = 0), r = r || 1;
        for (var e = Math.max(Math.ceil((t - n) / r), 0), u = Array(e), i = 0; i < e; i++, 
        n += r) u[i] = n;
        return u;
    };
    var A = function(n, t, r, e, u) {
        return e instanceof t ? (t = b(n.prototype), n = n.apply(t, u), y.isObject(n) ? n : t) : n.apply(r, u);
    };
    y.bind = function(n, t) {
        if (p && n.bind === p) return p.apply(n, a.call(arguments, 1));
        if (!y.isFunction(n)) throw new TypeError("Bind must be called on a function");
        var r = a.call(arguments, 2);
        return function e() {
            return A(n, e, t, this, r.concat(a.call(arguments)));
        };
    }, y.partial = function(n) {
        var t = a.call(arguments, 1);
        return function r() {
            for (var e = 0, u = t.length, i = Array(u), o = 0; o < u; o++) i[o] = t[o] === y ? arguments[e++] : t[o];
            for (;e < arguments.length; ) i.push(arguments[e++]);
            return A(n, r, this, this, i);
        };
    }, y.bindAll = function(n) {
        var t, r, e = arguments.length;
        if (e <= 1) throw Error("bindAll must be passed function names");
        for (t = 1; t < e; t++) n[r = arguments[t]] = y.bind(n[r], n);
        return n;
    }, y.memoize = function(n, t) {
        var r = function r(e) {
            var u = r.cache, i = "" + (t ? t.apply(this, arguments) : e);
            return y.has(u, i) || (u[i] = n.apply(this, arguments)), u[i];
        };
        return r.cache = {}, r;
    }, y.defer = y.partial(y.delay = function(n, t) {
        var r = a.call(arguments, 2);
        return setTimeout(function() {
            return n.apply(null, r);
        }, t);
    }, y, 1), y.throttle = function(n, t, r) {
        var e, u, i, o = null, a = 0;
        r || (r = {});
        var c = function() {
            a = !1 === r.leading ? 0 : y.now(), o = null, i = n.apply(e, u), o || (e = u = null);
        };
        return function() {
            var l = y.now();
            a || !1 !== r.leading || (a = l);
            var f = t - (l - a);
            return e = this, u = arguments, f <= 0 || t < f ? (o && (clearTimeout(o), o = null), 
            a = l, i = n.apply(e, u), o || (e = u = null)) : o || !1 === r.trailing || (o = setTimeout(c, f)), 
            i;
        };
    }, y.debounce = function(n, t, r) {
        var e, u, i, o, a, c = function c() {
            var l = y.now() - o;
            l < t && 0 <= l ? e = setTimeout(c, t - l) : (e = null, r || (a = n.apply(i, u), 
            e || (i = u = null)));
        };
        return function() {
            i = this, u = arguments, o = y.now();
            var l = r && !e;
            return e || (e = setTimeout(c, t)), l && (a = n.apply(i, u), i = u = null), a;
        };
    }, y.wrap = function(n, t) {
        return y.partial(t, n);
    }, y.negate = function(n) {
        return function() {
            return !n.apply(this, arguments);
        };
    }, y.compose = function() {
        var n = arguments, t = n.length - 1;
        return function() {
            for (var r = t, e = n[t].apply(this, arguments); r--; ) e = n[r].call(this, e);
            return e;
        };
    }, y.after = function(n, t) {
        return function() {
            if (--n < 1) return t.apply(this, arguments);
        };
    }, y.once = y.partial(y.before = function(n, t) {
        var r;
        return function() {
            return 0 < --n && (r = t.apply(this, arguments)), n <= 1 && (t = null), r;
        };
    }, 2);
    var O = !{
        toString: null
    }.propertyIsEnumerable("toString"), S = "valueOf isPrototypeOf toString propertyIsEnumerable hasOwnProperty toLocaleString".split(" ");
    y.keys = function(n) {
        if (!y.isObject(n)) return [];
        if (s) return s(n);
        var t, r = [];
        for (t in n) y.has(n, t) && r.push(t);
        return O && e(n, r), r;
    }, y.allKeys = function(n) {
        if (!y.isObject(n)) return [];
        var t, r = [];
        for (t in n) r.push(t);
        return O && e(n, r), r;
    }, y.values = function(n) {
        for (var t = y.keys(n), r = t.length, e = Array(r), u = 0; u < r; u++) e[u] = n[t[u]];
        return e;
    }, y.mapObject = function(n, t, r) {
        t = g(t, r);
        for (var e, u = (r = y.keys(n)).length, i = {}, o = 0; o < u; o++) i[e = r[o]] = t(n[e], e, n);
        return i;
    }, y.pairs = function(n) {
        for (var t = y.keys(n), r = t.length, e = Array(r), u = 0; u < r; u++) e[u] = [ t[u], n[t[u]] ];
        return e;
    }, y.invert = function(n) {
        for (var t = {}, r = y.keys(n), e = 0, u = r.length; e < u; e++) t[n[r[e]]] = r[e];
        return t;
    }, y.functions = y.methods = function(n) {
        var t, r = [];
        for (t in n) y.isFunction(n[t]) && r.push(t);
        return r.sort();
    }, y.extend = m(y.allKeys), y.extendOwn = y.assign = m(y.keys), y.findKey = function(n, t, r) {
        t = g(t, r);
        for (var e, u = 0, i = (r = y.keys(n)).length; u < i; u++) if (t(n[e = r[u]], e, n)) return e;
    }, y.pick = function(n, t, r) {
        var e, u, i = {}, o = n;
        if (null == o) return i;
        y.isFunction(t) ? (u = y.allKeys(o), e = d(t, r)) : (u = w(arguments, !1, !1, 1), 
        e = function(n, t, r) {
            return t in r;
        }, o = Object(o));
        for (var a = 0, c = u.length; a < c; a++) {
            var l = u[a], f = o[l];
            e(f, l, o) && (i[l] = f);
        }
        return i;
    }, y.omit = function(n, t, r) {
        if (y.isFunction(t)) t = y.negate(t); else {
            var e = y.map(w(arguments, !1, !1, 1), String);
            t = function(n, t) {
                return !y.contains(e, t);
            };
        }
        return y.pick(n, t, r);
    }, y.defaults = m(y.allKeys, !0), y.create = function(n, t) {
        var r = b(n);
        return t && y.extendOwn(r, t), r;
    }, y.clone = function(n) {
        return y.isObject(n) ? y.isArray(n) ? n.slice() : y.extend({}, n) : n;
    }, y.tap = function(n, t) {
        return t(n), n;
    }, y.isMatch = function(n, t) {
        var r = y.keys(t), e = r.length;
        if (null == n) return !e;
        for (var u = Object(n), i = 0; i < e; i++) {
            var o = r[i];
            if (t[o] !== u[o] || !(o in u)) return !1;
        }
        return !0;
    }, y.isEqual = function(n, r) {
        return function n(r, e, u, i) {
            if (r === e) return 0 !== r || 1 / r == 1 / e;
            if (null == r || null == e) return r === e;
            r instanceof y && (r = r._wrapped), e instanceof y && (e = e._wrapped);
            var o = c.call(r);
            if (o !== c.call(e)) return !1;
            switch (o) {
              case "[object RegExp]":
              case "[object String]":
                return "" + r == "" + e;

              case "[object Number]":
                return +r != +r ? +e != +e : 0 == +r ? 1 / +r == 1 / e : +r == +e;

              case "[object Date]":
              case "[object Boolean]":
                return +r == +e;
            }
            if (!(o = "[object Array]" === o)) {
                if ("object" != (void 0 === r ? "undefined" : t(r)) || "object" != (void 0 === e ? "undefined" : t(e))) return !1;
                var a = r.constructor, l = e.constructor;
                if (a !== l && !(y.isFunction(a) && a instanceof a && y.isFunction(l) && l instanceof l) && "constructor" in r && "constructor" in e) return !1;
            }
            for (i = i || [], a = (u = u || []).length; a--; ) if (u[a] === r) return i[a] === e;
            if (u.push(r), i.push(e), o) {
                if ((a = r.length) !== e.length) return !1;
                for (;a--; ) if (!n(r[a], e[a], u, i)) return !1;
            } else {
                if (a = (o = y.keys(r)).length, y.keys(e).length !== a) return !1;
                for (;a--; ) if (l = o[a], !y.has(e, l) || !n(r[l], e[l], u, i)) return !1;
            }
            return u.pop(), i.pop(), !0;
        }(n, r);
    }, y.isEmpty = function(n) {
        return null == n || (x(n) && (y.isArray(n) || y.isString(n) || y.isArguments(n)) ? 0 === n.length : 0 === y.keys(n).length);
    }, y.isElement = function(n) {
        return !(!n || 1 !== n.nodeType);
    }, y.isArray = f || function(n) {
        return "[object Array]" === c.call(n);
    }, y.isObject = function(n) {
        var r = void 0 === n ? "undefined" : t(n);
        return "function" === r || "object" === r && !!n;
    }, y.each("Arguments Function String Number Date RegExp Error".split(" "), function(n) {
        y["is" + n] = function(t) {
            return c.call(t) === "[object " + n + "]";
        };
    }), y.isArguments(arguments) || (y.isArguments = function(n) {
        return y.has(n, "callee");
    }), "function" != typeof /./ && "object" != ("undefined" == typeof Int8Array ? "undefined" : t(Int8Array)) && (y.isFunction = function(n) {
        return "function" == typeof n || !1;
    }), y.isFinite = function(n) {
        return isFinite(n) && !isNaN(parseFloat(n));
    }, y.isNaN = function(n) {
        return y.isNumber(n) && n !== +n;
    }, y.isBoolean = function(n) {
        return !0 === n || !1 === n || "[object Boolean]" === c.call(n);
    }, y.isNull = function(n) {
        return null === n;
    }, y.isUndefined = function(n) {
        return void 0 === n;
    }, y.has = function(n, t) {
        return null != n && l.call(n, t);
    }, y.noConflict = function() {
        return root._ = previousUnderscore, this;
    }, y.identity = function(n) {
        return n;
    }, y.constant = function(n) {
        return function() {
            return n;
        };
    }, y.noop = function() {}, y.property = function(n) {
        return function(t) {
            return null == t ? void 0 : t[n];
        };
    }, y.propertyOf = function(n) {
        return null == n ? function() {} : function(t) {
            return n[t];
        };
    }, y.matcher = y.matches = function(n) {
        return n = y.extendOwn({}, n), function(t) {
            return y.isMatch(t, n);
        };
    }, y.times = function(n, t, r) {
        var e = Array(Math.max(0, n));
        for (t = d(t, r, 1), r = 0; r < n; r++) e[r] = t(r);
        return e;
    }, y.random = function(n, t) {
        return null == t && (t = n, n = 0), n + Math.floor(Math.random() * (t - n + 1));
    }, y.now = Date.now || function() {
        return new Date().getTime();
    }, m = y.invert(f = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        '"': "&quot;",
        "'": "&#x27;",
        "`": "&#x60;"
    }), _ = function(n) {
        var t = function(t) {
            return n[t];
        }, r = "(?:" + y.keys(n).join("|") + ")", e = RegExp(r), u = RegExp(r, "g");
        return function(n) {
            return n = null == n ? "" : "" + n, e.test(n) ? n.replace(u, t) : n;
        };
    }, y.escape = _(f), y.unescape = _(m), y.result = function(n, t, r) {
        return void 0 === (t = null == n ? void 0 : n[t]) && (t = r), y.isFunction(t) ? t.call(n) : t;
    };
    var k = 0;
    y.uniqueId = function(n) {
        var t = ++k + "";
        return n ? n + t : t;
    }, y.templateSettings = {
        evaluate: /<%([\s\S]+?)%>/g,
        interpolate: /<%=([\s\S]+?)%>/g,
        escape: /<%-([\s\S]+?)%>/g
    };
    var F = /(.)^/, E = {
        "'": "'",
        "\\": "\\",
        "\r": "r",
        "\n": "n",
        "\u2028": "u2028",
        "\u2029": "u2029"
    }, I = /\\|'|\r|\n|\u2028|\u2029/g, M = function(n) {
        return "\\" + E[n];
    };
    y.template = function(n, t, r) {
        !t && r && (t = r), t = y.defaults({}, t, y.templateSettings), r = RegExp([ (t.escape || F).source, (t.interpolate || F).source, (t.evaluate || F).source ].join("|") + "|$", "g");
        var e = 0, u = "__p+='";
        n.replace(r, function(t, r, i, o, a) {
            return u += n.slice(e, a).replace(I, M), e = a + t.length, r ? u += "'+\n((__t=(" + r + "))==null?'':_.escape(__t))+\n'" : i ? u += "'+\n((__t=(" + i + "))==null?'':__t)+\n'" : o && (u += "';\n" + o + "\n__p+='"), 
            t;
        }), u += "';\n", t.variable || (u = "with(obj||{}){\n" + u + "}\n"), u = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + u + "return __p;\n";
        try {
            var i = new Function(t.variable || "obj", "_", u);
        } catch (t) {
            throw t.source = u, t;
        }
        return (r = function(n) {
            return i.call(this, n, y);
        }).source = "function(" + (t.variable || "obj") + "){\n" + u + "}", r;
    }, y.chain = function(n) {
        return (n = y(n))._chain = !0, n;
    };
    var N = function(n, t) {
        return n._chain ? y(t).chain() : t;
    };
    y.mixin = function(n) {
        y.each(y.functions(n), function(t) {
            var r = y[t] = n[t];
            y.prototype[t] = function() {
                var n = [ this._wrapped ];
                return o.apply(n, arguments), N(this, r.apply(y, n));
            };
        });
    }, y.mixin(y), y.each("pop push reverse shift sort splice unshift".split(" "), function(n) {
        var t = u[n];
        y.prototype[n] = function() {
            var r = this._wrapped;
            return t.apply(r, arguments), "shift" !== n && "splice" !== n || 0 !== r.length || delete r[0], 
            N(this, r);
        };
    }), y.each([ "concat", "join", "slice" ], function(n) {
        var t = u[n];
        y.prototype[n] = function() {
            return N(this, t.apply(this._wrapped, arguments));
        };
    }), y.prototype.valueOf = y.prototype.toJSON = y.prototype.value = function() {
        return this._wrapped;
    }, y.prototype.toString = function() {
        return "" + this._wrapped;
    };
}).call(void 0);