diff --git a/middlewares/session.js b/middlewares/session.js
index 30606379f4244f39d70fd0e14a156b39ae5ed57f..cc5be986d3425afba165ecac1b11b10ff36af435 100644
--- a/middlewares/session.js
+++ b/middlewares/session.js
@@ -16,7 +16,8 @@ module.exports = (req, res, next) => {
         else db.User.findOne({where: {_id: session.user_id}})
           .then(user => {
             if (!user) {
-              res.clearCookie('sdsession');
+              var domain = (process.env.NODE_ENV == "production") ? new URL(config.get('endpoint')).hostname : req.headers.hostname;
+              res.clearCookie('sdsession', { domain: domain });
 
               if (req.accepts("text/html")) {
                 res.send("Please clear your cookies and try again.");
diff --git a/public/javascripts/spacedeck.js b/public/javascripts/spacedeck.js
deleted file mode 100644
index d388adb23f317f1a7c66279dbef5b8bef0e2547e..0000000000000000000000000000000000000000
--- a/public/javascripts/spacedeck.js
+++ /dev/null
@@ -1,15931 +0,0 @@
-!function(e, t) {
-    "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function(e) {
-        if (!e.document) throw new Error("jQuery requires a window with a document");
-        return t(e);
-    } : t(e);
-}("undefined" != typeof window ? window : this, function(e, t) {
-    function n(e) {
-        var t = "length" in e && e.length, n = Z.type(e);
-        return "function" !== n && !Z.isWindow(e) && (!(1 !== e.nodeType || !t) || ("array" === n || 0 === t || "number" == typeof t && t > 0 && t - 1 in e));
-    }
-    function r(e, t, n) {
-        if (Z.isFunction(t)) return Z.grep(e, function(e, r) {
-            return !!t.call(e, r, e) !== n;
-        });
-        if (t.nodeType) return Z.grep(e, function(e) {
-            return e === t !== n;
-        });
-        if ("string" == typeof t) {
-            if (ae.test(t)) return Z.filter(t, e, n);
-            t = Z.filter(t, e);
-        }
-        return Z.grep(e, function(e) {
-            return U.call(t, e) >= 0 !== n;
-        });
-    }
-    function i(e, t) {
-        for (;(e = e[t]) && 1 !== e.nodeType; ) ;
-        return e;
-    }
-    function o(e) {
-        var t = he[e] = {};
-        return Z.each(e.match(de) || [], function(e, n) {
-            t[n] = !0;
-        }), t;
-    }
-    function s() {
-        J.removeEventListener("DOMContentLoaded", s, !1), e.removeEventListener("load", s, !1), 
-        Z.ready();
-    }
-    function a() {
-        Object.defineProperty(this.cache = {}, 0, {
-            get: function() {
-                return {};
-            }
-        }), this.expando = Z.expando + a.uid++;
-    }
-    function u(e, t, n) {
-        var r;
-        if (void 0 === n && 1 === e.nodeType) if (r = "data-" + t.replace(be, "-$1").toLowerCase(), 
-        n = e.getAttribute(r), "string" == typeof n) {
-            try {
-                n = "true" === n || "false" !== n && ("null" === n ? null : +n + "" === n ? +n : xe.test(n) ? Z.parseJSON(n) : n);
-            } catch (i) {}
-            ye.set(e, t, n);
-        } else n = void 0;
-        return n;
-    }
-    function l() {
-        return !0;
-    }
-    function c() {
-        return !1;
-    }
-    function f() {
-        try {
-            return J.activeElement;
-        } catch (e) {}
-    }
-    function p(e, t) {
-        return Z.nodeName(e, "table") && Z.nodeName(11 !== t.nodeType ? t : t.firstChild, "tr") ? e.getElementsByTagName("tbody")[0] || e.appendChild(e.ownerDocument.createElement("tbody")) : e;
-    }
-    function d(e) {
-        return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e;
-    }
-    function h(e) {
-        var t = Pe.exec(e.type);
-        return t ? e.type = t[1] : e.removeAttribute("type"), e;
-    }
-    function g(e, t) {
-        for (var n = 0, r = e.length; r > n; n++) ve.set(e[n], "globalEval", !t || ve.get(t[n], "globalEval"));
-    }
-    function m(e, t) {
-        var n, r, i, o, s, a, u, l;
-        if (1 === t.nodeType) {
-            if (ve.hasData(e) && (o = ve.access(e), s = ve.set(t, o), l = o.events)) {
-                delete s.handle, s.events = {};
-                for (i in l) for (n = 0, r = l[i].length; r > n; n++) Z.event.add(t, i, l[i][n]);
-            }
-            ye.hasData(e) && (a = ye.access(e), u = Z.extend({}, a), ye.set(t, u));
-        }
-    }
-    function v(e, t) {
-        var n = e.getElementsByTagName ? e.getElementsByTagName(t || "*") : e.querySelectorAll ? e.querySelectorAll(t || "*") : [];
-        return void 0 === t || t && Z.nodeName(e, t) ? Z.merge([ e ], n) : n;
-    }
-    function y(e, t) {
-        var n = t.nodeName.toLowerCase();
-        "input" === n && Ne.test(e.type) ? t.checked = e.checked : ("input" === n || "textarea" === n) && (t.defaultValue = e.defaultValue);
-    }
-    function x(t, n) {
-        var r, i = Z(n.createElement(t)).appendTo(n.body), o = e.getDefaultComputedStyle && (r = e.getDefaultComputedStyle(i[0])) ? r.display : Z.css(i[0], "display");
-        return i.detach(), o;
-    }
-    function b(e) {
-        var t = J, n = $e[e];
-        return n || (n = x(e, t), "none" !== n && n || (We = (We || Z("<iframe frameborder='0' width='0' height='0'/>")).appendTo(t.documentElement), 
-        t = We[0].contentDocument, t.write(), t.close(), n = x(e, t), We.detach()), $e[e] = n), 
-        n;
-    }
-    function w(e, t, n) {
-        var r, i, o, s, a = e.style;
-        return n = n || _e(e), n && (s = n.getPropertyValue(t) || n[t]), n && ("" !== s || Z.contains(e.ownerDocument, e) || (s = Z.style(e, t)), 
-        Be.test(s) && Ie.test(t) && (r = a.width, i = a.minWidth, o = a.maxWidth, a.minWidth = a.maxWidth = a.width = s, 
-        s = n.width, a.width = r, a.minWidth = i, a.maxWidth = o)), void 0 !== s ? s + "" : s;
-    }
-    function T(e, t) {
-        return {
-            get: function() {
-                return e() ? void delete this.get : (this.get = t).apply(this, arguments);
-            }
-        };
-    }
-    function C(e, t) {
-        if (t in e) return t;
-        for (var n = t[0].toUpperCase() + t.slice(1), r = t, i = Ge.length; i--; ) if (t = Ge[i] + n, 
-        t in e) return t;
-        return r;
-    }
-    function N(e, t, n) {
-        var r = Xe.exec(t);
-        return r ? Math.max(0, r[1] - (n || 0)) + (r[2] || "px") : t;
-    }
-    function k(e, t, n, r, i) {
-        for (var o = n === (r ? "border" : "content") ? 4 : "width" === t ? 1 : 0, s = 0; 4 > o; o += 2) "margin" === n && (s += Z.css(e, n + Te[o], !0, i)), 
-        r ? ("content" === n && (s -= Z.css(e, "padding" + Te[o], !0, i)), "margin" !== n && (s -= Z.css(e, "border" + Te[o] + "Width", !0, i))) : (s += Z.css(e, "padding" + Te[o], !0, i), 
-        "padding" !== n && (s += Z.css(e, "border" + Te[o] + "Width", !0, i)));
-        return s;
-    }
-    function E(e, t, n) {
-        var r = !0, i = "width" === t ? e.offsetWidth : e.offsetHeight, o = _e(e), s = "border-box" === Z.css(e, "boxSizing", !1, o);
-        if (0 >= i || null == i) {
-            if (i = w(e, t, o), (0 > i || null == i) && (i = e.style[t]), Be.test(i)) return i;
-            r = s && (Q.boxSizingReliable() || i === e.style[t]), i = parseFloat(i) || 0;
-        }
-        return i + k(e, t, n || (s ? "border" : "content"), r, o) + "px";
-    }
-    function S(e, t) {
-        for (var n, r, i, o = [], s = 0, a = e.length; a > s; s++) r = e[s], r.style && (o[s] = ve.get(r, "olddisplay"), 
-        n = r.style.display, t ? (o[s] || "none" !== n || (r.style.display = ""), "" === r.style.display && Ce(r) && (o[s] = ve.access(r, "olddisplay", b(r.nodeName)))) : (i = Ce(r), 
-        "none" === n && i || ve.set(r, "olddisplay", i ? n : Z.css(r, "display"))));
-        for (s = 0; a > s; s++) r = e[s], r.style && (t && "none" !== r.style.display && "" !== r.style.display || (r.style.display = t ? o[s] || "" : "none"));
-        return e;
-    }
-    function D(e, t, n, r, i) {
-        return new D.prototype.init(e, t, n, r, i);
-    }
-    function j() {
-        return setTimeout(function() {
-            Qe = void 0;
-        }), Qe = Z.now();
-    }
-    function A(e, t) {
-        var n, r = 0, i = {
-            height: e
-        };
-        for (t = t ? 1 : 0; 4 > r; r += 2 - t) n = Te[r], i["margin" + n] = i["padding" + n] = e;
-        return t && (i.opacity = i.width = e), i;
-    }
-    function L(e, t, n) {
-        for (var r, i = (nt[t] || []).concat(nt["*"]), o = 0, s = i.length; s > o; o++) if (r = i[o].call(n, t, e)) return r;
-    }
-    function q(e, t, n) {
-        var r, i, o, s, a, u, l, c, f = this, p = {}, d = e.style, h = e.nodeType && Ce(e), g = ve.get(e, "fxshow");
-        n.queue || (a = Z._queueHooks(e, "fx"), null == a.unqueued && (a.unqueued = 0, u = a.empty.fire, 
-        a.empty.fire = function() {
-            a.unqueued || u();
-        }), a.unqueued++, f.always(function() {
-            f.always(function() {
-                a.unqueued--, Z.queue(e, "fx").length || a.empty.fire();
-            });
-        })), 1 === e.nodeType && ("height" in t || "width" in t) && (n.overflow = [ d.overflow, d.overflowX, d.overflowY ], 
-        l = Z.css(e, "display"), c = "none" === l ? ve.get(e, "olddisplay") || b(e.nodeName) : l, 
-        "inline" === c && "none" === Z.css(e, "float") && (d.display = "inline-block")), 
-        n.overflow && (d.overflow = "hidden", f.always(function() {
-            d.overflow = n.overflow[0], d.overflowX = n.overflow[1], d.overflowY = n.overflow[2];
-        }));
-        for (r in t) if (i = t[r], Ke.exec(i)) {
-            if (delete t[r], o = o || "toggle" === i, i === (h ? "hide" : "show")) {
-                if ("show" !== i || !g || void 0 === g[r]) continue;
-                h = !0;
-            }
-            p[r] = g && g[r] || Z.style(e, r);
-        } else l = void 0;
-        if (Z.isEmptyObject(p)) "inline" === ("none" === l ? b(e.nodeName) : l) && (d.display = l); else {
-            g ? "hidden" in g && (h = g.hidden) : g = ve.access(e, "fxshow", {}), o && (g.hidden = !h), 
-            h ? Z(e).show() : f.done(function() {
-                Z(e).hide();
-            }), f.done(function() {
-                var t;
-                ve.remove(e, "fxshow");
-                for (t in p) Z.style(e, t, p[t]);
-            });
-            for (r in p) s = L(h ? g[r] : 0, r, f), r in g || (g[r] = s.start, h && (s.end = s.start, 
-            s.start = "width" === r || "height" === r ? 1 : 0));
-        }
-    }
-    function H(e, t) {
-        var n, r, i, o, s;
-        for (n in e) if (r = Z.camelCase(n), i = t[r], o = e[n], Z.isArray(o) && (i = o[1], 
-        o = e[n] = o[0]), n !== r && (e[r] = o, delete e[n]), s = Z.cssHooks[r], s && "expand" in s) {
-            o = s.expand(o), delete e[r];
-            for (n in o) n in e || (e[n] = o[n], t[n] = i);
-        } else t[r] = i;
-    }
-    function O(e, t, n) {
-        var r, i, o = 0, s = tt.length, a = Z.Deferred().always(function() {
-            delete u.elem;
-        }), u = function() {
-            if (i) return !1;
-            for (var t = Qe || j(), n = Math.max(0, l.startTime + l.duration - t), r = n / l.duration || 0, o = 1 - r, s = 0, u = l.tweens.length; u > s; s++) l.tweens[s].run(o);
-            return a.notifyWith(e, [ l, o, n ]), 1 > o && u ? n : (a.resolveWith(e, [ l ]), 
-            !1);
-        }, l = a.promise({
-            elem: e,
-            props: Z.extend({}, t),
-            opts: Z.extend(!0, {
-                specialEasing: {}
-            }, n),
-            originalProperties: t,
-            originalOptions: n,
-            startTime: Qe || j(),
-            duration: n.duration,
-            tweens: [],
-            createTween: function(t, n) {
-                var r = Z.Tween(e, l.opts, t, n, l.opts.specialEasing[t] || l.opts.easing);
-                return l.tweens.push(r), r;
-            },
-            stop: function(t) {
-                var n = 0, r = t ? l.tweens.length : 0;
-                if (i) return this;
-                for (i = !0; r > n; n++) l.tweens[n].run(1);
-                return t ? a.resolveWith(e, [ l, t ]) : a.rejectWith(e, [ l, t ]), this;
-            }
-        }), c = l.props;
-        for (H(c, l.opts.specialEasing); s > o; o++) if (r = tt[o].call(l, e, c, l.opts)) return r;
-        return Z.map(c, L, l), Z.isFunction(l.opts.start) && l.opts.start.call(e, l), Z.fx.timer(Z.extend(u, {
-            elem: e,
-            anim: l,
-            queue: l.opts.queue
-        })), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always);
-    }
-    function F(e) {
-        return function(t, n) {
-            "string" != typeof t && (n = t, t = "*");
-            var r, i = 0, o = t.toLowerCase().match(de) || [];
-            if (Z.isFunction(n)) for (;r = o[i++]; ) "+" === r[0] ? (r = r.slice(1) || "*", 
-            (e[r] = e[r] || []).unshift(n)) : (e[r] = e[r] || []).push(n);
-        };
-    }
-    function P(e, t, n, r) {
-        function i(a) {
-            var u;
-            return o[a] = !0, Z.each(e[a] || [], function(e, a) {
-                var l = a(t, n, r);
-                return "string" != typeof l || s || o[l] ? s ? !(u = l) : void 0 : (t.dataTypes.unshift(l), 
-                i(l), !1);
-            }), u;
-        }
-        var o = {}, s = e === xt;
-        return i(t.dataTypes[0]) || !o["*"] && i("*");
-    }
-    function R(e, t) {
-        var n, r, i = Z.ajaxSettings.flatOptions || {};
-        for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]);
-        return r && Z.extend(!0, e, r), e;
-    }
-    function M(e, t, n) {
-        for (var r, i, o, s, a = e.contents, u = e.dataTypes; "*" === u[0]; ) u.shift(), 
-        void 0 === r && (r = e.mimeType || t.getResponseHeader("Content-Type"));
-        if (r) for (i in a) if (a[i] && a[i].test(r)) {
-            u.unshift(i);
-            break;
-        }
-        if (u[0] in n) o = u[0]; else {
-            for (i in n) {
-                if (!u[0] || e.converters[i + " " + u[0]]) {
-                    o = i;
-                    break;
-                }
-                s || (s = i);
-            }
-            o = o || s;
-        }
-        return o ? (o !== u[0] && u.unshift(o), n[o]) : void 0;
-    }
-    function W(e, t, n, r) {
-        var i, o, s, a, u, l = {}, c = e.dataTypes.slice();
-        if (c[1]) for (s in e.converters) l[s.toLowerCase()] = e.converters[s];
-        for (o = c.shift(); o; ) if (e.responseFields[o] && (n[e.responseFields[o]] = t), 
-        !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), u = o, o = c.shift()) if ("*" === o) o = u; else if ("*" !== u && u !== o) {
-            if (s = l[u + " " + o] || l["* " + o], !s) for (i in l) if (a = i.split(" "), a[1] === o && (s = l[u + " " + a[0]] || l["* " + a[0]])) {
-                s === !0 ? s = l[i] : l[i] !== !0 && (o = a[0], c.unshift(a[1]));
-                break;
-            }
-            if (s !== !0) if (s && e["throws"]) t = s(t); else try {
-                t = s(t);
-            } catch (f) {
-                return {
-                    state: "parsererror",
-                    error: s ? f : "No conversion from " + u + " to " + o
-                };
-            }
-        }
-        return {
-            state: "success",
-            data: t
-        };
-    }
-    function $(e, t, n, r) {
-        var i;
-        if (Z.isArray(t)) Z.each(t, function(t, i) {
-            n || Nt.test(e) ? r(e, i) : $(e + "[" + ("object" == typeof i ? t : "") + "]", i, n, r);
-        }); else if (n || "object" !== Z.type(t)) r(e, t); else for (i in t) $(e + "[" + i + "]", t[i], n, r);
-    }
-    function I(e) {
-        return Z.isWindow(e) ? e : 9 === e.nodeType && e.defaultView;
-    }
-    var B = [], _ = B.slice, z = B.concat, X = B.push, U = B.indexOf, V = {}, Y = V.toString, G = V.hasOwnProperty, Q = {}, J = e.document, K = "2.1.4", Z = function(e, t) {
-        return new Z.fn.init(e, t);
-    }, ee = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, te = /^-ms-/, ne = /-([\da-z])/gi, re = function(e, t) {
-        return t.toUpperCase();
-    };
-    Z.fn = Z.prototype = {
-        jquery: K,
-        constructor: Z,
-        selector: "",
-        length: 0,
-        toArray: function() {
-            return _.call(this);
-        },
-        get: function(e) {
-            return null != e ? 0 > e ? this[e + this.length] : this[e] : _.call(this);
-        },
-        pushStack: function(e) {
-            var t = Z.merge(this.constructor(), e);
-            return t.prevObject = this, t.context = this.context, t;
-        },
-        each: function(e, t) {
-            return Z.each(this, e, t);
-        },
-        map: function(e) {
-            return this.pushStack(Z.map(this, function(t, n) {
-                return e.call(t, n, t);
-            }));
-        },
-        slice: function() {
-            return this.pushStack(_.apply(this, arguments));
-        },
-        first: function() {
-            return this.eq(0);
-        },
-        last: function() {
-            return this.eq(-1);
-        },
-        eq: function(e) {
-            var t = this.length, n = +e + (0 > e ? t : 0);
-            return this.pushStack(n >= 0 && t > n ? [ this[n] ] : []);
-        },
-        end: function() {
-            return this.prevObject || this.constructor(null);
-        },
-        push: X,
-        sort: B.sort,
-        splice: B.splice
-    }, Z.extend = Z.fn.extend = function() {
-        var e, t, n, r, i, o, s = arguments[0] || {}, a = 1, u = arguments.length, l = !1;
-        for ("boolean" == typeof s && (l = s, s = arguments[a] || {}, a++), "object" == typeof s || Z.isFunction(s) || (s = {}), 
-        a === u && (s = this, a--); u > a; a++) if (null != (e = arguments[a])) for (t in e) n = s[t], 
-        r = e[t], s !== r && (l && r && (Z.isPlainObject(r) || (i = Z.isArray(r))) ? (i ? (i = !1, 
-        o = n && Z.isArray(n) ? n : []) : o = n && Z.isPlainObject(n) ? n : {}, s[t] = Z.extend(l, o, r)) : void 0 !== r && (s[t] = r));
-        return s;
-    }, Z.extend({
-        expando: "jQuery" + (K + Math.random()).replace(/\D/g, ""),
-        isReady: !0,
-        error: function(e) {
-            throw new Error(e);
-        },
-        noop: function() {},
-        isFunction: function(e) {
-            return "function" === Z.type(e);
-        },
-        isArray: Array.isArray,
-        isWindow: function(e) {
-            return null != e && e === e.window;
-        },
-        isNumeric: function(e) {
-            return !Z.isArray(e) && e - parseFloat(e) + 1 >= 0;
-        },
-        isPlainObject: function(e) {
-            return "object" === Z.type(e) && !e.nodeType && !Z.isWindow(e) && !(e.constructor && !G.call(e.constructor.prototype, "isPrototypeOf"));
-        },
-        isEmptyObject: function(e) {
-            var t;
-            for (t in e) return !1;
-            return !0;
-        },
-        type: function(e) {
-            return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? V[Y.call(e)] || "object" : typeof e;
-        },
-        globalEval: function(e) {
-            var t, n = eval;
-            e = Z.trim(e), e && (1 === e.indexOf("use strict") ? (t = J.createElement("script"), 
-            t.text = e, J.head.appendChild(t).parentNode.removeChild(t)) : n(e));
-        },
-        camelCase: function(e) {
-            return e.replace(te, "ms-").replace(ne, re);
-        },
-        nodeName: function(e, t) {
-            return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase();
-        },
-        each: function(e, t, r) {
-            var i, o = 0, s = e.length, a = n(e);
-            if (r) {
-                if (a) for (;s > o && (i = t.apply(e[o], r), i !== !1); o++) ; else for (o in e) if (i = t.apply(e[o], r), 
-                i === !1) break;
-            } else if (a) for (;s > o && (i = t.call(e[o], o, e[o]), i !== !1); o++) ; else for (o in e) if (i = t.call(e[o], o, e[o]), 
-            i === !1) break;
-            return e;
-        },
-        trim: function(e) {
-            return null == e ? "" : (e + "").replace(ee, "");
-        },
-        makeArray: function(e, t) {
-            var r = t || [];
-            return null != e && (n(Object(e)) ? Z.merge(r, "string" == typeof e ? [ e ] : e) : X.call(r, e)), 
-            r;
-        },
-        inArray: function(e, t, n) {
-            return null == t ? -1 : U.call(t, e, n);
-        },
-        merge: function(e, t) {
-            for (var n = +t.length, r = 0, i = e.length; n > r; r++) e[i++] = t[r];
-            return e.length = i, e;
-        },
-        grep: function(e, t, n) {
-            for (var r, i = [], o = 0, s = e.length, a = !n; s > o; o++) r = !t(e[o], o), r !== a && i.push(e[o]);
-            return i;
-        },
-        map: function(e, t, r) {
-            var i, o = 0, s = e.length, a = n(e), u = [];
-            if (a) for (;s > o; o++) i = t(e[o], o, r), null != i && u.push(i); else for (o in e) i = t(e[o], o, r), 
-            null != i && u.push(i);
-            return z.apply([], u);
-        },
-        guid: 1,
-        proxy: function(e, t) {
-            var n, r, i;
-            return "string" == typeof t && (n = e[t], t = e, e = n), Z.isFunction(e) ? (r = _.call(arguments, 2), 
-            i = function() {
-                return e.apply(t || this, r.concat(_.call(arguments)));
-            }, i.guid = e.guid = e.guid || Z.guid++, i) : void 0;
-        },
-        now: Date.now,
-        support: Q
-    }), Z.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(e, t) {
-        V["[object " + t + "]"] = t.toLowerCase();
-    });
-    var ie = function(e) {
-        function t(e, t, n, r) {
-            var i, o, s, a, u, l, f, d, h, g;
-            if ((t ? t.ownerDocument || t : $) !== q && L(t), t = t || q, n = n || [], a = t.nodeType, 
-            "string" != typeof e || !e || 1 !== a && 9 !== a && 11 !== a) return n;
-            if (!r && O) {
-                if (11 !== a && (i = ye.exec(e))) if (s = i[1]) {
-                    if (9 === a) {
-                        if (o = t.getElementById(s), !o || !o.parentNode) return n;
-                        if (o.id === s) return n.push(o), n;
-                    } else if (t.ownerDocument && (o = t.ownerDocument.getElementById(s)) && M(t, o) && o.id === s) return n.push(o), 
-                    n;
-                } else {
-                    if (i[2]) return K.apply(n, t.getElementsByTagName(e)), n;
-                    if ((s = i[3]) && w.getElementsByClassName) return K.apply(n, t.getElementsByClassName(s)), 
-                    n;
-                }
-                if (w.qsa && (!F || !F.test(e))) {
-                    if (d = f = W, h = t, g = 1 !== a && e, 1 === a && "object" !== t.nodeName.toLowerCase()) {
-                        for (l = k(e), (f = t.getAttribute("id")) ? d = f.replace(be, "\\$&") : t.setAttribute("id", d), 
-                        d = "[id='" + d + "'] ", u = l.length; u--; ) l[u] = d + p(l[u]);
-                        h = xe.test(e) && c(t.parentNode) || t, g = l.join(",");
-                    }
-                    if (g) try {
-                        return K.apply(n, h.querySelectorAll(g)), n;
-                    } catch (m) {} finally {
-                        f || t.removeAttribute("id");
-                    }
-                }
-            }
-            return S(e.replace(ue, "$1"), t, n, r);
-        }
-        function n() {
-            function e(n, r) {
-                return t.push(n + " ") > T.cacheLength && delete e[t.shift()], e[n + " "] = r;
-            }
-            var t = [];
-            return e;
-        }
-        function r(e) {
-            return e[W] = !0, e;
-        }
-        function i(e) {
-            var t = q.createElement("div");
-            try {
-                return !!e(t);
-            } catch (n) {
-                return !1;
-            } finally {
-                t.parentNode && t.parentNode.removeChild(t), t = null;
-            }
-        }
-        function o(e, t) {
-            for (var n = e.split("|"), r = e.length; r--; ) T.attrHandle[n[r]] = t;
-        }
-        function s(e, t) {
-            var n = t && e, r = n && 1 === e.nodeType && 1 === t.nodeType && (~t.sourceIndex || V) - (~e.sourceIndex || V);
-            if (r) return r;
-            if (n) for (;n = n.nextSibling; ) if (n === t) return -1;
-            return e ? 1 : -1;
-        }
-        function a(e) {
-            return function(t) {
-                var n = t.nodeName.toLowerCase();
-                return "input" === n && t.type === e;
-            };
-        }
-        function u(e) {
-            return function(t) {
-                var n = t.nodeName.toLowerCase();
-                return ("input" === n || "button" === n) && t.type === e;
-            };
-        }
-        function l(e) {
-            return r(function(t) {
-                return t = +t, r(function(n, r) {
-                    for (var i, o = e([], n.length, t), s = o.length; s--; ) n[i = o[s]] && (n[i] = !(r[i] = n[i]));
-                });
-            });
-        }
-        function c(e) {
-            return e && "undefined" != typeof e.getElementsByTagName && e;
-        }
-        function f() {}
-        function p(e) {
-            for (var t = 0, n = e.length, r = ""; n > t; t++) r += e[t].value;
-            return r;
-        }
-        function d(e, t, n) {
-            var r = t.dir, i = n && "parentNode" === r, o = B++;
-            return t.first ? function(t, n, o) {
-                for (;t = t[r]; ) if (1 === t.nodeType || i) return e(t, n, o);
-            } : function(t, n, s) {
-                var a, u, l = [ I, o ];
-                if (s) {
-                    for (;t = t[r]; ) if ((1 === t.nodeType || i) && e(t, n, s)) return !0;
-                } else for (;t = t[r]; ) if (1 === t.nodeType || i) {
-                    if (u = t[W] || (t[W] = {}), (a = u[r]) && a[0] === I && a[1] === o) return l[2] = a[2];
-                    if (u[r] = l, l[2] = e(t, n, s)) return !0;
-                }
-            };
-        }
-        function h(e) {
-            return e.length > 1 ? function(t, n, r) {
-                for (var i = e.length; i--; ) if (!e[i](t, n, r)) return !1;
-                return !0;
-            } : e[0];
-        }
-        function g(e, n, r) {
-            for (var i = 0, o = n.length; o > i; i++) t(e, n[i], r);
-            return r;
-        }
-        function m(e, t, n, r, i) {
-            for (var o, s = [], a = 0, u = e.length, l = null != t; u > a; a++) (o = e[a]) && (!n || n(o, r, i)) && (s.push(o), 
-            l && t.push(a));
-            return s;
-        }
-        function v(e, t, n, i, o, s) {
-            return i && !i[W] && (i = v(i)), o && !o[W] && (o = v(o, s)), r(function(r, s, a, u) {
-                var l, c, f, p = [], d = [], h = s.length, v = r || g(t || "*", a.nodeType ? [ a ] : a, []), y = !e || !r && t ? v : m(v, p, e, a, u), x = n ? o || (r ? e : h || i) ? [] : s : y;
-                if (n && n(y, x, a, u), i) for (l = m(x, d), i(l, [], a, u), c = l.length; c--; ) (f = l[c]) && (x[d[c]] = !(y[d[c]] = f));
-                if (r) {
-                    if (o || e) {
-                        if (o) {
-                            for (l = [], c = x.length; c--; ) (f = x[c]) && l.push(y[c] = f);
-                            o(null, x = [], l, u);
-                        }
-                        for (c = x.length; c--; ) (f = x[c]) && (l = o ? ee(r, f) : p[c]) > -1 && (r[l] = !(s[l] = f));
-                    }
-                } else x = m(x === s ? x.splice(h, x.length) : x), o ? o(null, s, x, u) : K.apply(s, x);
-            });
-        }
-        function y(e) {
-            for (var t, n, r, i = e.length, o = T.relative[e[0].type], s = o || T.relative[" "], a = o ? 1 : 0, u = d(function(e) {
-                return e === t;
-            }, s, !0), l = d(function(e) {
-                return ee(t, e) > -1;
-            }, s, !0), c = [ function(e, n, r) {
-                var i = !o && (r || n !== D) || ((t = n).nodeType ? u(e, n, r) : l(e, n, r));
-                return t = null, i;
-            } ]; i > a; a++) if (n = T.relative[e[a].type]) c = [ d(h(c), n) ]; else {
-                if (n = T.filter[e[a].type].apply(null, e[a].matches), n[W]) {
-                    for (r = ++a; i > r && !T.relative[e[r].type]; r++) ;
-                    return v(a > 1 && h(c), a > 1 && p(e.slice(0, a - 1).concat({
-                        value: " " === e[a - 2].type ? "*" : ""
-                    })).replace(ue, "$1"), n, r > a && y(e.slice(a, r)), i > r && y(e = e.slice(r)), i > r && p(e));
-                }
-                c.push(n);
-            }
-            return h(c);
-        }
-        function x(e, n) {
-            var i = n.length > 0, o = e.length > 0, s = function(r, s, a, u, l) {
-                var c, f, p, d = 0, h = "0", g = r && [], v = [], y = D, x = r || o && T.find.TAG("*", l), b = I += null == y ? 1 : Math.random() || .1, w = x.length;
-                for (l && (D = s !== q && s); h !== w && null != (c = x[h]); h++) {
-                    if (o && c) {
-                        for (f = 0; p = e[f++]; ) if (p(c, s, a)) {
-                            u.push(c);
-                            break;
-                        }
-                        l && (I = b);
-                    }
-                    i && ((c = !p && c) && d--, r && g.push(c));
-                }
-                if (d += h, i && h !== d) {
-                    for (f = 0; p = n[f++]; ) p(g, v, s, a);
-                    if (r) {
-                        if (d > 0) for (;h--; ) g[h] || v[h] || (v[h] = Q.call(u));
-                        v = m(v);
-                    }
-                    K.apply(u, v), l && !r && v.length > 0 && d + n.length > 1 && t.uniqueSort(u);
-                }
-                return l && (I = b, D = y), g;
-            };
-            return i ? r(s) : s;
-        }
-        var b, w, T, C, N, k, E, S, D, j, A, L, q, H, O, F, P, R, M, W = "sizzle" + 1 * new Date(), $ = e.document, I = 0, B = 0, _ = n(), z = n(), X = n(), U = function(e, t) {
-            return e === t && (A = !0), 0;
-        }, V = 1 << 31, Y = {}.hasOwnProperty, G = [], Q = G.pop, J = G.push, K = G.push, Z = G.slice, ee = function(e, t) {
-            for (var n = 0, r = e.length; r > n; n++) if (e[n] === t) return n;
-            return -1;
-        }, te = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", ne = "[\\x20\\t\\r\\n\\f]", re = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", ie = re.replace("w", "w#"), oe = "\\[" + ne + "*(" + re + ")(?:" + ne + "*([*^$|!~]?=)" + ne + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + ie + "))|)" + ne + "*\\]", se = ":(" + re + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + oe + ")*)|.*)\\)|)", ae = new RegExp(ne + "+", "g"), ue = new RegExp("^" + ne + "+|((?:^|[^\\\\])(?:\\\\.)*)" + ne + "+$", "g"), le = new RegExp("^" + ne + "*," + ne + "*"), ce = new RegExp("^" + ne + "*([>+~]|" + ne + ")" + ne + "*"), fe = new RegExp("=" + ne + "*([^\\]'\"]*?)" + ne + "*\\]", "g"), pe = new RegExp(se), de = new RegExp("^" + ie + "$"), he = {
-            ID: new RegExp("^#(" + re + ")"),
-            CLASS: new RegExp("^\\.(" + re + ")"),
-            TAG: new RegExp("^(" + re.replace("w", "w*") + ")"),
-            ATTR: new RegExp("^" + oe),
-            PSEUDO: new RegExp("^" + se),
-            CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + ne + "*(even|odd|(([+-]|)(\\d*)n|)" + ne + "*(?:([+-]|)" + ne + "*(\\d+)|))" + ne + "*\\)|)", "i"),
-            bool: new RegExp("^(?:" + te + ")$", "i"),
-            needsContext: new RegExp("^" + ne + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + ne + "*((?:-\\d)?\\d*)" + ne + "*\\)|)(?=[^-]|$)", "i")
-        }, ge = /^(?:input|select|textarea|button)$/i, me = /^h\d$/i, ve = /^[^{]+\{\s*\[native \w/, ye = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, xe = /[+~]/, be = /'|\\/g, we = new RegExp("\\\\([\\da-f]{1,6}" + ne + "?|(" + ne + ")|.)", "ig"), Te = function(e, t, n) {
-            var r = "0x" + t - 65536;
-            return r !== r || n ? t : 0 > r ? String.fromCharCode(r + 65536) : String.fromCharCode(r >> 10 | 55296, 1023 & r | 56320);
-        }, Ce = function() {
-            L();
-        };
-        try {
-            K.apply(G = Z.call($.childNodes), $.childNodes), G[$.childNodes.length].nodeType;
-        } catch (Ne) {
-            K = {
-                apply: G.length ? function(e, t) {
-                    J.apply(e, Z.call(t));
-                } : function(e, t) {
-                    for (var n = e.length, r = 0; e[n++] = t[r++]; ) ;
-                    e.length = n - 1;
-                }
-            };
-        }
-        w = t.support = {}, N = t.isXML = function(e) {
-            var t = e && (e.ownerDocument || e).documentElement;
-            return !!t && "HTML" !== t.nodeName;
-        }, L = t.setDocument = function(e) {
-            var t, n, r = e ? e.ownerDocument || e : $;
-            return r !== q && 9 === r.nodeType && r.documentElement ? (q = r, H = r.documentElement, 
-            n = r.defaultView, n && n !== n.top && (n.addEventListener ? n.addEventListener("unload", Ce, !1) : n.attachEvent && n.attachEvent("onunload", Ce)), 
-            O = !N(r), w.attributes = i(function(e) {
-                return e.className = "i", !e.getAttribute("className");
-            }), w.getElementsByTagName = i(function(e) {
-                return e.appendChild(r.createComment("")), !e.getElementsByTagName("*").length;
-            }), w.getElementsByClassName = ve.test(r.getElementsByClassName), w.getById = i(function(e) {
-                return H.appendChild(e).id = W, !r.getElementsByName || !r.getElementsByName(W).length;
-            }), w.getById ? (T.find.ID = function(e, t) {
-                if ("undefined" != typeof t.getElementById && O) {
-                    var n = t.getElementById(e);
-                    return n && n.parentNode ? [ n ] : [];
-                }
-            }, T.filter.ID = function(e) {
-                var t = e.replace(we, Te);
-                return function(e) {
-                    return e.getAttribute("id") === t;
-                };
-            }) : (delete T.find.ID, T.filter.ID = function(e) {
-                var t = e.replace(we, Te);
-                return function(e) {
-                    var n = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id");
-                    return n && n.value === t;
-                };
-            }), T.find.TAG = w.getElementsByTagName ? function(e, t) {
-                return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : w.qsa ? t.querySelectorAll(e) : void 0;
-            } : function(e, t) {
-                var n, r = [], i = 0, o = t.getElementsByTagName(e);
-                if ("*" === e) {
-                    for (;n = o[i++]; ) 1 === n.nodeType && r.push(n);
-                    return r;
-                }
-                return o;
-            }, T.find.CLASS = w.getElementsByClassName && function(e, t) {
-                return O ? t.getElementsByClassName(e) : void 0;
-            }, P = [], F = [], (w.qsa = ve.test(r.querySelectorAll)) && (i(function(e) {
-                H.appendChild(e).innerHTML = "<a id='" + W + "'></a><select id='" + W + "-\f]' msallowcapture=''><option selected=''></option></select>", 
-                e.querySelectorAll("[msallowcapture^='']").length && F.push("[*^$]=" + ne + "*(?:''|\"\")"), 
-                e.querySelectorAll("[selected]").length || F.push("\\[" + ne + "*(?:value|" + te + ")"), 
-                e.querySelectorAll("[id~=" + W + "-]").length || F.push("~="), e.querySelectorAll(":checked").length || F.push(":checked"), 
-                e.querySelectorAll("a#" + W + "+*").length || F.push(".#.+[+~]");
-            }), i(function(e) {
-                var t = r.createElement("input");
-                t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && F.push("name" + ne + "*[*^$|!~]?="), 
-                e.querySelectorAll(":enabled").length || F.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), 
-                F.push(",.*:");
-            })), (w.matchesSelector = ve.test(R = H.matches || H.webkitMatchesSelector || H.mozMatchesSelector || H.oMatchesSelector || H.msMatchesSelector)) && i(function(e) {
-                w.disconnectedMatch = R.call(e, "div"), R.call(e, "[s!='']:x"), P.push("!=", se);
-            }), F = F.length && new RegExp(F.join("|")), P = P.length && new RegExp(P.join("|")), 
-            t = ve.test(H.compareDocumentPosition), M = t || ve.test(H.contains) ? function(e, t) {
-                var n = 9 === e.nodeType ? e.documentElement : e, r = t && t.parentNode;
-                return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r)));
-            } : function(e, t) {
-                if (t) for (;t = t.parentNode; ) if (t === e) return !0;
-                return !1;
-            }, U = t ? function(e, t) {
-                if (e === t) return A = !0, 0;
-                var n = !e.compareDocumentPosition - !t.compareDocumentPosition;
-                return n ? n : (n = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1, 
-                1 & n || !w.sortDetached && t.compareDocumentPosition(e) === n ? e === r || e.ownerDocument === $ && M($, e) ? -1 : t === r || t.ownerDocument === $ && M($, t) ? 1 : j ? ee(j, e) - ee(j, t) : 0 : 4 & n ? -1 : 1);
-            } : function(e, t) {
-                if (e === t) return A = !0, 0;
-                var n, i = 0, o = e.parentNode, a = t.parentNode, u = [ e ], l = [ t ];
-                if (!o || !a) return e === r ? -1 : t === r ? 1 : o ? -1 : a ? 1 : j ? ee(j, e) - ee(j, t) : 0;
-                if (o === a) return s(e, t);
-                for (n = e; n = n.parentNode; ) u.unshift(n);
-                for (n = t; n = n.parentNode; ) l.unshift(n);
-                for (;u[i] === l[i]; ) i++;
-                return i ? s(u[i], l[i]) : u[i] === $ ? -1 : l[i] === $ ? 1 : 0;
-            }, r) : q;
-        }, t.matches = function(e, n) {
-            return t(e, null, null, n);
-        }, t.matchesSelector = function(e, n) {
-            if ((e.ownerDocument || e) !== q && L(e), n = n.replace(fe, "='$1']"), !(!w.matchesSelector || !O || P && P.test(n) || F && F.test(n))) try {
-                var r = R.call(e, n);
-                if (r || w.disconnectedMatch || e.document && 11 !== e.document.nodeType) return r;
-            } catch (i) {}
-            return t(n, q, null, [ e ]).length > 0;
-        }, t.contains = function(e, t) {
-            return (e.ownerDocument || e) !== q && L(e), M(e, t);
-        }, t.attr = function(e, t) {
-            (e.ownerDocument || e) !== q && L(e);
-            var n = T.attrHandle[t.toLowerCase()], r = n && Y.call(T.attrHandle, t.toLowerCase()) ? n(e, t, !O) : void 0;
-            return void 0 !== r ? r : w.attributes || !O ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null;
-        }, t.error = function(e) {
-            throw new Error("Syntax error, unrecognized expression: " + e);
-        }, t.uniqueSort = function(e) {
-            var t, n = [], r = 0, i = 0;
-            if (A = !w.detectDuplicates, j = !w.sortStable && e.slice(0), e.sort(U), A) {
-                for (;t = e[i++]; ) t === e[i] && (r = n.push(i));
-                for (;r--; ) e.splice(n[r], 1);
-            }
-            return j = null, e;
-        }, C = t.getText = function(e) {
-            var t, n = "", r = 0, i = e.nodeType;
-            if (i) {
-                if (1 === i || 9 === i || 11 === i) {
-                    if ("string" == typeof e.textContent) return e.textContent;
-                    for (e = e.firstChild; e; e = e.nextSibling) n += C(e);
-                } else if (3 === i || 4 === i) return e.nodeValue;
-            } else for (;t = e[r++]; ) n += C(t);
-            return n;
-        }, T = t.selectors = {
-            cacheLength: 50,
-            createPseudo: r,
-            match: he,
-            attrHandle: {},
-            find: {},
-            relative: {
-                ">": {
-                    dir: "parentNode",
-                    first: !0
-                },
-                " ": {
-                    dir: "parentNode"
-                },
-                "+": {
-                    dir: "previousSibling",
-                    first: !0
-                },
-                "~": {
-                    dir: "previousSibling"
-                }
-            },
-            preFilter: {
-                ATTR: function(e) {
-                    return e[1] = e[1].replace(we, Te), e[3] = (e[3] || e[4] || e[5] || "").replace(we, Te), 
-                    "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4);
-                },
-                CHILD: function(e) {
-                    return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || t.error(e[0]), 
-                    e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && t.error(e[0]), 
-                    e;
-                },
-                PSEUDO: function(e) {
-                    var t, n = !e[6] && e[2];
-                    return he.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && pe.test(n) && (t = k(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), 
-                    e[2] = n.slice(0, t)), e.slice(0, 3));
-                }
-            },
-            filter: {
-                TAG: function(e) {
-                    var t = e.replace(we, Te).toLowerCase();
-                    return "*" === e ? function() {
-                        return !0;
-                    } : function(e) {
-                        return e.nodeName && e.nodeName.toLowerCase() === t;
-                    };
-                },
-                CLASS: function(e) {
-                    var t = _[e + " "];
-                    return t || (t = new RegExp("(^|" + ne + ")" + e + "(" + ne + "|$)")) && _(e, function(e) {
-                        return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "");
-                    });
-                },
-                ATTR: function(e, n, r) {
-                    return function(i) {
-                        var o = t.attr(i, e);
-                        return null == o ? "!=" === n : !n || (o += "", "=" === n ? o === r : "!=" === n ? o !== r : "^=" === n ? r && 0 === o.indexOf(r) : "*=" === n ? r && o.indexOf(r) > -1 : "$=" === n ? r && o.slice(-r.length) === r : "~=" === n ? (" " + o.replace(ae, " ") + " ").indexOf(r) > -1 : "|=" === n && (o === r || o.slice(0, r.length + 1) === r + "-"));
-                    };
-                },
-                CHILD: function(e, t, n, r, i) {
-                    var o = "nth" !== e.slice(0, 3), s = "last" !== e.slice(-4), a = "of-type" === t;
-                    return 1 === r && 0 === i ? function(e) {
-                        return !!e.parentNode;
-                    } : function(t, n, u) {
-                        var l, c, f, p, d, h, g = o !== s ? "nextSibling" : "previousSibling", m = t.parentNode, v = a && t.nodeName.toLowerCase(), y = !u && !a;
-                        if (m) {
-                            if (o) {
-                                for (;g; ) {
-                                    for (f = t; f = f[g]; ) if (a ? f.nodeName.toLowerCase() === v : 1 === f.nodeType) return !1;
-                                    h = g = "only" === e && !h && "nextSibling";
-                                }
-                                return !0;
-                            }
-                            if (h = [ s ? m.firstChild : m.lastChild ], s && y) {
-                                for (c = m[W] || (m[W] = {}), l = c[e] || [], d = l[0] === I && l[1], p = l[0] === I && l[2], 
-                                f = d && m.childNodes[d]; f = ++d && f && f[g] || (p = d = 0) || h.pop(); ) if (1 === f.nodeType && ++p && f === t) {
-                                    c[e] = [ I, d, p ];
-                                    break;
-                                }
-                            } else if (y && (l = (t[W] || (t[W] = {}))[e]) && l[0] === I) p = l[1]; else for (;(f = ++d && f && f[g] || (p = d = 0) || h.pop()) && ((a ? f.nodeName.toLowerCase() !== v : 1 !== f.nodeType) || !++p || (y && ((f[W] || (f[W] = {}))[e] = [ I, p ]), 
-                            f !== t)); ) ;
-                            return p -= i, p === r || p % r === 0 && p / r >= 0;
-                        }
-                    };
-                },
-                PSEUDO: function(e, n) {
-                    var i, o = T.pseudos[e] || T.setFilters[e.toLowerCase()] || t.error("unsupported pseudo: " + e);
-                    return o[W] ? o(n) : o.length > 1 ? (i = [ e, e, "", n ], T.setFilters.hasOwnProperty(e.toLowerCase()) ? r(function(e, t) {
-                        for (var r, i = o(e, n), s = i.length; s--; ) r = ee(e, i[s]), e[r] = !(t[r] = i[s]);
-                    }) : function(e) {
-                        return o(e, 0, i);
-                    }) : o;
-                }
-            },
-            pseudos: {
-                not: r(function(e) {
-                    var t = [], n = [], i = E(e.replace(ue, "$1"));
-                    return i[W] ? r(function(e, t, n, r) {
-                        for (var o, s = i(e, null, r, []), a = e.length; a--; ) (o = s[a]) && (e[a] = !(t[a] = o));
-                    }) : function(e, r, o) {
-                        return t[0] = e, i(t, null, o, n), t[0] = null, !n.pop();
-                    };
-                }),
-                has: r(function(e) {
-                    return function(n) {
-                        return t(e, n).length > 0;
-                    };
-                }),
-                contains: r(function(e) {
-                    return e = e.replace(we, Te), function(t) {
-                        return (t.textContent || t.innerText || C(t)).indexOf(e) > -1;
-                    };
-                }),
-                lang: r(function(e) {
-                    return de.test(e || "") || t.error("unsupported lang: " + e), e = e.replace(we, Te).toLowerCase(), 
-                    function(t) {
-                        var n;
-                        do if (n = O ? t.lang : t.getAttribute("xml:lang") || t.getAttribute("lang")) return n = n.toLowerCase(), 
-                        n === e || 0 === n.indexOf(e + "-"); while ((t = t.parentNode) && 1 === t.nodeType);
-                        return !1;
-                    };
-                }),
-                target: function(t) {
-                    var n = e.location && e.location.hash;
-                    return n && n.slice(1) === t.id;
-                },
-                root: function(e) {
-                    return e === H;
-                },
-                focus: function(e) {
-                    return e === q.activeElement && (!q.hasFocus || q.hasFocus()) && !!(e.type || e.href || ~e.tabIndex);
-                },
-                enabled: function(e) {
-                    return e.disabled === !1;
-                },
-                disabled: function(e) {
-                    return e.disabled === !0;
-                },
-                checked: function(e) {
-                    var t = e.nodeName.toLowerCase();
-                    return "input" === t && !!e.checked || "option" === t && !!e.selected;
-                },
-                selected: function(e) {
-                    return e.parentNode && e.parentNode.selectedIndex, e.selected === !0;
-                },
-                empty: function(e) {
-                    for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeType < 6) return !1;
-                    return !0;
-                },
-                parent: function(e) {
-                    return !T.pseudos.empty(e);
-                },
-                header: function(e) {
-                    return me.test(e.nodeName);
-                },
-                input: function(e) {
-                    return ge.test(e.nodeName);
-                },
-                button: function(e) {
-                    var t = e.nodeName.toLowerCase();
-                    return "input" === t && "button" === e.type || "button" === t;
-                },
-                text: function(e) {
-                    var t;
-                    return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase());
-                },
-                first: l(function() {
-                    return [ 0 ];
-                }),
-                last: l(function(e, t) {
-                    return [ t - 1 ];
-                }),
-                eq: l(function(e, t, n) {
-                    return [ 0 > n ? n + t : n ];
-                }),
-                even: l(function(e, t) {
-                    for (var n = 0; t > n; n += 2) e.push(n);
-                    return e;
-                }),
-                odd: l(function(e, t) {
-                    for (var n = 1; t > n; n += 2) e.push(n);
-                    return e;
-                }),
-                lt: l(function(e, t, n) {
-                    for (var r = 0 > n ? n + t : n; --r >= 0; ) e.push(r);
-                    return e;
-                }),
-                gt: l(function(e, t, n) {
-                    for (var r = 0 > n ? n + t : n; ++r < t; ) e.push(r);
-                    return e;
-                })
-            }
-        }, T.pseudos.nth = T.pseudos.eq;
-        for (b in {
-            radio: !0,
-            checkbox: !0,
-            file: !0,
-            password: !0,
-            image: !0
-        }) T.pseudos[b] = a(b);
-        for (b in {
-            submit: !0,
-            reset: !0
-        }) T.pseudos[b] = u(b);
-        return f.prototype = T.filters = T.pseudos, T.setFilters = new f(), k = t.tokenize = function(e, n) {
-            var r, i, o, s, a, u, l, c = z[e + " "];
-            if (c) return n ? 0 : c.slice(0);
-            for (a = e, u = [], l = T.preFilter; a; ) {
-                (!r || (i = le.exec(a))) && (i && (a = a.slice(i[0].length) || a), u.push(o = [])), 
-                r = !1, (i = ce.exec(a)) && (r = i.shift(), o.push({
-                    value: r,
-                    type: i[0].replace(ue, " ")
-                }), a = a.slice(r.length));
-                for (s in T.filter) !(i = he[s].exec(a)) || l[s] && !(i = l[s](i)) || (r = i.shift(), 
-                o.push({
-                    value: r,
-                    type: s,
-                    matches: i
-                }), a = a.slice(r.length));
-                if (!r) break;
-            }
-            return n ? a.length : a ? t.error(e) : z(e, u).slice(0);
-        }, E = t.compile = function(e, t) {
-            var n, r = [], i = [], o = X[e + " "];
-            if (!o) {
-                for (t || (t = k(e)), n = t.length; n--; ) o = y(t[n]), o[W] ? r.push(o) : i.push(o);
-                o = X(e, x(i, r)), o.selector = e;
-            }
-            return o;
-        }, S = t.select = function(e, t, n, r) {
-            var i, o, s, a, u, l = "function" == typeof e && e, f = !r && k(e = l.selector || e);
-            if (n = n || [], 1 === f.length) {
-                if (o = f[0] = f[0].slice(0), o.length > 2 && "ID" === (s = o[0]).type && w.getById && 9 === t.nodeType && O && T.relative[o[1].type]) {
-                    if (t = (T.find.ID(s.matches[0].replace(we, Te), t) || [])[0], !t) return n;
-                    l && (t = t.parentNode), e = e.slice(o.shift().value.length);
-                }
-                for (i = he.needsContext.test(e) ? 0 : o.length; i-- && (s = o[i], !T.relative[a = s.type]); ) if ((u = T.find[a]) && (r = u(s.matches[0].replace(we, Te), xe.test(o[0].type) && c(t.parentNode) || t))) {
-                    if (o.splice(i, 1), e = r.length && p(o), !e) return K.apply(n, r), n;
-                    break;
-                }
-            }
-            return (l || E(e, f))(r, t, !O, n, xe.test(e) && c(t.parentNode) || t), n;
-        }, w.sortStable = W.split("").sort(U).join("") === W, w.detectDuplicates = !!A, 
-        L(), w.sortDetached = i(function(e) {
-            return 1 & e.compareDocumentPosition(q.createElement("div"));
-        }), i(function(e) {
-            return e.innerHTML = "<a href='#'></a>", "#" === e.firstChild.getAttribute("href");
-        }) || o("type|href|height|width", function(e, t, n) {
-            return n ? void 0 : e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2);
-        }), w.attributes && i(function(e) {
-            return e.innerHTML = "<input/>", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value");
-        }) || o("value", function(e, t, n) {
-            return n || "input" !== e.nodeName.toLowerCase() ? void 0 : e.defaultValue;
-        }), i(function(e) {
-            return null == e.getAttribute("disabled");
-        }) || o(te, function(e, t, n) {
-            var r;
-            return n ? void 0 : e[t] === !0 ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null;
-        }), t;
-    }(e);
-    Z.find = ie, Z.expr = ie.selectors, Z.expr[":"] = Z.expr.pseudos, Z.unique = ie.uniqueSort, 
-    Z.text = ie.getText, Z.isXMLDoc = ie.isXML, Z.contains = ie.contains;
-    var oe = Z.expr.match.needsContext, se = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, ae = /^.[^:#\[\.,]*$/;
-    Z.filter = function(e, t, n) {
-        var r = t[0];
-        return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? Z.find.matchesSelector(r, e) ? [ r ] : [] : Z.find.matches(e, Z.grep(t, function(e) {
-            return 1 === e.nodeType;
-        }));
-    }, Z.fn.extend({
-        find: function(e) {
-            var t, n = this.length, r = [], i = this;
-            if ("string" != typeof e) return this.pushStack(Z(e).filter(function() {
-                for (t = 0; n > t; t++) if (Z.contains(i[t], this)) return !0;
-            }));
-            for (t = 0; n > t; t++) Z.find(e, i[t], r);
-            return r = this.pushStack(n > 1 ? Z.unique(r) : r), r.selector = this.selector ? this.selector + " " + e : e, 
-            r;
-        },
-        filter: function(e) {
-            return this.pushStack(r(this, e || [], !1));
-        },
-        not: function(e) {
-            return this.pushStack(r(this, e || [], !0));
-        },
-        is: function(e) {
-            return !!r(this, "string" == typeof e && oe.test(e) ? Z(e) : e || [], !1).length;
-        }
-    });
-    var ue, le = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, ce = Z.fn.init = function(e, t) {
-        var n, r;
-        if (!e) return this;
-        if ("string" == typeof e) {
-            if (n = "<" === e[0] && ">" === e[e.length - 1] && e.length >= 3 ? [ null, e, null ] : le.exec(e), 
-            !n || !n[1] && t) return !t || t.jquery ? (t || ue).find(e) : this.constructor(t).find(e);
-            if (n[1]) {
-                if (t = t instanceof Z ? t[0] : t, Z.merge(this, Z.parseHTML(n[1], t && t.nodeType ? t.ownerDocument || t : J, !0)), 
-                se.test(n[1]) && Z.isPlainObject(t)) for (n in t) Z.isFunction(this[n]) ? this[n](t[n]) : this.attr(n, t[n]);
-                return this;
-            }
-            return r = J.getElementById(n[2]), r && r.parentNode && (this.length = 1, this[0] = r), 
-            this.context = J, this.selector = e, this;
-        }
-        return e.nodeType ? (this.context = this[0] = e, this.length = 1, this) : Z.isFunction(e) ? "undefined" != typeof ue.ready ? ue.ready(e) : e(Z) : (void 0 !== e.selector && (this.selector = e.selector, 
-        this.context = e.context), Z.makeArray(e, this));
-    };
-    ce.prototype = Z.fn, ue = Z(J);
-    var fe = /^(?:parents|prev(?:Until|All))/, pe = {
-        children: !0,
-        contents: !0,
-        next: !0,
-        prev: !0
-    };
-    Z.extend({
-        dir: function(e, t, n) {
-            for (var r = [], i = void 0 !== n; (e = e[t]) && 9 !== e.nodeType; ) if (1 === e.nodeType) {
-                if (i && Z(e).is(n)) break;
-                r.push(e);
-            }
-            return r;
-        },
-        sibling: function(e, t) {
-            for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);
-            return n;
-        }
-    }), Z.fn.extend({
-        has: function(e) {
-            var t = Z(e, this), n = t.length;
-            return this.filter(function() {
-                for (var e = 0; n > e; e++) if (Z.contains(this, t[e])) return !0;
-            });
-        },
-        closest: function(e, t) {
-            for (var n, r = 0, i = this.length, o = [], s = oe.test(e) || "string" != typeof e ? Z(e, t || this.context) : 0; i > r; r++) for (n = this[r]; n && n !== t; n = n.parentNode) if (n.nodeType < 11 && (s ? s.index(n) > -1 : 1 === n.nodeType && Z.find.matchesSelector(n, e))) {
-                o.push(n);
-                break;
-            }
-            return this.pushStack(o.length > 1 ? Z.unique(o) : o);
-        },
-        index: function(e) {
-            return e ? "string" == typeof e ? U.call(Z(e), this[0]) : U.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1;
-        },
-        add: function(e, t) {
-            return this.pushStack(Z.unique(Z.merge(this.get(), Z(e, t))));
-        },
-        addBack: function(e) {
-            return this.add(null == e ? this.prevObject : this.prevObject.filter(e));
-        }
-    }), Z.each({
-        parent: function(e) {
-            var t = e.parentNode;
-            return t && 11 !== t.nodeType ? t : null;
-        },
-        parents: function(e) {
-            return Z.dir(e, "parentNode");
-        },
-        parentsUntil: function(e, t, n) {
-            return Z.dir(e, "parentNode", n);
-        },
-        next: function(e) {
-            return i(e, "nextSibling");
-        },
-        prev: function(e) {
-            return i(e, "previousSibling");
-        },
-        nextAll: function(e) {
-            return Z.dir(e, "nextSibling");
-        },
-        prevAll: function(e) {
-            return Z.dir(e, "previousSibling");
-        },
-        nextUntil: function(e, t, n) {
-            return Z.dir(e, "nextSibling", n);
-        },
-        prevUntil: function(e, t, n) {
-            return Z.dir(e, "previousSibling", n);
-        },
-        siblings: function(e) {
-            return Z.sibling((e.parentNode || {}).firstChild, e);
-        },
-        children: function(e) {
-            return Z.sibling(e.firstChild);
-        },
-        contents: function(e) {
-            return e.contentDocument || Z.merge([], e.childNodes);
-        }
-    }, function(e, t) {
-        Z.fn[e] = function(n, r) {
-            var i = Z.map(this, t, n);
-            return "Until" !== e.slice(-5) && (r = n), r && "string" == typeof r && (i = Z.filter(r, i)), 
-            this.length > 1 && (pe[e] || Z.unique(i), fe.test(e) && i.reverse()), this.pushStack(i);
-        };
-    });
-    var de = /\S+/g, he = {};
-    Z.Callbacks = function(e) {
-        e = "string" == typeof e ? he[e] || o(e) : Z.extend({}, e);
-        var t, n, r, i, s, a, u = [], l = !e.once && [], c = function(o) {
-            for (t = e.memory && o, n = !0, a = i || 0, i = 0, s = u.length, r = !0; u && s > a; a++) if (u[a].apply(o[0], o[1]) === !1 && e.stopOnFalse) {
-                t = !1;
-                break;
-            }
-            r = !1, u && (l ? l.length && c(l.shift()) : t ? u = [] : f.disable());
-        }, f = {
-            add: function() {
-                if (u) {
-                    var n = u.length;
-                    !function o(t) {
-                        Z.each(t, function(t, n) {
-                            var r = Z.type(n);
-                            "function" === r ? e.unique && f.has(n) || u.push(n) : n && n.length && "string" !== r && o(n);
-                        });
-                    }(arguments), r ? s = u.length : t && (i = n, c(t));
-                }
-                return this;
-            },
-            remove: function() {
-                return u && Z.each(arguments, function(e, t) {
-                    for (var n; (n = Z.inArray(t, u, n)) > -1; ) u.splice(n, 1), r && (s >= n && s--, 
-                    a >= n && a--);
-                }), this;
-            },
-            has: function(e) {
-                return e ? Z.inArray(e, u) > -1 : !(!u || !u.length);
-            },
-            empty: function() {
-                return u = [], s = 0, this;
-            },
-            disable: function() {
-                return u = l = t = void 0, this;
-            },
-            disabled: function() {
-                return !u;
-            },
-            lock: function() {
-                return l = void 0, t || f.disable(), this;
-            },
-            locked: function() {
-                return !l;
-            },
-            fireWith: function(e, t) {
-                return !u || n && !l || (t = t || [], t = [ e, t.slice ? t.slice() : t ], r ? l.push(t) : c(t)), 
-                this;
-            },
-            fire: function() {
-                return f.fireWith(this, arguments), this;
-            },
-            fired: function() {
-                return !!n;
-            }
-        };
-        return f;
-    }, Z.extend({
-        Deferred: function(e) {
-            var t = [ [ "resolve", "done", Z.Callbacks("once memory"), "resolved" ], [ "reject", "fail", Z.Callbacks("once memory"), "rejected" ], [ "notify", "progress", Z.Callbacks("memory") ] ], n = "pending", r = {
-                state: function() {
-                    return n;
-                },
-                always: function() {
-                    return i.done(arguments).fail(arguments), this;
-                },
-                then: function() {
-                    var e = arguments;
-                    return Z.Deferred(function(n) {
-                        Z.each(t, function(t, o) {
-                            var s = Z.isFunction(e[t]) && e[t];
-                            i[o[1]](function() {
-                                var e = s && s.apply(this, arguments);
-                                e && Z.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[o[0] + "With"](this === r ? n.promise() : this, s ? [ e ] : arguments);
-                            });
-                        }), e = null;
-                    }).promise();
-                },
-                promise: function(e) {
-                    return null != e ? Z.extend(e, r) : r;
-                }
-            }, i = {};
-            return r.pipe = r.then, Z.each(t, function(e, o) {
-                var s = o[2], a = o[3];
-                r[o[1]] = s.add, a && s.add(function() {
-                    n = a;
-                }, t[1 ^ e][2].disable, t[2][2].lock), i[o[0]] = function() {
-                    return i[o[0] + "With"](this === i ? r : this, arguments), this;
-                }, i[o[0] + "With"] = s.fireWith;
-            }), r.promise(i), e && e.call(i, i), i;
-        },
-        when: function(e) {
-            var t, n, r, i = 0, o = _.call(arguments), s = o.length, a = 1 !== s || e && Z.isFunction(e.promise) ? s : 0, u = 1 === a ? e : Z.Deferred(), l = function(e, n, r) {
-                return function(i) {
-                    n[e] = this, r[e] = arguments.length > 1 ? _.call(arguments) : i, r === t ? u.notifyWith(n, r) : --a || u.resolveWith(n, r);
-                };
-            };
-            if (s > 1) for (t = new Array(s), n = new Array(s), r = new Array(s); s > i; i++) o[i] && Z.isFunction(o[i].promise) ? o[i].promise().done(l(i, r, o)).fail(u.reject).progress(l(i, n, t)) : --a;
-            return a || u.resolveWith(r, o), u.promise();
-        }
-    });
-    var ge;
-    Z.fn.ready = function(e) {
-        return Z.ready.promise().done(e), this;
-    }, Z.extend({
-        isReady: !1,
-        readyWait: 1,
-        holdReady: function(e) {
-            e ? Z.readyWait++ : Z.ready(!0);
-        },
-        ready: function(e) {
-            (e === !0 ? --Z.readyWait : Z.isReady) || (Z.isReady = !0, e !== !0 && --Z.readyWait > 0 || (ge.resolveWith(J, [ Z ]), 
-            Z.fn.triggerHandler && (Z(J).triggerHandler("ready"), Z(J).off("ready"))));
-        }
-    }), Z.ready.promise = function(t) {
-        return ge || (ge = Z.Deferred(), "complete" === J.readyState ? setTimeout(Z.ready) : (J.addEventListener("DOMContentLoaded", s, !1), 
-        e.addEventListener("load", s, !1))), ge.promise(t);
-    }, Z.ready.promise();
-    var me = Z.access = function(e, t, n, r, i, o, s) {
-        var a = 0, u = e.length, l = null == n;
-        if ("object" === Z.type(n)) {
-            i = !0;
-            for (a in n) Z.access(e, t, a, n[a], !0, o, s);
-        } else if (void 0 !== r && (i = !0, Z.isFunction(r) || (s = !0), l && (s ? (t.call(e, r), 
-        t = null) : (l = t, t = function(e, t, n) {
-            return l.call(Z(e), n);
-        })), t)) for (;u > a; a++) t(e[a], n, s ? r : r.call(e[a], a, t(e[a], n)));
-        return i ? e : l ? t.call(e) : u ? t(e[0], n) : o;
-    };
-    Z.acceptData = function(e) {
-        return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType;
-    }, a.uid = 1, a.accepts = Z.acceptData, a.prototype = {
-        key: function(e) {
-            if (!a.accepts(e)) return 0;
-            var t = {}, n = e[this.expando];
-            if (!n) {
-                n = a.uid++;
-                try {
-                    t[this.expando] = {
-                        value: n
-                    }, Object.defineProperties(e, t);
-                } catch (r) {
-                    t[this.expando] = n, Z.extend(e, t);
-                }
-            }
-            return this.cache[n] || (this.cache[n] = {}), n;
-        },
-        set: function(e, t, n) {
-            var r, i = this.key(e), o = this.cache[i];
-            if ("string" == typeof t) o[t] = n; else if (Z.isEmptyObject(o)) Z.extend(this.cache[i], t); else for (r in t) o[r] = t[r];
-            return o;
-        },
-        get: function(e, t) {
-            var n = this.cache[this.key(e)];
-            return void 0 === t ? n : n[t];
-        },
-        access: function(e, t, n) {
-            var r;
-            return void 0 === t || t && "string" == typeof t && void 0 === n ? (r = this.get(e, t), 
-            void 0 !== r ? r : this.get(e, Z.camelCase(t))) : (this.set(e, t, n), void 0 !== n ? n : t);
-        },
-        remove: function(e, t) {
-            var n, r, i, o = this.key(e), s = this.cache[o];
-            if (void 0 === t) this.cache[o] = {}; else {
-                Z.isArray(t) ? r = t.concat(t.map(Z.camelCase)) : (i = Z.camelCase(t), t in s ? r = [ t, i ] : (r = i, 
-                r = r in s ? [ r ] : r.match(de) || [])), n = r.length;
-                for (;n--; ) delete s[r[n]];
-            }
-        },
-        hasData: function(e) {
-            return !Z.isEmptyObject(this.cache[e[this.expando]] || {});
-        },
-        discard: function(e) {
-            e[this.expando] && delete this.cache[e[this.expando]];
-        }
-    };
-    var ve = new a(), ye = new a(), xe = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, be = /([A-Z])/g;
-    Z.extend({
-        hasData: function(e) {
-            return ye.hasData(e) || ve.hasData(e);
-        },
-        data: function(e, t, n) {
-            return ye.access(e, t, n);
-        },
-        removeData: function(e, t) {
-            ye.remove(e, t);
-        },
-        _data: function(e, t, n) {
-            return ve.access(e, t, n);
-        },
-        _removeData: function(e, t) {
-            ve.remove(e, t);
-        }
-    }), Z.fn.extend({
-        data: function(e, t) {
-            var n, r, i, o = this[0], s = o && o.attributes;
-            if (void 0 === e) {
-                if (this.length && (i = ye.get(o), 1 === o.nodeType && !ve.get(o, "hasDataAttrs"))) {
-                    for (n = s.length; n--; ) s[n] && (r = s[n].name, 0 === r.indexOf("data-") && (r = Z.camelCase(r.slice(5)), 
-                    u(o, r, i[r])));
-                    ve.set(o, "hasDataAttrs", !0);
-                }
-                return i;
-            }
-            return "object" == typeof e ? this.each(function() {
-                ye.set(this, e);
-            }) : me(this, function(t) {
-                var n, r = Z.camelCase(e);
-                if (o && void 0 === t) {
-                    if (n = ye.get(o, e), void 0 !== n) return n;
-                    if (n = ye.get(o, r), void 0 !== n) return n;
-                    if (n = u(o, r, void 0), void 0 !== n) return n;
-                } else this.each(function() {
-                    var n = ye.get(this, r);
-                    ye.set(this, r, t), -1 !== e.indexOf("-") && void 0 !== n && ye.set(this, e, t);
-                });
-            }, null, t, arguments.length > 1, null, !0);
-        },
-        removeData: function(e) {
-            return this.each(function() {
-                ye.remove(this, e);
-            });
-        }
-    }), Z.extend({
-        queue: function(e, t, n) {
-            var r;
-            return e ? (t = (t || "fx") + "queue", r = ve.get(e, t), n && (!r || Z.isArray(n) ? r = ve.access(e, t, Z.makeArray(n)) : r.push(n)), 
-            r || []) : void 0;
-        },
-        dequeue: function(e, t) {
-            t = t || "fx";
-            var n = Z.queue(e, t), r = n.length, i = n.shift(), o = Z._queueHooks(e, t), s = function() {
-                Z.dequeue(e, t);
-            };
-            "inprogress" === i && (i = n.shift(), r--), i && ("fx" === t && n.unshift("inprogress"), 
-            delete o.stop, i.call(e, s, o)), !r && o && o.empty.fire();
-        },
-        _queueHooks: function(e, t) {
-            var n = t + "queueHooks";
-            return ve.get(e, n) || ve.access(e, n, {
-                empty: Z.Callbacks("once memory").add(function() {
-                    ve.remove(e, [ t + "queue", n ]);
-                })
-            });
-        }
-    }), Z.fn.extend({
-        queue: function(e, t) {
-            var n = 2;
-            return "string" != typeof e && (t = e, e = "fx", n--), arguments.length < n ? Z.queue(this[0], e) : void 0 === t ? this : this.each(function() {
-                var n = Z.queue(this, e, t);
-                Z._queueHooks(this, e), "fx" === e && "inprogress" !== n[0] && Z.dequeue(this, e);
-            });
-        },
-        dequeue: function(e) {
-            return this.each(function() {
-                Z.dequeue(this, e);
-            });
-        },
-        clearQueue: function(e) {
-            return this.queue(e || "fx", []);
-        },
-        promise: function(e, t) {
-            var n, r = 1, i = Z.Deferred(), o = this, s = this.length, a = function() {
-                --r || i.resolveWith(o, [ o ]);
-            };
-            for ("string" != typeof e && (t = e, e = void 0), e = e || "fx"; s--; ) n = ve.get(o[s], e + "queueHooks"), 
-            n && n.empty && (r++, n.empty.add(a));
-            return a(), i.promise(t);
-        }
-    });
-    var we = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, Te = [ "Top", "Right", "Bottom", "Left" ], Ce = function(e, t) {
-        return e = t || e, "none" === Z.css(e, "display") || !Z.contains(e.ownerDocument, e);
-    }, Ne = /^(?:checkbox|radio)$/i;
-    !function() {
-        var e = J.createDocumentFragment(), t = e.appendChild(J.createElement("div")), n = J.createElement("input");
-        n.setAttribute("type", "radio"), n.setAttribute("checked", "checked"), n.setAttribute("name", "t"), 
-        t.appendChild(n), Q.checkClone = t.cloneNode(!0).cloneNode(!0).lastChild.checked, 
-        t.innerHTML = "<textarea>x</textarea>", Q.noCloneChecked = !!t.cloneNode(!0).lastChild.defaultValue;
-    }();
-    var ke = "undefined";
-    Q.focusinBubbles = "onfocusin" in e;
-    var Ee = /^key/, Se = /^(?:mouse|pointer|contextmenu)|click/, De = /^(?:focusinfocus|focusoutblur)$/, je = /^([^.]*)(?:\.(.+)|)$/;
-    Z.event = {
-        global: {},
-        add: function(e, t, n, r, i) {
-            var o, s, a, u, l, c, f, p, d, h, g, m = ve.get(e);
-            if (m) for (n.handler && (o = n, n = o.handler, i = o.selector), n.guid || (n.guid = Z.guid++), 
-            (u = m.events) || (u = m.events = {}), (s = m.handle) || (s = m.handle = function(t) {
-                return typeof Z !== ke && Z.event.triggered !== t.type ? Z.event.dispatch.apply(e, arguments) : void 0;
-            }), t = (t || "").match(de) || [ "" ], l = t.length; l--; ) a = je.exec(t[l]) || [], 
-            d = g = a[1], h = (a[2] || "").split(".").sort(), d && (f = Z.event.special[d] || {}, 
-            d = (i ? f.delegateType : f.bindType) || d, f = Z.event.special[d] || {}, c = Z.extend({
-                type: d,
-                origType: g,
-                data: r,
-                handler: n,
-                guid: n.guid,
-                selector: i,
-                needsContext: i && Z.expr.match.needsContext.test(i),
-                namespace: h.join(".")
-            }, o), (p = u[d]) || (p = u[d] = [], p.delegateCount = 0, f.setup && f.setup.call(e, r, h, s) !== !1 || e.addEventListener && e.addEventListener(d, s, !1)), 
-            f.add && (f.add.call(e, c), c.handler.guid || (c.handler.guid = n.guid)), i ? p.splice(p.delegateCount++, 0, c) : p.push(c), 
-            Z.event.global[d] = !0);
-        },
-        remove: function(e, t, n, r, i) {
-            var o, s, a, u, l, c, f, p, d, h, g, m = ve.hasData(e) && ve.get(e);
-            if (m && (u = m.events)) {
-                for (t = (t || "").match(de) || [ "" ], l = t.length; l--; ) if (a = je.exec(t[l]) || [], 
-                d = g = a[1], h = (a[2] || "").split(".").sort(), d) {
-                    for (f = Z.event.special[d] || {}, d = (r ? f.delegateType : f.bindType) || d, p = u[d] || [], 
-                    a = a[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), s = o = p.length; o--; ) c = p[o], 
-                    !i && g !== c.origType || n && n.guid !== c.guid || a && !a.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (p.splice(o, 1), 
-                    c.selector && p.delegateCount--, f.remove && f.remove.call(e, c));
-                    s && !p.length && (f.teardown && f.teardown.call(e, h, m.handle) !== !1 || Z.removeEvent(e, d, m.handle), 
-                    delete u[d]);
-                } else for (d in u) Z.event.remove(e, d + t[l], n, r, !0);
-                Z.isEmptyObject(u) && (delete m.handle, ve.remove(e, "events"));
-            }
-        },
-        trigger: function(t, n, r, i) {
-            var o, s, a, u, l, c, f, p = [ r || J ], d = G.call(t, "type") ? t.type : t, h = G.call(t, "namespace") ? t.namespace.split(".") : [];
-            if (s = a = r = r || J, 3 !== r.nodeType && 8 !== r.nodeType && !De.test(d + Z.event.triggered) && (d.indexOf(".") >= 0 && (h = d.split("."), 
-            d = h.shift(), h.sort()), l = d.indexOf(":") < 0 && "on" + d, t = t[Z.expando] ? t : new Z.Event(d, "object" == typeof t && t), 
-            t.isTrigger = i ? 2 : 3, t.namespace = h.join("."), t.namespace_re = t.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, 
-            t.result = void 0, t.target || (t.target = r), n = null == n ? [ t ] : Z.makeArray(n, [ t ]), 
-            f = Z.event.special[d] || {}, i || !f.trigger || f.trigger.apply(r, n) !== !1)) {
-                if (!i && !f.noBubble && !Z.isWindow(r)) {
-                    for (u = f.delegateType || d, De.test(u + d) || (s = s.parentNode); s; s = s.parentNode) p.push(s), 
-                    a = s;
-                    a === (r.ownerDocument || J) && p.push(a.defaultView || a.parentWindow || e);
-                }
-                for (o = 0; (s = p[o++]) && !t.isPropagationStopped(); ) t.type = o > 1 ? u : f.bindType || d, 
-                c = (ve.get(s, "events") || {})[t.type] && ve.get(s, "handle"), c && c.apply(s, n), 
-                c = l && s[l], c && c.apply && Z.acceptData(s) && (t.result = c.apply(s, n), t.result === !1 && t.preventDefault());
-                return t.type = d, i || t.isDefaultPrevented() || f._default && f._default.apply(p.pop(), n) !== !1 || !Z.acceptData(r) || l && Z.isFunction(r[d]) && !Z.isWindow(r) && (a = r[l], 
-                a && (r[l] = null), Z.event.triggered = d, r[d](), Z.event.triggered = void 0, a && (r[l] = a)), 
-                t.result;
-            }
-        },
-        dispatch: function(e) {
-            e = Z.event.fix(e);
-            var t, n, r, i, o, s = [], a = _.call(arguments), u = (ve.get(this, "events") || {})[e.type] || [], l = Z.event.special[e.type] || {};
-            if (a[0] = e, e.delegateTarget = this, !l.preDispatch || l.preDispatch.call(this, e) !== !1) {
-                for (s = Z.event.handlers.call(this, e, u), t = 0; (i = s[t++]) && !e.isPropagationStopped(); ) for (e.currentTarget = i.elem, 
-                n = 0; (o = i.handlers[n++]) && !e.isImmediatePropagationStopped(); ) (!e.namespace_re || e.namespace_re.test(o.namespace)) && (e.handleObj = o, 
-                e.data = o.data, r = ((Z.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, a), 
-                void 0 !== r && (e.result = r) === !1 && (e.preventDefault(), e.stopPropagation()));
-                return l.postDispatch && l.postDispatch.call(this, e), e.result;
-            }
-        },
-        handlers: function(e, t) {
-            var n, r, i, o, s = [], a = t.delegateCount, u = e.target;
-            if (a && u.nodeType && (!e.button || "click" !== e.type)) for (;u !== this; u = u.parentNode || this) if (u.disabled !== !0 || "click" !== e.type) {
-                for (r = [], n = 0; a > n; n++) o = t[n], i = o.selector + " ", void 0 === r[i] && (r[i] = o.needsContext ? Z(i, this).index(u) >= 0 : Z.find(i, this, null, [ u ]).length), 
-                r[i] && r.push(o);
-                r.length && s.push({
-                    elem: u,
-                    handlers: r
-                });
-            }
-            return a < t.length && s.push({
-                elem: this,
-                handlers: t.slice(a)
-            }), s;
-        },
-        props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-        fixHooks: {},
-        keyHooks: {
-            props: "char charCode key keyCode".split(" "),
-            filter: function(e, t) {
-                return null == e.which && (e.which = null != t.charCode ? t.charCode : t.keyCode), 
-                e;
-            }
-        },
-        mouseHooks: {
-            props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
-            filter: function(e, t) {
-                var n, r, i, o = t.button;
-                return null == e.pageX && null != t.clientX && (n = e.target.ownerDocument || J, 
-                r = n.documentElement, i = n.body, e.pageX = t.clientX + (r && r.scrollLeft || i && i.scrollLeft || 0) - (r && r.clientLeft || i && i.clientLeft || 0), 
-                e.pageY = t.clientY + (r && r.scrollTop || i && i.scrollTop || 0) - (r && r.clientTop || i && i.clientTop || 0)), 
-                e.which || void 0 === o || (e.which = 1 & o ? 1 : 2 & o ? 3 : 4 & o ? 2 : 0), e;
-            }
-        },
-        fix: function(e) {
-            if (e[Z.expando]) return e;
-            var t, n, r, i = e.type, o = e, s = this.fixHooks[i];
-            for (s || (this.fixHooks[i] = s = Se.test(i) ? this.mouseHooks : Ee.test(i) ? this.keyHooks : {}), 
-            r = s.props ? this.props.concat(s.props) : this.props, e = new Z.Event(o), t = r.length; t--; ) n = r[t], 
-            e[n] = o[n];
-            return e.target || (e.target = J), 3 === e.target.nodeType && (e.target = e.target.parentNode), 
-            s.filter ? s.filter(e, o) : e;
-        },
-        special: {
-            load: {
-                noBubble: !0
-            },
-            focus: {
-                trigger: function() {
-                    return this !== f() && this.focus ? (this.focus(), !1) : void 0;
-                },
-                delegateType: "focusin"
-            },
-            blur: {
-                trigger: function() {
-                    return this === f() && this.blur ? (this.blur(), !1) : void 0;
-                },
-                delegateType: "focusout"
-            },
-            click: {
-                trigger: function() {
-                    return "checkbox" === this.type && this.click && Z.nodeName(this, "input") ? (this.click(), 
-                    !1) : void 0;
-                },
-                _default: function(e) {
-                    return Z.nodeName(e.target, "a");
-                }
-            },
-            beforeunload: {
-                postDispatch: function(e) {
-                    void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result);
-                }
-            }
-        },
-        simulate: function(e, t, n, r) {
-            var i = Z.extend(new Z.Event(), n, {
-                type: e,
-                isSimulated: !0,
-                originalEvent: {}
-            });
-            r ? Z.event.trigger(i, null, t) : Z.event.dispatch.call(t, i), i.isDefaultPrevented() && n.preventDefault();
-        }
-    }, Z.removeEvent = function(e, t, n) {
-        e.removeEventListener && e.removeEventListener(t, n, !1);
-    }, Z.Event = function(e, t) {
-        return this instanceof Z.Event ? (e && e.type ? (this.originalEvent = e, this.type = e.type, 
-        this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && e.returnValue === !1 ? l : c) : this.type = e, 
-        t && Z.extend(this, t), this.timeStamp = e && e.timeStamp || Z.now(), void (this[Z.expando] = !0)) : new Z.Event(e, t);
-    }, Z.Event.prototype = {
-        isDefaultPrevented: c,
-        isPropagationStopped: c,
-        isImmediatePropagationStopped: c,
-        preventDefault: function() {
-            var e = this.originalEvent;
-            this.isDefaultPrevented = l, e && e.preventDefault && e.preventDefault();
-        },
-        stopPropagation: function() {
-            var e = this.originalEvent;
-            this.isPropagationStopped = l, e && e.stopPropagation && e.stopPropagation();
-        },
-        stopImmediatePropagation: function() {
-            var e = this.originalEvent;
-            this.isImmediatePropagationStopped = l, e && e.stopImmediatePropagation && e.stopImmediatePropagation(), 
-            this.stopPropagation();
-        }
-    }, Z.each({
-        mouseenter: "mouseover",
-        mouseleave: "mouseout",
-        pointerenter: "pointerover",
-        pointerleave: "pointerout"
-    }, function(e, t) {
-        Z.event.special[e] = {
-            delegateType: t,
-            bindType: t,
-            handle: function(e) {
-                var n, r = this, i = e.relatedTarget, o = e.handleObj;
-                return (!i || i !== r && !Z.contains(r, i)) && (e.type = o.origType, n = o.handler.apply(this, arguments), 
-                e.type = t), n;
-            }
-        };
-    }), Q.focusinBubbles || Z.each({
-        focus: "focusin",
-        blur: "focusout"
-    }, function(e, t) {
-        var n = function(e) {
-            Z.event.simulate(t, e.target, Z.event.fix(e), !0);
-        };
-        Z.event.special[t] = {
-            setup: function() {
-                var r = this.ownerDocument || this, i = ve.access(r, t);
-                i || r.addEventListener(e, n, !0), ve.access(r, t, (i || 0) + 1);
-            },
-            teardown: function() {
-                var r = this.ownerDocument || this, i = ve.access(r, t) - 1;
-                i ? ve.access(r, t, i) : (r.removeEventListener(e, n, !0), ve.remove(r, t));
-            }
-        };
-    }), Z.fn.extend({
-        on: function(e, t, n, r, i) {
-            var o, s;
-            if ("object" == typeof e) {
-                "string" != typeof t && (n = n || t, t = void 0);
-                for (s in e) this.on(s, t, n, e[s], i);
-                return this;
-            }
-            if (null == n && null == r ? (r = t, n = t = void 0) : null == r && ("string" == typeof t ? (r = n, 
-            n = void 0) : (r = n, n = t, t = void 0)), r === !1) r = c; else if (!r) return this;
-            return 1 === i && (o = r, r = function(e) {
-                return Z().off(e), o.apply(this, arguments);
-            }, r.guid = o.guid || (o.guid = Z.guid++)), this.each(function() {
-                Z.event.add(this, e, r, n, t);
-            });
-        },
-        one: function(e, t, n, r) {
-            return this.on(e, t, n, r, 1);
-        },
-        off: function(e, t, n) {
-            var r, i;
-            if (e && e.preventDefault && e.handleObj) return r = e.handleObj, Z(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), 
-            this;
-            if ("object" == typeof e) {
-                for (i in e) this.off(i, t, e[i]);
-                return this;
-            }
-            return (t === !1 || "function" == typeof t) && (n = t, t = void 0), n === !1 && (n = c), 
-            this.each(function() {
-                Z.event.remove(this, e, n, t);
-            });
-        },
-        trigger: function(e, t) {
-            return this.each(function() {
-                Z.event.trigger(e, t, this);
-            });
-        },
-        triggerHandler: function(e, t) {
-            var n = this[0];
-            return n ? Z.event.trigger(e, t, n, !0) : void 0;
-        }
-    });
-    var Ae = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, Le = /<([\w:]+)/, qe = /<|&#?\w+;/, He = /<(?:script|style|link)/i, Oe = /checked\s*(?:[^=]|=\s*.checked.)/i, Fe = /^$|\/(?:java|ecma)script/i, Pe = /^true\/(.*)/, Re = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, Me = {
-        option: [ 1, "<select multiple='multiple'>", "</select>" ],
-        thead: [ 1, "<table>", "</table>" ],
-        col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
-        tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-        td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-        _default: [ 0, "", "" ]
-    };
-    Me.optgroup = Me.option, Me.tbody = Me.tfoot = Me.colgroup = Me.caption = Me.thead, 
-    Me.th = Me.td, Z.extend({
-        clone: function(e, t, n) {
-            var r, i, o, s, a = e.cloneNode(!0), u = Z.contains(e.ownerDocument, e);
-            if (!(Q.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || Z.isXMLDoc(e))) for (s = v(a), 
-            o = v(e), r = 0, i = o.length; i > r; r++) y(o[r], s[r]);
-            if (t) if (n) for (o = o || v(e), s = s || v(a), r = 0, i = o.length; i > r; r++) m(o[r], s[r]); else m(e, a);
-            return s = v(a, "script"), s.length > 0 && g(s, !u && v(e, "script")), a;
-        },
-        buildFragment: function(e, t, n, r) {
-            for (var i, o, s, a, u, l, c = t.createDocumentFragment(), f = [], p = 0, d = e.length; d > p; p++) if (i = e[p], 
-            i || 0 === i) if ("object" === Z.type(i)) Z.merge(f, i.nodeType ? [ i ] : i); else if (qe.test(i)) {
-                for (o = o || c.appendChild(t.createElement("div")), s = (Le.exec(i) || [ "", "" ])[1].toLowerCase(), 
-                a = Me[s] || Me._default, o.innerHTML = a[1] + i.replace(Ae, "<$1></$2>") + a[2], 
-                l = a[0]; l--; ) o = o.lastChild;
-                Z.merge(f, o.childNodes), o = c.firstChild, o.textContent = "";
-            } else f.push(t.createTextNode(i));
-            for (c.textContent = "", p = 0; i = f[p++]; ) if ((!r || -1 === Z.inArray(i, r)) && (u = Z.contains(i.ownerDocument, i), 
-            o = v(c.appendChild(i), "script"), u && g(o), n)) for (l = 0; i = o[l++]; ) Fe.test(i.type || "") && n.push(i);
-            return c;
-        },
-        cleanData: function(e) {
-            for (var t, n, r, i, o = Z.event.special, s = 0; void 0 !== (n = e[s]); s++) {
-                if (Z.acceptData(n) && (i = n[ve.expando], i && (t = ve.cache[i]))) {
-                    if (t.events) for (r in t.events) o[r] ? Z.event.remove(n, r) : Z.removeEvent(n, r, t.handle);
-                    ve.cache[i] && delete ve.cache[i];
-                }
-                delete ye.cache[n[ye.expando]];
-            }
-        }
-    }), Z.fn.extend({
-        text: function(e) {
-            return me(this, function(e) {
-                return void 0 === e ? Z.text(this) : this.empty().each(function() {
-                    (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) && (this.textContent = e);
-                });
-            }, null, e, arguments.length);
-        },
-        append: function() {
-            return this.domManip(arguments, function(e) {
-                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
-                    var t = p(this, e);
-                    t.appendChild(e);
-                }
-            });
-        },
-        prepend: function() {
-            return this.domManip(arguments, function(e) {
-                if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
-                    var t = p(this, e);
-                    t.insertBefore(e, t.firstChild);
-                }
-            });
-        },
-        before: function() {
-            return this.domManip(arguments, function(e) {
-                this.parentNode && this.parentNode.insertBefore(e, this);
-            });
-        },
-        after: function() {
-            return this.domManip(arguments, function(e) {
-                this.parentNode && this.parentNode.insertBefore(e, this.nextSibling);
-            });
-        },
-        remove: function(e, t) {
-            for (var n, r = e ? Z.filter(e, this) : this, i = 0; null != (n = r[i]); i++) t || 1 !== n.nodeType || Z.cleanData(v(n)), 
-            n.parentNode && (t && Z.contains(n.ownerDocument, n) && g(v(n, "script")), n.parentNode.removeChild(n));
-            return this;
-        },
-        empty: function() {
-            for (var e, t = 0; null != (e = this[t]); t++) 1 === e.nodeType && (Z.cleanData(v(e, !1)), 
-            e.textContent = "");
-            return this;
-        },
-        clone: function(e, t) {
-            return e = null != e && e, t = null == t ? e : t, this.map(function() {
-                return Z.clone(this, e, t);
-            });
-        },
-        html: function(e) {
-            return me(this, function(e) {
-                var t = this[0] || {}, n = 0, r = this.length;
-                if (void 0 === e && 1 === t.nodeType) return t.innerHTML;
-                if ("string" == typeof e && !He.test(e) && !Me[(Le.exec(e) || [ "", "" ])[1].toLowerCase()]) {
-                    e = e.replace(Ae, "<$1></$2>");
-                    try {
-                        for (;r > n; n++) t = this[n] || {}, 1 === t.nodeType && (Z.cleanData(v(t, !1)), 
-                        t.innerHTML = e);
-                        t = 0;
-                    } catch (i) {}
-                }
-                t && this.empty().append(e);
-            }, null, e, arguments.length);
-        },
-        replaceWith: function() {
-            var e = arguments[0];
-            return this.domManip(arguments, function(t) {
-                e = this.parentNode, Z.cleanData(v(this)), e && e.replaceChild(t, this);
-            }), e && (e.length || e.nodeType) ? this : this.remove();
-        },
-        detach: function(e) {
-            return this.remove(e, !0);
-        },
-        domManip: function(e, t) {
-            e = z.apply([], e);
-            var n, r, i, o, s, a, u = 0, l = this.length, c = this, f = l - 1, p = e[0], g = Z.isFunction(p);
-            if (g || l > 1 && "string" == typeof p && !Q.checkClone && Oe.test(p)) return this.each(function(n) {
-                var r = c.eq(n);
-                g && (e[0] = p.call(this, n, r.html())), r.domManip(e, t);
-            });
-            if (l && (n = Z.buildFragment(e, this[0].ownerDocument, !1, this), r = n.firstChild, 
-            1 === n.childNodes.length && (n = r), r)) {
-                for (i = Z.map(v(n, "script"), d), o = i.length; l > u; u++) s = n, u !== f && (s = Z.clone(s, !0, !0), 
-                o && Z.merge(i, v(s, "script"))), t.call(this[u], s, u);
-                if (o) for (a = i[i.length - 1].ownerDocument, Z.map(i, h), u = 0; o > u; u++) s = i[u], 
-                Fe.test(s.type || "") && !ve.access(s, "globalEval") && Z.contains(a, s) && (s.src ? Z._evalUrl && Z._evalUrl(s.src) : Z.globalEval(s.textContent.replace(Re, "")));
-            }
-            return this;
-        }
-    }), Z.each({
-        appendTo: "append",
-        prependTo: "prepend",
-        insertBefore: "before",
-        insertAfter: "after",
-        replaceAll: "replaceWith"
-    }, function(e, t) {
-        Z.fn[e] = function(e) {
-            for (var n, r = [], i = Z(e), o = i.length - 1, s = 0; o >= s; s++) n = s === o ? this : this.clone(!0), 
-            Z(i[s])[t](n), X.apply(r, n.get());
-            return this.pushStack(r);
-        };
-    });
-    var We, $e = {}, Ie = /^margin/, Be = new RegExp("^(" + we + ")(?!px)[a-z%]+$", "i"), _e = function(t) {
-        return t.ownerDocument.defaultView.opener ? t.ownerDocument.defaultView.getComputedStyle(t, null) : e.getComputedStyle(t, null);
-    };
-    !function() {
-        function t() {
-            s.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute", 
-            s.innerHTML = "", i.appendChild(o);
-            var t = e.getComputedStyle(s, null);
-            n = "1%" !== t.top, r = "4px" === t.width, i.removeChild(o);
-        }
-        var n, r, i = J.documentElement, o = J.createElement("div"), s = J.createElement("div");
-        s.style && (s.style.backgroundClip = "content-box", s.cloneNode(!0).style.backgroundClip = "", 
-        Q.clearCloneStyle = "content-box" === s.style.backgroundClip, o.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute", 
-        o.appendChild(s), e.getComputedStyle && Z.extend(Q, {
-            pixelPosition: function() {
-                return t(), n;
-            },
-            boxSizingReliable: function() {
-                return null == r && t(), r;
-            },
-            reliableMarginRight: function() {
-                var t, n = s.appendChild(J.createElement("div"));
-                return n.style.cssText = s.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", 
-                n.style.marginRight = n.style.width = "0", s.style.width = "1px", i.appendChild(o), 
-                t = !parseFloat(e.getComputedStyle(n, null).marginRight), i.removeChild(o), s.removeChild(n), 
-                t;
-            }
-        }));
-    }(), Z.swap = function(e, t, n, r) {
-        var i, o, s = {};
-        for (o in t) s[o] = e.style[o], e.style[o] = t[o];
-        i = n.apply(e, r || []);
-        for (o in t) e.style[o] = s[o];
-        return i;
-    };
-    var ze = /^(none|table(?!-c[ea]).+)/, Xe = new RegExp("^(" + we + ")(.*)$", "i"), Ue = new RegExp("^([+-])=(" + we + ")", "i"), Ve = {
-        position: "absolute",
-        visibility: "hidden",
-        display: "block"
-    }, Ye = {
-        letterSpacing: "0",
-        fontWeight: "400"
-    }, Ge = [ "Webkit", "O", "Moz", "ms" ];
-    Z.extend({
-        cssHooks: {
-            opacity: {
-                get: function(e, t) {
-                    if (t) {
-                        var n = w(e, "opacity");
-                        return "" === n ? "1" : n;
-                    }
-                }
-            }
-        },
-        cssNumber: {
-            columnCount: !0,
-            fillOpacity: !0,
-            flexGrow: !0,
-            flexShrink: !0,
-            fontWeight: !0,
-            lineHeight: !0,
-            opacity: !0,
-            order: !0,
-            orphans: !0,
-            widows: !0,
-            zIndex: !0,
-            zoom: !0
-        },
-        cssProps: {
-            "float": "cssFloat"
-        },
-        style: function(e, t, n, r) {
-            if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
-                var i, o, s, a = Z.camelCase(t), u = e.style;
-                return t = Z.cssProps[a] || (Z.cssProps[a] = C(u, a)), s = Z.cssHooks[t] || Z.cssHooks[a], 
-                void 0 === n ? s && "get" in s && void 0 !== (i = s.get(e, !1, r)) ? i : u[t] : (o = typeof n, 
-                "string" === o && (i = Ue.exec(n)) && (n = (i[1] + 1) * i[2] + parseFloat(Z.css(e, t)), 
-                o = "number"), void (null != n && n === n && ("number" !== o || Z.cssNumber[a] || (n += "px"), 
-                Q.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (u[t] = "inherit"), 
-                s && "set" in s && void 0 === (n = s.set(e, n, r)) || (u[t] = n))));
-            }
-        },
-        css: function(e, t, n, r) {
-            var i, o, s, a = Z.camelCase(t);
-            return t = Z.cssProps[a] || (Z.cssProps[a] = C(e.style, a)), s = Z.cssHooks[t] || Z.cssHooks[a], 
-            s && "get" in s && (i = s.get(e, !0, n)), void 0 === i && (i = w(e, t, r)), "normal" === i && t in Ye && (i = Ye[t]), 
-            "" === n || n ? (o = parseFloat(i), n === !0 || Z.isNumeric(o) ? o || 0 : i) : i;
-        }
-    }), Z.each([ "height", "width" ], function(e, t) {
-        Z.cssHooks[t] = {
-            get: function(e, n, r) {
-                return n ? ze.test(Z.css(e, "display")) && 0 === e.offsetWidth ? Z.swap(e, Ve, function() {
-                    return E(e, t, r);
-                }) : E(e, t, r) : void 0;
-            },
-            set: function(e, n, r) {
-                var i = r && _e(e);
-                return N(e, n, r ? k(e, t, r, "border-box" === Z.css(e, "boxSizing", !1, i), i) : 0);
-            }
-        };
-    }), Z.cssHooks.marginRight = T(Q.reliableMarginRight, function(e, t) {
-        return t ? Z.swap(e, {
-            display: "inline-block"
-        }, w, [ e, "marginRight" ]) : void 0;
-    }), Z.each({
-        margin: "",
-        padding: "",
-        border: "Width"
-    }, function(e, t) {
-        Z.cssHooks[e + t] = {
-            expand: function(n) {
-                for (var r = 0, i = {}, o = "string" == typeof n ? n.split(" ") : [ n ]; 4 > r; r++) i[e + Te[r] + t] = o[r] || o[r - 2] || o[0];
-                return i;
-            }
-        }, Ie.test(e) || (Z.cssHooks[e + t].set = N);
-    }), Z.fn.extend({
-        css: function(e, t) {
-            return me(this, function(e, t, n) {
-                var r, i, o = {}, s = 0;
-                if (Z.isArray(t)) {
-                    for (r = _e(e), i = t.length; i > s; s++) o[t[s]] = Z.css(e, t[s], !1, r);
-                    return o;
-                }
-                return void 0 !== n ? Z.style(e, t, n) : Z.css(e, t);
-            }, e, t, arguments.length > 1);
-        },
-        show: function() {
-            return S(this, !0);
-        },
-        hide: function() {
-            return S(this);
-        },
-        toggle: function(e) {
-            return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function() {
-                Ce(this) ? Z(this).show() : Z(this).hide();
-            });
-        }
-    }), Z.Tween = D, D.prototype = {
-        constructor: D,
-        init: function(e, t, n, r, i, o) {
-            this.elem = e, this.prop = n, this.easing = i || "swing", this.options = t, this.start = this.now = this.cur(), 
-            this.end = r, this.unit = o || (Z.cssNumber[n] ? "" : "px");
-        },
-        cur: function() {
-            var e = D.propHooks[this.prop];
-            return e && e.get ? e.get(this) : D.propHooks._default.get(this);
-        },
-        run: function(e) {
-            var t, n = D.propHooks[this.prop];
-            return this.options.duration ? this.pos = t = Z.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, 
-            this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), 
-            n && n.set ? n.set(this) : D.propHooks._default.set(this), this;
-        }
-    }, D.prototype.init.prototype = D.prototype, D.propHooks = {
-        _default: {
-            get: function(e) {
-                var t;
-                return null == e.elem[e.prop] || e.elem.style && null != e.elem.style[e.prop] ? (t = Z.css(e.elem, e.prop, ""), 
-                t && "auto" !== t ? t : 0) : e.elem[e.prop];
-            },
-            set: function(e) {
-                Z.fx.step[e.prop] ? Z.fx.step[e.prop](e) : e.elem.style && (null != e.elem.style[Z.cssProps[e.prop]] || Z.cssHooks[e.prop]) ? Z.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now;
-            }
-        }
-    }, D.propHooks.scrollTop = D.propHooks.scrollLeft = {
-        set: function(e) {
-            e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now);
-        }
-    }, Z.easing = {
-        linear: function(e) {
-            return e;
-        },
-        swing: function(e) {
-            return .5 - Math.cos(e * Math.PI) / 2;
-        }
-    }, Z.fx = D.prototype.init, Z.fx.step = {};
-    var Qe, Je, Ke = /^(?:toggle|show|hide)$/, Ze = new RegExp("^(?:([+-])=|)(" + we + ")([a-z%]*)$", "i"), et = /queueHooks$/, tt = [ q ], nt = {
-        "*": [ function(e, t) {
-            var n = this.createTween(e, t), r = n.cur(), i = Ze.exec(t), o = i && i[3] || (Z.cssNumber[e] ? "" : "px"), s = (Z.cssNumber[e] || "px" !== o && +r) && Ze.exec(Z.css(n.elem, e)), a = 1, u = 20;
-            if (s && s[3] !== o) {
-                o = o || s[3], i = i || [], s = +r || 1;
-                do a = a || ".5", s /= a, Z.style(n.elem, e, s + o); while (a !== (a = n.cur() / r) && 1 !== a && --u);
-            }
-            return i && (s = n.start = +s || +r || 0, n.unit = o, n.end = i[1] ? s + (i[1] + 1) * i[2] : +i[2]), 
-            n;
-        } ]
-    };
-    Z.Animation = Z.extend(O, {
-        tweener: function(e, t) {
-            Z.isFunction(e) ? (t = e, e = [ "*" ]) : e = e.split(" ");
-            for (var n, r = 0, i = e.length; i > r; r++) n = e[r], nt[n] = nt[n] || [], nt[n].unshift(t);
-        },
-        prefilter: function(e, t) {
-            t ? tt.unshift(e) : tt.push(e);
-        }
-    }), Z.speed = function(e, t, n) {
-        var r = e && "object" == typeof e ? Z.extend({}, e) : {
-            complete: n || !n && t || Z.isFunction(e) && e,
-            duration: e,
-            easing: n && t || t && !Z.isFunction(t) && t
-        };
-        return r.duration = Z.fx.off ? 0 : "number" == typeof r.duration ? r.duration : r.duration in Z.fx.speeds ? Z.fx.speeds[r.duration] : Z.fx.speeds._default, 
-        (null == r.queue || r.queue === !0) && (r.queue = "fx"), r.old = r.complete, r.complete = function() {
-            Z.isFunction(r.old) && r.old.call(this), r.queue && Z.dequeue(this, r.queue);
-        }, r;
-    }, Z.fn.extend({
-        fadeTo: function(e, t, n, r) {
-            return this.filter(Ce).css("opacity", 0).show().end().animate({
-                opacity: t
-            }, e, n, r);
-        },
-        animate: function(e, t, n, r) {
-            var i = Z.isEmptyObject(e), o = Z.speed(t, n, r), s = function() {
-                var t = O(this, Z.extend({}, e), o);
-                (i || ve.get(this, "finish")) && t.stop(!0);
-            };
-            return s.finish = s, i || o.queue === !1 ? this.each(s) : this.queue(o.queue, s);
-        },
-        stop: function(e, t, n) {
-            var r = function(e) {
-                var t = e.stop;
-                delete e.stop, t(n);
-            };
-            return "string" != typeof e && (n = t, t = e, e = void 0), t && e !== !1 && this.queue(e || "fx", []), 
-            this.each(function() {
-                var t = !0, i = null != e && e + "queueHooks", o = Z.timers, s = ve.get(this);
-                if (i) s[i] && s[i].stop && r(s[i]); else for (i in s) s[i] && s[i].stop && et.test(i) && r(s[i]);
-                for (i = o.length; i--; ) o[i].elem !== this || null != e && o[i].queue !== e || (o[i].anim.stop(n), 
-                t = !1, o.splice(i, 1));
-                (t || !n) && Z.dequeue(this, e);
-            });
-        },
-        finish: function(e) {
-            return e !== !1 && (e = e || "fx"), this.each(function() {
-                var t, n = ve.get(this), r = n[e + "queue"], i = n[e + "queueHooks"], o = Z.timers, s = r ? r.length : 0;
-                for (n.finish = !0, Z.queue(this, e, []), i && i.stop && i.stop.call(this, !0), 
-                t = o.length; t--; ) o[t].elem === this && o[t].queue === e && (o[t].anim.stop(!0), 
-                o.splice(t, 1));
-                for (t = 0; s > t; t++) r[t] && r[t].finish && r[t].finish.call(this);
-                delete n.finish;
-            });
-        }
-    }), Z.each([ "toggle", "show", "hide" ], function(e, t) {
-        var n = Z.fn[t];
-        Z.fn[t] = function(e, r, i) {
-            return null == e || "boolean" == typeof e ? n.apply(this, arguments) : this.animate(A(t, !0), e, r, i);
-        };
-    }), Z.each({
-        slideDown: A("show"),
-        slideUp: A("hide"),
-        slideToggle: A("toggle"),
-        fadeIn: {
-            opacity: "show"
-        },
-        fadeOut: {
-            opacity: "hide"
-        },
-        fadeToggle: {
-            opacity: "toggle"
-        }
-    }, function(e, t) {
-        Z.fn[e] = function(e, n, r) {
-            return this.animate(t, e, n, r);
-        };
-    }), Z.timers = [], Z.fx.tick = function() {
-        var e, t = 0, n = Z.timers;
-        for (Qe = Z.now(); t < n.length; t++) e = n[t], e() || n[t] !== e || n.splice(t--, 1);
-        n.length || Z.fx.stop(), Qe = void 0;
-    }, Z.fx.timer = function(e) {
-        Z.timers.push(e), e() ? Z.fx.start() : Z.timers.pop();
-    }, Z.fx.interval = 13, Z.fx.start = function() {
-        Je || (Je = setInterval(Z.fx.tick, Z.fx.interval));
-    }, Z.fx.stop = function() {
-        clearInterval(Je), Je = null;
-    }, Z.fx.speeds = {
-        slow: 600,
-        fast: 200,
-        _default: 400
-    }, Z.fn.delay = function(e, t) {
-        return e = Z.fx ? Z.fx.speeds[e] || e : e, t = t || "fx", this.queue(t, function(t, n) {
-            var r = setTimeout(t, e);
-            n.stop = function() {
-                clearTimeout(r);
-            };
-        });
-    }, function() {
-        var e = J.createElement("input"), t = J.createElement("select"), n = t.appendChild(J.createElement("option"));
-        e.type = "checkbox", Q.checkOn = "" !== e.value, Q.optSelected = n.selected, t.disabled = !0, 
-        Q.optDisabled = !n.disabled, e = J.createElement("input"), e.value = "t", e.type = "radio", 
-        Q.radioValue = "t" === e.value;
-    }();
-    var rt, it, ot = Z.expr.attrHandle;
-    Z.fn.extend({
-        attr: function(e, t) {
-            return me(this, Z.attr, e, t, arguments.length > 1);
-        },
-        removeAttr: function(e) {
-            return this.each(function() {
-                Z.removeAttr(this, e);
-            });
-        }
-    }), Z.extend({
-        attr: function(e, t, n) {
-            var r, i, o = e.nodeType;
-            if (e && 3 !== o && 8 !== o && 2 !== o) return typeof e.getAttribute === ke ? Z.prop(e, t, n) : (1 === o && Z.isXMLDoc(e) || (t = t.toLowerCase(), 
-            r = Z.attrHooks[t] || (Z.expr.match.bool.test(t) ? it : rt)), void 0 === n ? r && "get" in r && null !== (i = r.get(e, t)) ? i : (i = Z.find.attr(e, t), 
-            null == i ? void 0 : i) : null !== n ? r && "set" in r && void 0 !== (i = r.set(e, n, t)) ? i : (e.setAttribute(t, n + ""), 
-            n) : void Z.removeAttr(e, t));
-        },
-        removeAttr: function(e, t) {
-            var n, r, i = 0, o = t && t.match(de);
-            if (o && 1 === e.nodeType) for (;n = o[i++]; ) r = Z.propFix[n] || n, Z.expr.match.bool.test(n) && (e[r] = !1), 
-            e.removeAttribute(n);
-        },
-        attrHooks: {
-            type: {
-                set: function(e, t) {
-                    if (!Q.radioValue && "radio" === t && Z.nodeName(e, "input")) {
-                        var n = e.value;
-                        return e.setAttribute("type", t), n && (e.value = n), t;
-                    }
-                }
-            }
-        }
-    }), it = {
-        set: function(e, t, n) {
-            return t === !1 ? Z.removeAttr(e, n) : e.setAttribute(n, n), n;
-        }
-    }, Z.each(Z.expr.match.bool.source.match(/\w+/g), function(e, t) {
-        var n = ot[t] || Z.find.attr;
-        ot[t] = function(e, t, r) {
-            var i, o;
-            return r || (o = ot[t], ot[t] = i, i = null != n(e, t, r) ? t.toLowerCase() : null, 
-            ot[t] = o), i;
-        };
-    });
-    var st = /^(?:input|select|textarea|button)$/i;
-    Z.fn.extend({
-        prop: function(e, t) {
-            return me(this, Z.prop, e, t, arguments.length > 1);
-        },
-        removeProp: function(e) {
-            return this.each(function() {
-                delete this[Z.propFix[e] || e];
-            });
-        }
-    }), Z.extend({
-        propFix: {
-            "for": "htmlFor",
-            "class": "className"
-        },
-        prop: function(e, t, n) {
-            var r, i, o, s = e.nodeType;
-            if (e && 3 !== s && 8 !== s && 2 !== s) return o = 1 !== s || !Z.isXMLDoc(e), o && (t = Z.propFix[t] || t, 
-            i = Z.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i && null !== (r = i.get(e, t)) ? r : e[t];
-        },
-        propHooks: {
-            tabIndex: {
-                get: function(e) {
-                    return e.hasAttribute("tabindex") || st.test(e.nodeName) || e.href ? e.tabIndex : -1;
-                }
-            }
-        }
-    }), Q.optSelected || (Z.propHooks.selected = {
-        get: function(e) {
-            var t = e.parentNode;
-            return t && t.parentNode && t.parentNode.selectedIndex, null;
-        }
-    }), Z.each([ "tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable" ], function() {
-        Z.propFix[this.toLowerCase()] = this;
-    });
-    var at = /[\t\r\n\f]/g;
-    Z.fn.extend({
-        addClass: function(e) {
-            var t, n, r, i, o, s, a = "string" == typeof e && e, u = 0, l = this.length;
-            if (Z.isFunction(e)) return this.each(function(t) {
-                Z(this).addClass(e.call(this, t, this.className));
-            });
-            if (a) for (t = (e || "").match(de) || []; l > u; u++) if (n = this[u], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(at, " ") : " ")) {
-                for (o = 0; i = t[o++]; ) r.indexOf(" " + i + " ") < 0 && (r += i + " ");
-                s = Z.trim(r), n.className !== s && (n.className = s);
-            }
-            return this;
-        },
-        removeClass: function(e) {
-            var t, n, r, i, o, s, a = 0 === arguments.length || "string" == typeof e && e, u = 0, l = this.length;
-            if (Z.isFunction(e)) return this.each(function(t) {
-                Z(this).removeClass(e.call(this, t, this.className));
-            });
-            if (a) for (t = (e || "").match(de) || []; l > u; u++) if (n = this[u], r = 1 === n.nodeType && (n.className ? (" " + n.className + " ").replace(at, " ") : "")) {
-                for (o = 0; i = t[o++]; ) for (;r.indexOf(" " + i + " ") >= 0; ) r = r.replace(" " + i + " ", " ");
-                s = e ? Z.trim(r) : "", n.className !== s && (n.className = s);
-            }
-            return this;
-        },
-        toggleClass: function(e, t) {
-            var n = typeof e;
-            return "boolean" == typeof t && "string" === n ? t ? this.addClass(e) : this.removeClass(e) : this.each(Z.isFunction(e) ? function(n) {
-                Z(this).toggleClass(e.call(this, n, this.className, t), t);
-            } : function() {
-                if ("string" === n) for (var t, r = 0, i = Z(this), o = e.match(de) || []; t = o[r++]; ) i.hasClass(t) ? i.removeClass(t) : i.addClass(t); else (n === ke || "boolean" === n) && (this.className && ve.set(this, "__className__", this.className), 
-                this.className = this.className || e === !1 ? "" : ve.get(this, "__className__") || "");
-            });
-        },
-        hasClass: function(e) {
-            for (var t = " " + e + " ", n = 0, r = this.length; r > n; n++) if (1 === this[n].nodeType && (" " + this[n].className + " ").replace(at, " ").indexOf(t) >= 0) return !0;
-            return !1;
-        }
-    });
-    var ut = /\r/g;
-    Z.fn.extend({
-        val: function(e) {
-            var t, n, r, i = this[0];
-            return arguments.length ? (r = Z.isFunction(e), this.each(function(n) {
-                var i;
-                1 === this.nodeType && (i = r ? e.call(this, n, Z(this).val()) : e, null == i ? i = "" : "number" == typeof i ? i += "" : Z.isArray(i) && (i = Z.map(i, function(e) {
-                    return null == e ? "" : e + "";
-                })), t = Z.valHooks[this.type] || Z.valHooks[this.nodeName.toLowerCase()], t && "set" in t && void 0 !== t.set(this, i, "value") || (this.value = i));
-            })) : i ? (t = Z.valHooks[i.type] || Z.valHooks[i.nodeName.toLowerCase()], t && "get" in t && void 0 !== (n = t.get(i, "value")) ? n : (n = i.value, 
-            "string" == typeof n ? n.replace(ut, "") : null == n ? "" : n)) : void 0;
-        }
-    }), Z.extend({
-        valHooks: {
-            option: {
-                get: function(e) {
-                    var t = Z.find.attr(e, "value");
-                    return null != t ? t : Z.trim(Z.text(e));
-                }
-            },
-            select: {
-                get: function(e) {
-                    for (var t, n, r = e.options, i = e.selectedIndex, o = "select-one" === e.type || 0 > i, s = o ? null : [], a = o ? i + 1 : r.length, u = 0 > i ? a : o ? i : 0; a > u; u++) if (n = r[u], 
-                    !(!n.selected && u !== i || (Q.optDisabled ? n.disabled : null !== n.getAttribute("disabled")) || n.parentNode.disabled && Z.nodeName(n.parentNode, "optgroup"))) {
-                        if (t = Z(n).val(), o) return t;
-                        s.push(t);
-                    }
-                    return s;
-                },
-                set: function(e, t) {
-                    for (var n, r, i = e.options, o = Z.makeArray(t), s = i.length; s--; ) r = i[s], 
-                    (r.selected = Z.inArray(r.value, o) >= 0) && (n = !0);
-                    return n || (e.selectedIndex = -1), o;
-                }
-            }
-        }
-    }), Z.each([ "radio", "checkbox" ], function() {
-        Z.valHooks[this] = {
-            set: function(e, t) {
-                return Z.isArray(t) ? e.checked = Z.inArray(Z(e).val(), t) >= 0 : void 0;
-            }
-        }, Q.checkOn || (Z.valHooks[this].get = function(e) {
-            return null === e.getAttribute("value") ? "on" : e.value;
-        });
-    }), Z.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(e, t) {
-        Z.fn[t] = function(e, n) {
-            return arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t);
-        };
-    }), Z.fn.extend({
-        hover: function(e, t) {
-            return this.mouseenter(e).mouseleave(t || e);
-        },
-        bind: function(e, t, n) {
-            return this.on(e, null, t, n);
-        },
-        unbind: function(e, t) {
-            return this.off(e, null, t);
-        },
-        delegate: function(e, t, n, r) {
-            return this.on(t, e, n, r);
-        },
-        undelegate: function(e, t, n) {
-            return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n);
-        }
-    });
-    var lt = Z.now(), ct = /\?/;
-    Z.parseJSON = function(e) {
-        return JSON.parse(e + "");
-    }, Z.parseXML = function(e) {
-        var t, n;
-        if (!e || "string" != typeof e) return null;
-        try {
-            n = new DOMParser(), t = n.parseFromString(e, "text/xml");
-        } catch (r) {
-            t = void 0;
-        }
-        return (!t || t.getElementsByTagName("parsererror").length) && Z.error("Invalid XML: " + e), 
-        t;
-    };
-    var ft = /#.*$/, pt = /([?&])_=[^&]*/, dt = /^(.*?):[ \t]*([^\r\n]*)$/gm, ht = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, gt = /^(?:GET|HEAD)$/, mt = /^\/\//, vt = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, yt = {}, xt = {}, bt = "*/".concat("*"), wt = e.location.href, Tt = vt.exec(wt.toLowerCase()) || [];
-    Z.extend({
-        active: 0,
-        lastModified: {},
-        etag: {},
-        ajaxSettings: {
-            url: wt,
-            type: "GET",
-            isLocal: ht.test(Tt[1]),
-            global: !0,
-            processData: !0,
-            async: !0,
-            contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-            accepts: {
-                "*": bt,
-                text: "text/plain",
-                html: "text/html",
-                xml: "application/xml, text/xml",
-                json: "application/json, text/javascript"
-            },
-            contents: {
-                xml: /xml/,
-                html: /html/,
-                json: /json/
-            },
-            responseFields: {
-                xml: "responseXML",
-                text: "responseText",
-                json: "responseJSON"
-            },
-            converters: {
-                "* text": String,
-                "text html": !0,
-                "text json": Z.parseJSON,
-                "text xml": Z.parseXML
-            },
-            flatOptions: {
-                url: !0,
-                context: !0
-            }
-        },
-        ajaxSetup: function(e, t) {
-            return t ? R(R(e, Z.ajaxSettings), t) : R(Z.ajaxSettings, e);
-        },
-        ajaxPrefilter: F(yt),
-        ajaxTransport: F(xt),
-        ajax: function(e, t) {
-            function n(e, t, n, s) {
-                var u, c, v, y, b, T = t;
-                2 !== x && (x = 2, a && clearTimeout(a), r = void 0, o = s || "", w.readyState = e > 0 ? 4 : 0, 
-                u = e >= 200 && 300 > e || 304 === e, n && (y = M(f, w, n)), y = W(f, y, w, u), 
-                u ? (f.ifModified && (b = w.getResponseHeader("Last-Modified"), b && (Z.lastModified[i] = b), 
-                b = w.getResponseHeader("etag"), b && (Z.etag[i] = b)), 204 === e || "HEAD" === f.type ? T = "nocontent" : 304 === e ? T = "notmodified" : (T = y.state, 
-                c = y.data, v = y.error, u = !v)) : (v = T, (e || !T) && (T = "error", 0 > e && (e = 0))), 
-                w.status = e, w.statusText = (t || T) + "", u ? h.resolveWith(p, [ c, T, w ]) : h.rejectWith(p, [ w, T, v ]), 
-                w.statusCode(m), m = void 0, l && d.trigger(u ? "ajaxSuccess" : "ajaxError", [ w, f, u ? c : v ]), 
-                g.fireWith(p, [ w, T ]), l && (d.trigger("ajaxComplete", [ w, f ]), --Z.active || Z.event.trigger("ajaxStop")));
-            }
-            "object" == typeof e && (t = e, e = void 0), t = t || {};
-            var r, i, o, s, a, u, l, c, f = Z.ajaxSetup({}, t), p = f.context || f, d = f.context && (p.nodeType || p.jquery) ? Z(p) : Z.event, h = Z.Deferred(), g = Z.Callbacks("once memory"), m = f.statusCode || {}, v = {}, y = {}, x = 0, b = "canceled", w = {
-                readyState: 0,
-                getResponseHeader: function(e) {
-                    var t;
-                    if (2 === x) {
-                        if (!s) for (s = {}; t = dt.exec(o); ) s[t[1].toLowerCase()] = t[2];
-                        t = s[e.toLowerCase()];
-                    }
-                    return null == t ? null : t;
-                },
-                getAllResponseHeaders: function() {
-                    return 2 === x ? o : null;
-                },
-                setRequestHeader: function(e, t) {
-                    var n = e.toLowerCase();
-                    return x || (e = y[n] = y[n] || e, v[e] = t), this;
-                },
-                overrideMimeType: function(e) {
-                    return x || (f.mimeType = e), this;
-                },
-                statusCode: function(e) {
-                    var t;
-                    if (e) if (2 > x) for (t in e) m[t] = [ m[t], e[t] ]; else w.always(e[w.status]);
-                    return this;
-                },
-                abort: function(e) {
-                    var t = e || b;
-                    return r && r.abort(t), n(0, t), this;
-                }
-            };
-            if (h.promise(w).complete = g.add, w.success = w.done, w.error = w.fail, f.url = ((e || f.url || wt) + "").replace(ft, "").replace(mt, Tt[1] + "//"), 
-            f.type = t.method || t.type || f.method || f.type, f.dataTypes = Z.trim(f.dataType || "*").toLowerCase().match(de) || [ "" ], 
-            null == f.crossDomain && (u = vt.exec(f.url.toLowerCase()), f.crossDomain = !(!u || u[1] === Tt[1] && u[2] === Tt[2] && (u[3] || ("http:" === u[1] ? "80" : "443")) === (Tt[3] || ("http:" === Tt[1] ? "80" : "443")))), 
-            f.data && f.processData && "string" != typeof f.data && (f.data = Z.param(f.data, f.traditional)), 
-            P(yt, f, t, w), 2 === x) return w;
-            l = Z.event && f.global, l && 0 === Z.active++ && Z.event.trigger("ajaxStart"), 
-            f.type = f.type.toUpperCase(), f.hasContent = !gt.test(f.type), i = f.url, f.hasContent || (f.data && (i = f.url += (ct.test(i) ? "&" : "?") + f.data, 
-            delete f.data), f.cache === !1 && (f.url = pt.test(i) ? i.replace(pt, "$1_=" + lt++) : i + (ct.test(i) ? "&" : "?") + "_=" + lt++)), 
-            f.ifModified && (Z.lastModified[i] && w.setRequestHeader("If-Modified-Since", Z.lastModified[i]), 
-            Z.etag[i] && w.setRequestHeader("If-None-Match", Z.etag[i])), (f.data && f.hasContent && f.contentType !== !1 || t.contentType) && w.setRequestHeader("Content-Type", f.contentType), 
-            w.setRequestHeader("Accept", f.dataTypes[0] && f.accepts[f.dataTypes[0]] ? f.accepts[f.dataTypes[0]] + ("*" !== f.dataTypes[0] ? ", " + bt + "; q=0.01" : "") : f.accepts["*"]);
-            for (c in f.headers) w.setRequestHeader(c, f.headers[c]);
-            if (f.beforeSend && (f.beforeSend.call(p, w, f) === !1 || 2 === x)) return w.abort();
-            b = "abort";
-            for (c in {
-                success: 1,
-                error: 1,
-                complete: 1
-            }) w[c](f[c]);
-            if (r = P(xt, f, t, w)) {
-                w.readyState = 1, l && d.trigger("ajaxSend", [ w, f ]), f.async && f.timeout > 0 && (a = setTimeout(function() {
-                    w.abort("timeout");
-                }, f.timeout));
-                try {
-                    x = 1, r.send(v, n);
-                } catch (T) {
-                    if (!(2 > x)) throw T;
-                    n(-1, T);
-                }
-            } else n(-1, "No Transport");
-            return w;
-        },
-        getJSON: function(e, t, n) {
-            return Z.get(e, t, n, "json");
-        },
-        getScript: function(e, t) {
-            return Z.get(e, void 0, t, "script");
-        }
-    }), Z.each([ "get", "post" ], function(e, t) {
-        Z[t] = function(e, n, r, i) {
-            return Z.isFunction(n) && (i = i || r, r = n, n = void 0), Z.ajax({
-                url: e,
-                type: t,
-                dataType: i,
-                data: n,
-                success: r
-            });
-        };
-    }), Z._evalUrl = function(e) {
-        return Z.ajax({
-            url: e,
-            type: "GET",
-            dataType: "script",
-            async: !1,
-            global: !1,
-            "throws": !0
-        });
-    }, Z.fn.extend({
-        wrapAll: function(e) {
-            var t;
-            return Z.isFunction(e) ? this.each(function(t) {
-                Z(this).wrapAll(e.call(this, t));
-            }) : (this[0] && (t = Z(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), 
-            t.map(function() {
-                for (var e = this; e.firstElementChild; ) e = e.firstElementChild;
-                return e;
-            }).append(this)), this);
-        },
-        wrapInner: function(e) {
-            return this.each(Z.isFunction(e) ? function(t) {
-                Z(this).wrapInner(e.call(this, t));
-            } : function() {
-                var t = Z(this), n = t.contents();
-                n.length ? n.wrapAll(e) : t.append(e);
-            });
-        },
-        wrap: function(e) {
-            var t = Z.isFunction(e);
-            return this.each(function(n) {
-                Z(this).wrapAll(t ? e.call(this, n) : e);
-            });
-        },
-        unwrap: function() {
-            return this.parent().each(function() {
-                Z.nodeName(this, "body") || Z(this).replaceWith(this.childNodes);
-            }).end();
-        }
-    }), Z.expr.filters.hidden = function(e) {
-        return e.offsetWidth <= 0 && e.offsetHeight <= 0;
-    }, Z.expr.filters.visible = function(e) {
-        return !Z.expr.filters.hidden(e);
-    };
-    var Ct = /%20/g, Nt = /\[\]$/, kt = /\r?\n/g, Et = /^(?:submit|button|image|reset|file)$/i, St = /^(?:input|select|textarea|keygen)/i;
-    Z.param = function(e, t) {
-        var n, r = [], i = function(e, t) {
-            t = Z.isFunction(t) ? t() : null == t ? "" : t, r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t);
-        };
-        if (void 0 === t && (t = Z.ajaxSettings && Z.ajaxSettings.traditional), Z.isArray(e) || e.jquery && !Z.isPlainObject(e)) Z.each(e, function() {
-            i(this.name, this.value);
-        }); else for (n in e) $(n, e[n], t, i);
-        return r.join("&").replace(Ct, "+");
-    }, Z.fn.extend({
-        serialize: function() {
-            return Z.param(this.serializeArray());
-        },
-        serializeArray: function() {
-            return this.map(function() {
-                var e = Z.prop(this, "elements");
-                return e ? Z.makeArray(e) : this;
-            }).filter(function() {
-                var e = this.type;
-                return this.name && !Z(this).is(":disabled") && St.test(this.nodeName) && !Et.test(e) && (this.checked || !Ne.test(e));
-            }).map(function(e, t) {
-                var n = Z(this).val();
-                return null == n ? null : Z.isArray(n) ? Z.map(n, function(e) {
-                    return {
-                        name: t.name,
-                        value: e.replace(kt, "\r\n")
-                    };
-                }) : {
-                    name: t.name,
-                    value: n.replace(kt, "\r\n")
-                };
-            }).get();
-        }
-    }), Z.ajaxSettings.xhr = function() {
-        try {
-            return new XMLHttpRequest();
-        } catch (e) {}
-    };
-    var Dt = 0, jt = {}, At = {
-        0: 200,
-        1223: 204
-    }, Lt = Z.ajaxSettings.xhr();
-    e.attachEvent && e.attachEvent("onunload", function() {
-        for (var e in jt) jt[e]();
-    }), Q.cors = !!Lt && "withCredentials" in Lt, Q.ajax = Lt = !!Lt, Z.ajaxTransport(function(e) {
-        var t;
-        return Q.cors || Lt && !e.crossDomain ? {
-            send: function(n, r) {
-                var i, o = e.xhr(), s = ++Dt;
-                if (o.open(e.type, e.url, e.async, e.username, e.password), e.xhrFields) for (i in e.xhrFields) o[i] = e.xhrFields[i];
-                e.mimeType && o.overrideMimeType && o.overrideMimeType(e.mimeType), e.crossDomain || n["X-Requested-With"] || (n["X-Requested-With"] = "XMLHttpRequest");
-                for (i in n) o.setRequestHeader(i, n[i]);
-                t = function(e) {
-                    return function() {
-                        t && (delete jt[s], t = o.onload = o.onerror = null, "abort" === e ? o.abort() : "error" === e ? r(o.status, o.statusText) : r(At[o.status] || o.status, o.statusText, "string" == typeof o.responseText ? {
-                            text: o.responseText
-                        } : void 0, o.getAllResponseHeaders()));
-                    };
-                }, o.onload = t(), o.onerror = t("error"), t = jt[s] = t("abort");
-                try {
-                    o.send(e.hasContent && e.data || null);
-                } catch (a) {
-                    if (t) throw a;
-                }
-            },
-            abort: function() {
-                t && t();
-            }
-        } : void 0;
-    }), Z.ajaxSetup({
-        accepts: {
-            script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-        },
-        contents: {
-            script: /(?:java|ecma)script/
-        },
-        converters: {
-            "text script": function(e) {
-                return Z.globalEval(e), e;
-            }
-        }
-    }), Z.ajaxPrefilter("script", function(e) {
-        void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET");
-    }), Z.ajaxTransport("script", function(e) {
-        if (e.crossDomain) {
-            var t, n;
-            return {
-                send: function(r, i) {
-                    t = Z("<script>").prop({
-                        async: !0,
-                        charset: e.scriptCharset,
-                        src: e.url
-                    }).on("load error", n = function(e) {
-                        t.remove(), n = null, e && i("error" === e.type ? 404 : 200, e.type);
-                    }), J.head.appendChild(t[0]);
-                },
-                abort: function() {
-                    n && n();
-                }
-            };
-        }
-    });
-    var qt = [], Ht = /(=)\?(?=&|$)|\?\?/;
-    Z.ajaxSetup({
-        jsonp: "callback",
-        jsonpCallback: function() {
-            var e = qt.pop() || Z.expando + "_" + lt++;
-            return this[e] = !0, e;
-        }
-    }), Z.ajaxPrefilter("json jsonp", function(t, n, r) {
-        var i, o, s, a = t.jsonp !== !1 && (Ht.test(t.url) ? "url" : "string" == typeof t.data && !(t.contentType || "").indexOf("application/x-www-form-urlencoded") && Ht.test(t.data) && "data");
-        return a || "jsonp" === t.dataTypes[0] ? (i = t.jsonpCallback = Z.isFunction(t.jsonpCallback) ? t.jsonpCallback() : t.jsonpCallback, 
-        a ? t[a] = t[a].replace(Ht, "$1" + i) : t.jsonp !== !1 && (t.url += (ct.test(t.url) ? "&" : "?") + t.jsonp + "=" + i), 
-        t.converters["script json"] = function() {
-            return s || Z.error(i + " was not called"), s[0];
-        }, t.dataTypes[0] = "json", o = e[i], e[i] = function() {
-            s = arguments;
-        }, r.always(function() {
-            e[i] = o, t[i] && (t.jsonpCallback = n.jsonpCallback, qt.push(i)), s && Z.isFunction(o) && o(s[0]), 
-            s = o = void 0;
-        }), "script") : void 0;
-    }), Z.parseHTML = function(e, t, n) {
-        if (!e || "string" != typeof e) return null;
-        "boolean" == typeof t && (n = t, t = !1), t = t || J;
-        var r = se.exec(e), i = !n && [];
-        return r ? [ t.createElement(r[1]) ] : (r = Z.buildFragment([ e ], t, i), i && i.length && Z(i).remove(), 
-        Z.merge([], r.childNodes));
-    };
-    var Ot = Z.fn.load;
-    Z.fn.load = function(e, t, n) {
-        if ("string" != typeof e && Ot) return Ot.apply(this, arguments);
-        var r, i, o, s = this, a = e.indexOf(" ");
-        return a >= 0 && (r = Z.trim(e.slice(a)), e = e.slice(0, a)), Z.isFunction(t) ? (n = t, 
-        t = void 0) : t && "object" == typeof t && (i = "POST"), s.length > 0 && Z.ajax({
-            url: e,
-            type: i,
-            dataType: "html",
-            data: t
-        }).done(function(e) {
-            o = arguments, s.html(r ? Z("<div>").append(Z.parseHTML(e)).find(r) : e);
-        }).complete(n && function(e, t) {
-            s.each(n, o || [ e.responseText, t, e ]);
-        }), this;
-    }, Z.each([ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function(e, t) {
-        Z.fn[t] = function(e) {
-            return this.on(t, e);
-        };
-    }), Z.expr.filters.animated = function(e) {
-        return Z.grep(Z.timers, function(t) {
-            return e === t.elem;
-        }).length;
-    };
-    var Ft = e.document.documentElement;
-    Z.offset = {
-        setOffset: function(e, t, n) {
-            var r, i, o, s, a, u, l, c = Z.css(e, "position"), f = Z(e), p = {};
-            "static" === c && (e.style.position = "relative"), a = f.offset(), o = Z.css(e, "top"), 
-            u = Z.css(e, "left"), l = ("absolute" === c || "fixed" === c) && (o + u).indexOf("auto") > -1, 
-            l ? (r = f.position(), s = r.top, i = r.left) : (s = parseFloat(o) || 0, i = parseFloat(u) || 0), 
-            Z.isFunction(t) && (t = t.call(e, n, a)), null != t.top && (p.top = t.top - a.top + s), 
-            null != t.left && (p.left = t.left - a.left + i), "using" in t ? t.using.call(e, p) : f.css(p);
-        }
-    }, Z.fn.extend({
-        offset: function(e) {
-            if (arguments.length) return void 0 === e ? this : this.each(function(t) {
-                Z.offset.setOffset(this, e, t);
-            });
-            var t, n, r = this[0], i = {
-                top: 0,
-                left: 0
-            }, o = r && r.ownerDocument;
-            return o ? (t = o.documentElement, Z.contains(t, r) ? (typeof r.getBoundingClientRect !== ke && (i = r.getBoundingClientRect()), 
-            n = I(o), {
-                top: i.top + n.pageYOffset - t.clientTop,
-                left: i.left + n.pageXOffset - t.clientLeft
-            }) : i) : void 0;
-        },
-        position: function() {
-            if (this[0]) {
-                var e, t, n = this[0], r = {
-                    top: 0,
-                    left: 0
-                };
-                return "fixed" === Z.css(n, "position") ? t = n.getBoundingClientRect() : (e = this.offsetParent(), 
-                t = this.offset(), Z.nodeName(e[0], "html") || (r = e.offset()), r.top += Z.css(e[0], "borderTopWidth", !0), 
-                r.left += Z.css(e[0], "borderLeftWidth", !0)), {
-                    top: t.top - r.top - Z.css(n, "marginTop", !0),
-                    left: t.left - r.left - Z.css(n, "marginLeft", !0)
-                };
-            }
-        },
-        offsetParent: function() {
-            return this.map(function() {
-                for (var e = this.offsetParent || Ft; e && !Z.nodeName(e, "html") && "static" === Z.css(e, "position"); ) e = e.offsetParent;
-                return e || Ft;
-            });
-        }
-    }), Z.each({
-        scrollLeft: "pageXOffset",
-        scrollTop: "pageYOffset"
-    }, function(t, n) {
-        var r = "pageYOffset" === n;
-        Z.fn[t] = function(i) {
-            return me(this, function(t, i, o) {
-                var s = I(t);
-                return void 0 === o ? s ? s[n] : t[i] : void (s ? s.scrollTo(r ? e.pageXOffset : o, r ? o : e.pageYOffset) : t[i] = o);
-            }, t, i, arguments.length, null);
-        };
-    }), Z.each([ "top", "left" ], function(e, t) {
-        Z.cssHooks[t] = T(Q.pixelPosition, function(e, n) {
-            return n ? (n = w(e, t), Be.test(n) ? Z(e).position()[t] + "px" : n) : void 0;
-        });
-    }), Z.each({
-        Height: "height",
-        Width: "width"
-    }, function(e, t) {
-        Z.each({
-            padding: "inner" + e,
-            content: t,
-            "": "outer" + e
-        }, function(n, r) {
-            Z.fn[r] = function(r, i) {
-                var o = arguments.length && (n || "boolean" != typeof r), s = n || (r === !0 || i === !0 ? "margin" : "border");
-                return me(this, function(t, n, r) {
-                    var i;
-                    return Z.isWindow(t) ? t.document.documentElement["client" + e] : 9 === t.nodeType ? (i = t.documentElement, 
-                    Math.max(t.body["scroll" + e], i["scroll" + e], t.body["offset" + e], i["offset" + e], i["client" + e])) : void 0 === r ? Z.css(t, n, s) : Z.style(t, n, r, s);
-                }, t, o ? r : void 0, o, null);
-            };
-        });
-    }), Z.fn.size = function() {
-        return this.length;
-    }, Z.fn.andSelf = Z.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function() {
-        return Z;
-    });
-    var Pt = e.jQuery, Rt = e.$;
-    return Z.noConflict = function(t) {
-        return e.$ === Z && (e.$ = Rt), t && e.jQuery === Z && (e.jQuery = Pt), Z;
-    }, typeof t === ke && (e.jQuery = e.$ = Z), Z;
-});
-!function(e) {
-    function n(e, n) {
-        if (!n || "function" == typeof n) return e;
-        for (var t in n) e[t] = n[t];
-        return e;
-    }
-    function t(e, n, r) {
-        for (var a in n) a in e ? "string" == typeof e[a] || e[a] instanceof String || "string" == typeof n[a] || n[a] instanceof String ? r && (e[a] = n[a]) : t(e[a], n[a], r) : e[a] = n[a];
-        return e;
-    }
-    function r(e, n, t) {
-        var r, a = 0, o = e.length, i = void 0 === o || "[object Array]" !== Object.prototype.toString.apply(e) || "function" == typeof e;
-        if (t) if (i) {
-            for (r in e) if (n.apply(e[r], t) === !1) break;
-        } else for (;a < o && n.apply(e[a++], t) !== !1; ) ; else if (i) {
-            for (r in e) if (n.call(e[r], r, e[r]) === !1) break;
-        } else for (;a < o && n.call(e[a], a, e[a++]) !== !1; ) ;
-        return e;
-    }
-    function a(e) {
-        return "string" == typeof e ? e.replace(/[&<>"'\/]/g, function(e) {
-            return J[e];
-        }) : e;
-    }
-    function o(e) {
-        var n = function(e) {
-            if (window.XMLHttpRequest) return e(null, new XMLHttpRequest());
-            if (window.ActiveXObject) try {
-                return e(null, new ActiveXObject("Msxml2.XMLHTTP"));
-            } catch (n) {
-                return e(null, new ActiveXObject("Microsoft.XMLHTTP"));
-            }
-            return e(new Error());
-        }, t = function(e) {
-            if ("string" == typeof e) return e;
-            var n = [];
-            for (var t in e) e.hasOwnProperty(t) && n.push(encodeURIComponent(t) + "=" + encodeURIComponent(e[t]));
-            return n.join("&");
-        }, r = function(e) {
-            e = e.replace(/\r\n/g, "\n");
-            for (var n = "", t = 0; t < e.length; t++) {
-                var r = e.charCodeAt(t);
-                r < 128 ? n += String.fromCharCode(r) : r > 127 && r < 2048 ? (n += String.fromCharCode(r >> 6 | 192), 
-                n += String.fromCharCode(63 & r | 128)) : (n += String.fromCharCode(r >> 12 | 224), 
-                n += String.fromCharCode(r >> 6 & 63 | 128), n += String.fromCharCode(63 & r | 128));
-            }
-            return n;
-        }, a = function(e) {
-            var n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
-            e = r(e);
-            var t, a, o, i, s, u, l, f = "", c = 0;
-            do t = e.charCodeAt(c++), a = e.charCodeAt(c++), o = e.charCodeAt(c++), i = t >> 2, 
-            s = (3 & t) << 4 | a >> 4, u = (15 & a) << 2 | o >> 6, l = 63 & o, isNaN(a) ? u = l = 64 : isNaN(o) && (l = 64), 
-            f += n.charAt(i) + n.charAt(s) + n.charAt(u) + n.charAt(l), t = a = o = "", i = s = u = l = ""; while (c < e.length);
-            return f;
-        }, o = function() {
-            for (var e = arguments[0], n = 1; n < arguments.length; n++) {
-                var t = arguments[n];
-                for (var r in t) t.hasOwnProperty(r) && (e[r] = t[r]);
-            }
-            return e;
-        }, i = function(e, r, a, s) {
-            "function" == typeof a && (s = a, a = {}), a.cache = a.cache || !1, a.data = a.data || {}, 
-            a.headers = a.headers || {}, a.jsonp = a.jsonp || !1, a.async = void 0 === a.async || a.async;
-            var u, l = o({
-                accept: "*/*",
-                "content-type": "application/x-www-form-urlencoded;charset=UTF-8"
-            }, i.headers, a.headers);
-            if (u = "application/json" === l["content-type"] ? JSON.stringify(a.data) : t(a.data), 
-            "GET" === e) {
-                var f = [];
-                if (u && (f.push(u), u = null), a.cache || f.push("_=" + new Date().getTime()), 
-                a.jsonp && (f.push("callback=" + a.jsonp), f.push("jsonp=" + a.jsonp)), f = f.join("&"), 
-                f.length > 1 && (r += r.indexOf("?") > -1 ? "&" + f : "?" + f), a.jsonp) {
-                    var c = document.getElementsByTagName("head")[0], p = document.createElement("script");
-                    return p.type = "text/javascript", p.src = r, void c.appendChild(p);
-                }
-            }
-            n(function(n, t) {
-                if (n) return s(n);
-                t.open(e, r, a.async);
-                for (var o in l) l.hasOwnProperty(o) && t.setRequestHeader(o, l[o]);
-                t.onreadystatechange = function() {
-                    if (4 === t.readyState) {
-                        var e = t.responseText || "";
-                        if (!s) return;
-                        s(t.status, {
-                            text: function() {
-                                return e;
-                            },
-                            json: function() {
-                                try {
-                                    return JSON.parse(e);
-                                } catch (n) {
-                                    return W.error("Can not parse JSON. URL: " + r), {};
-                                }
-                            }
-                        });
-                    }
-                }, t.send(u);
-            });
-        }, s = {
-            authBasic: function(e, n) {
-                i.headers.Authorization = "Basic " + a(e + ":" + n);
-            },
-            connect: function(e, n, t) {
-                return i("CONNECT", e, n, t);
-            },
-            del: function(e, n, t) {
-                return i("DELETE", e, n, t);
-            },
-            get: function(e, n, t) {
-                return i("GET", e, n, t);
-            },
-            head: function(e, n, t) {
-                return i("HEAD", e, n, t);
-            },
-            headers: function(e) {
-                i.headers = e || {};
-            },
-            isAllowed: function(e, n, t) {
-                this.options(e, function(e, r) {
-                    t(r.text().indexOf(n) !== -1);
-                });
-            },
-            options: function(e, n, t) {
-                return i("OPTIONS", e, n, t);
-            },
-            patch: function(e, n, t) {
-                return i("PATCH", e, n, t);
-            },
-            post: function(e, n, t) {
-                return i("POST", e, n, t);
-            },
-            put: function(e, n, t) {
-                return i("PUT", e, n, t);
-            },
-            trace: function(e, n, t) {
-                return i("TRACE", e, n, t);
-            }
-        }, u = e.type ? e.type.toLowerCase() : "get";
-        s[u](e.url, e, function(n, t) {
-            200 === n || 0 === n && t.text() ? e.success(t.json(), n, null) : e.error(t.text(), n, null);
-        });
-    }
-    function i(e, n) {
-        "function" == typeof e && (n = e, e = {}), e = e || {}, W.extend(U, e), delete U.fixLng, 
-        U.functions && (delete U.functions, W.extend(W, e.functions)), "string" == typeof U.ns && (U.ns = {
-            namespaces: [ U.ns ],
-            defaultNs: U.ns
-        }), "string" == typeof U.fallbackNS && (U.fallbackNS = [ U.fallbackNS ]), "string" != typeof U.fallbackLng && "boolean" != typeof U.fallbackLng || (U.fallbackLng = [ U.fallbackLng ]), 
-        U.interpolationPrefixEscaped = W.regexEscape(U.interpolationPrefix), U.interpolationSuffixEscaped = W.regexEscape(U.interpolationSuffix), 
-        U.lng || (U.lng = W.detectLanguage()), K = W.toLanguages(U.lng), I = K[0], W.log("currentLng set to: " + I), 
-        U.useCookie && W.cookie.read(U.cookieName) !== I && W.cookie.create(U.cookieName, I, U.cookieExpirationTime, U.cookieDomain), 
-        U.detectLngFromLocalStorage && "undefined" != typeof document && window.localStorage && W.localStorage.setItem("i18next_lng", I);
-        var t = _;
-        e.fixLng && (t = function(e, n) {
-            return n = n || {}, n.lng = n.lng || t.lng, _(e, n);
-        }, t.lng = I), Z.setCurrentLng(I), V && U.setJqueryExt ? S && S() : w && w();
-        var r;
-        if (V && V.Deferred && (r = V.Deferred()), U.resStore) {
-            if (z = U.resStore, B = !0, n && n(null, t), r && r.resolve(t), r) return r.promise();
-        } else {
-            var a = W.toLanguages(U.lng);
-            "string" == typeof U.preload && (U.preload = [ U.preload ]);
-            for (var o = 0, i = U.preload.length; o < i; o++) for (var s = W.toLanguages(U.preload[o]), u = 0, l = s.length; u < l; u++) a.indexOf(s[u]) < 0 && a.push(s[u]);
-            if (H.sync.load(a, U, function(e, a) {
-                z = a, B = !0, n && n(e, t), r && (e ? r.reject : r.resolve)(e || t);
-            }), r) return r.promise();
-        }
-    }
-    function s() {
-        return B;
-    }
-    function u(e, n) {
-        "string" == typeof e && (e = [ e ]);
-        for (var t = 0, r = e.length; t < r; t++) U.preload.indexOf(e[t]) < 0 && U.preload.push(e[t]);
-        return i(n);
-    }
-    function l(e, n, t, r, a) {
-        "string" != typeof n ? (t = n, n = U.ns.defaultNs) : U.ns.namespaces.indexOf(n) < 0 && U.ns.namespaces.push(n), 
-        z[e] = z[e] || {}, z[e][n] = z[e][n] || {}, r ? W.deepExtend(z[e][n], t, a) : W.extend(z[e][n], t), 
-        U.useLocalStorage && G._storeLocal(z);
-    }
-    function f(e, n) {
-        "string" != typeof n && (n = U.ns.defaultNs), z[e] = z[e] || {};
-        var t = z[e][n] || {}, r = !1;
-        for (var a in t) t.hasOwnProperty(a) && (r = !0);
-        return r;
-    }
-    function c(e, n) {
-        return "string" != typeof n && (n = U.ns.defaultNs), z[e] = z[e] || {}, W.extend({}, z[e][n]);
-    }
-    function p(e, n) {
-        "string" != typeof n && (n = U.ns.defaultNs), z[e] = z[e] || {}, z[e][n] = {}, U.useLocalStorage && G._storeLocal(z);
-    }
-    function d(e, n, t, r) {
-        "string" != typeof n ? (resource = n, n = U.ns.defaultNs) : U.ns.namespaces.indexOf(n) < 0 && U.ns.namespaces.push(n), 
-        z[e] = z[e] || {}, z[e][n] = z[e][n] || {};
-        for (var a = t.split(U.keyseparator), o = 0, i = z[e][n]; a[o]; ) o == a.length - 1 ? i[a[o]] = r : (null == i[a[o]] && (i[a[o]] = {}), 
-        i = i[a[o]]), o++;
-        U.useLocalStorage && G._storeLocal(z);
-    }
-    function g(e, n, t) {
-        "string" != typeof n ? (t = n, n = U.ns.defaultNs) : U.ns.namespaces.indexOf(n) < 0 && U.ns.namespaces.push(n);
-        for (var r in t) "string" == typeof t[r] && d(e, n, r, t[r]);
-    }
-    function h(e) {
-        U.ns.defaultNs = e;
-    }
-    function y(e, n) {
-        m([ e ], n);
-    }
-    function m(e, n) {
-        var t = {
-            dynamicLoad: U.dynamicLoad,
-            resGetPath: U.resGetPath,
-            getAsync: U.getAsync,
-            customLoad: U.customLoad,
-            ns: {
-                namespaces: e,
-                defaultNs: ""
-            }
-        }, r = W.toLanguages(U.lng);
-        "string" == typeof U.preload && (U.preload = [ U.preload ]);
-        for (var a = 0, o = U.preload.length; a < o; a++) for (var i = W.toLanguages(U.preload[a]), s = 0, u = i.length; s < u; s++) r.indexOf(i[s]) < 0 && r.push(i[s]);
-        for (var l = [], f = 0, c = r.length; f < c; f++) {
-            var p = !1, d = z[r[f]];
-            if (d) for (var g = 0, h = e.length; g < h; g++) d[e[g]] || (p = !0); else p = !0;
-            p && l.push(r[f]);
-        }
-        l.length ? H.sync._fetch(l, t, function(t, r) {
-            var a = e.length * l.length;
-            W.each(e, function(e, t) {
-                U.ns.namespaces.indexOf(t) < 0 && U.ns.namespaces.push(t), W.each(l, function(e, o) {
-                    z[o] = z[o] || {}, z[o][t] = r[o][t], a--, 0 === a && n && (U.useLocalStorage && H.sync._storeLocal(z), 
-                    n());
-                });
-            });
-        }) : n && n();
-    }
-    function v(e, n, t) {
-        return "function" == typeof n ? (t = n, n = {}) : n || (n = {}), n.lng = e, i(n, t);
-    }
-    function x() {
-        return I;
-    }
-    function b() {
-        var e = [ "ar", "shu", "sqr", "ssh", "xaa", "yhd", "yud", "aao", "abh", "abv", "acm", "acq", "acw", "acx", "acy", "adf", "ads", "aeb", "aec", "afb", "ajp", "apc", "apd", "arb", "arq", "ars", "ary", "arz", "auz", "avl", "ayh", "ayl", "ayn", "ayp", "bbz", "pga", "he", "iw", "ps", "pbt", "pbu", "pst", "prp", "prd", "ur", "ydd", "yds", "yih", "ji", "yi", "hbo", "men", "xmn", "fa", "jpr", "peo", "pes", "prs", "dv", "sam" ];
-        return e.some(function(e) {
-            return new RegExp("^" + e).test(I);
-        }) ? "rtl" : "ltr";
-    }
-    function k(e) {
-        z = {}, v(I, e);
-    }
-    function L() {
-        window.i18next = window.i18n, q ? window.i18n = q : delete window.i18n;
-    }
-    function S() {
-        function e(e, n, t) {
-            if (0 !== n.length) {
-                var r = "text";
-                if (0 === n.indexOf("[")) {
-                    var a = n.split("]");
-                    n = a[1], r = a[0].substr(1, a[0].length - 1);
-                }
-                n.indexOf(";") === n.length - 1 && (n = n.substr(0, n.length - 2));
-                var o;
-                if ("html" === r) o = U.defaultValueFromContent ? V.extend({
-                    defaultValue: e.html()
-                }, t) : t, e.html(V.t(n, o)); else if ("text" === r) o = U.defaultValueFromContent ? V.extend({
-                    defaultValue: e.text()
-                }, t) : t, e.text(V.t(n, o)); else if ("prepend" === r) o = U.defaultValueFromContent ? V.extend({
-                    defaultValue: e.html()
-                }, t) : t, e.prepend(V.t(n, o)); else if ("append" === r) o = U.defaultValueFromContent ? V.extend({
-                    defaultValue: e.html()
-                }, t) : t, e.append(V.t(n, o)); else if (0 === r.indexOf("data-")) {
-                    var i = r.substr("data-".length);
-                    o = U.defaultValueFromContent ? V.extend({
-                        defaultValue: e.data(i)
-                    }, t) : t;
-                    var s = V.t(n, o);
-                    e.data(i, s), e.attr(r, s);
-                } else o = U.defaultValueFromContent ? V.extend({
-                    defaultValue: e.attr(r)
-                }, t) : t, e.attr(r, V.t(n, o));
-            }
-        }
-        function n(n, t) {
-            var r = n.attr(U.selectorAttr);
-            if (r || "undefined" == typeof r || r === !1 || (r = n.text() || n.val()), r) {
-                var a = n, o = n.data("i18n-target");
-                if (o && (a = n.find(o) || n), t || U.useDataAttrOptions !== !0 || (t = n.data("i18n-options")), 
-                t = t || {}, r.indexOf(";") >= 0) {
-                    var i = r.split(";");
-                    V.each(i, function(n, r) {
-                        "" !== r && e(a, r, t);
-                    });
-                } else e(a, r, t);
-                if (U.useDataAttrOptions === !0) {
-                    var s = V.extend({
-                        lng: "non",
-                        lngs: [],
-                        _origLng: "non"
-                    }, t);
-                    delete s.lng, delete s.lngs, delete s._origLng, n.data("i18n-options", s);
-                }
-            }
-        }
-        V.t = V.t || _, V.fn.i18n = function(e) {
-            return this.each(function() {
-                n(V(this), e);
-                var t = V(this).find("[" + U.selectorAttr + "]");
-                t.each(function() {
-                    n(V(this), e);
-                });
-            });
-        };
-    }
-    function w() {
-        function e(e, n, t) {
-            if (0 !== n.length) {
-                var r = "text";
-                if (0 === n.indexOf("[")) {
-                    var a = n.split("]");
-                    n = a[1], r = a[0].substr(1, a[0].length - 1);
-                }
-                n.indexOf(";") === n.length - 1 && (n = n.substr(0, n.length - 2)), "html" === r ? e.innerHTML = _(n, t) : "text" === r ? e.textContent = _(n, t) : "prepend" === r ? e.insertAdjacentHTML(_(n, t), "afterbegin") : "append" === r ? e.insertAdjacentHTML(_(n, t), "beforeend") : e.setAttribute(r, _(n, t));
-            }
-        }
-        function n(n, t) {
-            var r = n.getAttribute(U.selectorAttr);
-            if (r || "undefined" == typeof r || r === !1 || (r = n.textContent || n.value), 
-            r) {
-                var a = n, o = n.getAttribute("i18n-target");
-                if (o && (a = n.querySelector(o) || n), r.indexOf(";") >= 0) for (var i = r.split(";"), s = 0, u = i.length; s < u; s++) "" !== i[s] && e(a, i[s], t); else e(a, r, t);
-            }
-        }
-        H.translateObject = function(e, t) {
-            for (var r = e.querySelectorAll("[" + U.selectorAttr + "]"), a = 0, o = r.length; a < o; a++) n(r[a], t);
-        };
-    }
-    function O(e, n, t, r) {
-        if (!e) return e;
-        if (r = r || n, e.indexOf(r.interpolationPrefix || U.interpolationPrefix) < 0) return e;
-        var a = r.interpolationPrefix ? W.regexEscape(r.interpolationPrefix) : U.interpolationPrefixEscaped, o = r.interpolationSuffix ? W.regexEscape(r.interpolationSuffix) : U.interpolationSuffixEscaped, i = r.keyseparator || U.keyseparator, s = n.replace && "object" == typeof n.replace ? n.replace : n, u = new RegExp([ a, "(.+?)", "(HTML)?", o ].join(""), "g"), l = r.escapeInterpolation || U.escapeInterpolation;
-        return e.replace(u, function(e, n, t) {
-            for (var r = s, a = n; a.indexOf(i) >= 0 && "object" == typeof r && r; ) {
-                var o = a.slice(0, a.indexOf(i));
-                a = a.slice(a.indexOf(i) + 1), r = r[o];
-            }
-            if (r && "object" == typeof r && r.hasOwnProperty(a)) {
-                r[a];
-                return l && !t ? W.escape(r[a]) : r[a];
-            }
-            return e;
-        });
-    }
-    function N(e, n) {
-        var t = ",", r = "{", a = "}", o = W.extend({}, n);
-        for (delete o.postProcess, delete o.isFallbackLookup; e.indexOf(U.reusePrefix) != -1 && (D++, 
-        !(D > U.maxRecursion)); ) {
-            var i = e.lastIndexOf(U.reusePrefix), s = e.indexOf(U.reuseSuffix, i) + U.reuseSuffix.length, u = e.substring(i, s), l = u.replace(U.reusePrefix, "").replace(U.reuseSuffix, "");
-            if (s <= i) return W.error("there is an missing closing in following translation value", e), 
-            "";
-            if (l.indexOf(t) != -1) {
-                var f = l.indexOf(t);
-                if (l.indexOf(r, f) != -1 && l.indexOf(a, f) != -1) {
-                    var c = l.indexOf(r, f), p = l.indexOf(a, c) + a.length;
-                    try {
-                        o = W.extend(o, JSON.parse(l.substring(c, p))), l = l.substring(0, f);
-                    } catch (d) {}
-                }
-            }
-            var g = E(l, o);
-            e = e.replace(u, W.regexReplacementEscape(g));
-        }
-        return e;
-    }
-    function j(e) {
-        return e.context && ("string" == typeof e.context || "number" == typeof e.context);
-    }
-    function P(e, n) {
-        return void 0 !== e.count && "string" != typeof e.count;
-    }
-    function C(e) {
-        return void 0 !== e.indefinite_article && "string" != typeof e.indefinite_article && e.indefinite_article;
-    }
-    function T(e, n) {
-        n = n || {};
-        var t = A(e, n), r = F(e, n);
-        return void 0 !== r || r === t;
-    }
-    function _(e, n) {
-        return B ? (D = 0, E.apply(null, arguments)) : (W.log("i18next not finished initialization. you might have called t function before loading resources finished."), 
-        n && n.defaultValue ? n.detaultValue : "");
-    }
-    function A(e, n) {
-        return void 0 !== n.defaultValue ? n.defaultValue : e;
-    }
-    function M() {
-        for (var e = [], n = 1; n < arguments.length; n++) e.push(arguments[n]);
-        return {
-            postProcess: "sprintf",
-            sprintf: e
-        };
-    }
-    function E(e, n) {
-        if ("undefined" != typeof n && "object" != typeof n ? "sprintf" === U.shortcutFunction ? n = M.apply(null, arguments) : "defaultValue" === U.shortcutFunction && (n = {
-            defaultValue: n
-        }) : n = n || {}, "object" == typeof U.defaultVariables && (n = W.extend({}, U.defaultVariables, n)), 
-        void 0 === e || null === e || "" === e) return "";
-        "number" == typeof e && (e = String(e)), "string" == typeof e && (e = [ e ]);
-        var t = e[0];
-        if (e.length > 1) for (var r = 0; r < e.length && (t = e[r], !T(t, n)); r++) ;
-        var a, o = A(t, n), i = F(t, n), s = n.nsseparator || U.nsseparator, u = n.lng ? W.toLanguages(n.lng, n.fallbackLng) : K, l = n.ns || U.ns.defaultNs;
-        t.indexOf(s) > -1 && (a = t.split(s), l = a[0], t = a[1]), void 0 === i && U.sendMissing && "function" == typeof U.missingKeyHandler && (n.lng ? U.missingKeyHandler(u[0], l, t, o, u) : U.missingKeyHandler(U.lng, l, t, o, u));
-        var f, c, p;
-        if (f = "string" == typeof U.postProcess && "" !== U.postProcess ? [ U.postProcess ] : "array" == typeof U.postProcess || "object" == typeof U.postProcess ? U.postProcess : [], 
-        "string" == typeof n.postProcess && "" !== n.postProcess ? f = f.concat([ n.postProcess ]) : "array" != typeof n.postProcess && "object" != typeof n.postProcess || (f = f.concat(n.postProcess)), 
-        void 0 !== i && f.length) for (p = 0; p < f.length; p += 1) c = f[p], ee[c] && (i = ee[c](i, t, n));
-        var d = o;
-        if (o.indexOf(s) > -1 && (a = o.split(s), d = a[1]), d === t && U.parseMissingKey && (o = U.parseMissingKey(o)), 
-        void 0 === i && (o = O(o, n), o = N(o, n), f.length)) for (i = A(t, n), p = 0; p < f.length; p += 1) c = f[p], 
-        ee[c] && (i = ee[c](i, t, n));
-        return void 0 !== i ? i : o;
-    }
-    function F(e, n) {
-        n = n || {};
-        var t, r, a = A(e, n), o = K;
-        if (!z) return a;
-        if ("cimode" === o[0].toLowerCase()) return a;
-        if (n.lngs && (o = n.lngs), n.lng && (o = W.toLanguages(n.lng, n.fallbackLng), !z[o[0]])) {
-            var i = U.getAsync;
-            U.getAsync = !1, H.sync.load(o, U, function(e, n) {
-                W.extend(z, n), U.getAsync = i;
-            });
-        }
-        var s = n.ns || U.ns.defaultNs, u = n.nsseparator || U.nsseparator;
-        if (e.indexOf(u) > -1) {
-            var l = e.split(u);
-            s = l[0], e = l[1];
-        }
-        if (j(n)) {
-            t = W.extend({}, n), delete t.context, t.defaultValue = U.contextNotFound;
-            var f = s + u + e + "_" + n.context;
-            if (r = _(f, t), r != U.contextNotFound) return O(r, {
-                context: n.context
-            });
-        }
-        if (P(n, o[0])) {
-            t = W.extend({
-                lngs: [ o[0] ]
-            }, n), delete t.count, t._origLng = t._origLng || t.lng || o[0], delete t.lng, t.defaultValue = U.pluralNotFound;
-            var c;
-            if (Z.needsPlural(o[0], n.count)) {
-                c = s + u + e + U.pluralSuffix;
-                var p = Z.get(o[0], n.count);
-                p >= 0 ? c = c + "_" + p : 1 === p && (c = s + u + e);
-            } else c = s + u + e;
-            if (r = _(c, t), r != U.pluralNotFound) return O(r, {
-                count: n.count,
-                interpolationPrefix: n.interpolationPrefix,
-                interpolationSuffix: n.interpolationSuffix
-            });
-            if (!(o.length > 1)) return t.lng = t._origLng, delete t._origLng, r = _(s + u + e, t), 
-            O(r, {
-                count: n.count,
-                interpolationPrefix: n.interpolationPrefix,
-                interpolationSuffix: n.interpolationSuffix
-            });
-            var d = o.slice();
-            if (d.shift(), n = W.extend(n, {
-                lngs: d
-            }), n._origLng = t._origLng, delete n.lng, r = _(s + u + e, n), r != U.pluralNotFound) return r;
-        }
-        if (C(n)) {
-            var g = W.extend({}, n);
-            delete g.indefinite_article, g.defaultValue = U.indefiniteNotFound;
-            var h = s + u + e + (n.count && !P(n, o[0]) || !n.count ? U.indefiniteSuffix : "");
-            if (r = _(h, g), r != U.indefiniteNotFound) return r;
-        }
-        for (var y, m = n.keyseparator || U.keyseparator, v = e.split(m), x = 0, b = o.length; x < b && void 0 === y; x++) {
-            for (var k = o[x], L = 0, S = z[k] && z[k][s]; v[L]; ) S = S && S[v[L]], L++;
-            if (void 0 !== S && (!U.showKeyIfEmpty || "" !== S)) {
-                var w = Object.prototype.toString.apply(S);
-                if ("string" == typeof S) S = O(S, n), S = N(S, n); else if ("[object Array]" !== w || U.returnObjectTrees || n.returnObjectTrees) {
-                    if (null === S && U.fallbackOnNull === !0) S = void 0; else if (null !== S) if (U.returnObjectTrees || n.returnObjectTrees) {
-                        if ("[object Number]" !== w && "[object Function]" !== w && "[object RegExp]" !== w) {
-                            var T = "[object Array]" === w ? [] : {};
-                            W.each(S, function(t) {
-                                T[t] = E(s + u + e + m + t, n);
-                            }), S = T;
-                        }
-                    } else U.objectTreeKeyHandler && "function" == typeof U.objectTreeKeyHandler ? S = U.objectTreeKeyHandler(e, S, k, s, n) : (S = "key '" + s + ":" + e + " (" + k + ")' returned an object instead of string.", 
-                    W.log(S));
-                } else S = S.join("\n"), S = O(S, n), S = N(S, n);
-                "string" == typeof S && "" === S.trim() && U.fallbackOnEmpty === !0 && (S = void 0), 
-                y = S;
-            }
-        }
-        if (void 0 === y && !n.isFallbackLookup && (U.fallbackToDefaultNS === !0 || U.fallbackNS && U.fallbackNS.length > 0)) {
-            if (n.isFallbackLookup = !0, U.fallbackNS.length) {
-                for (var M = 0, R = U.fallbackNS.length; M < R; M++) if (y = F(U.fallbackNS[M] + u + e, n), 
-                y || "" === y && U.fallbackOnEmpty === !1) {
-                    var I = y.indexOf(u) > -1 ? y.split(u)[1] : y, V = a.indexOf(u) > -1 ? a.split(u)[1] : a;
-                    if (I !== V) break;
-                }
-            } else n.ns = U.ns.defaultNs, y = F(e, n);
-            n.isFallbackLookup = !1;
-        }
-        return y;
-    }
-    function R() {
-        var e, n = U.lngWhitelist || [], t = [];
-        if ("undefined" != typeof window && !function() {
-            for (var e = window.location.search.substring(1), n = e.split("&"), r = 0; r < n.length; r++) {
-                var a = n[r].indexOf("=");
-                if (a > 0) {
-                    var o = n[r].substring(0, a);
-                    o == U.detectLngQS && t.push(n[r].substring(a + 1));
-                }
-            }
-        }(), U.useCookie && "undefined" != typeof document) {
-            var r = W.cookie.read(U.cookieName);
-            r && t.push(r);
-        }
-        if (U.detectLngFromLocalStorage && "undefined" != typeof window && window.localStorage) {
-            var a = W.localStorage.getItem("i18next_lng");
-            a && t.push(a);
-        }
-        if ("undefined" != typeof navigator) {
-            if (navigator.languages) for (var o = 0; o < navigator.languages.length; o++) t.push(navigator.languages[o]);
-            navigator.userLanguage && t.push(navigator.userLanguage), navigator.language && t.push(navigator.language);
-        }
-        return function() {
-            for (var r = 0; r < t.length; r++) {
-                var a = t[r];
-                if (a.indexOf("-") > -1) {
-                    var o = a.split("-");
-                    a = U.lowerCaseLng ? o[0].toLowerCase() + "-" + o[1].toLowerCase() : o[0].toLowerCase() + "-" + o[1].toUpperCase();
-                }
-                if (0 === n.length || n.indexOf(a) > -1) {
-                    e = a;
-                    break;
-                }
-            }
-        }(), e || (e = U.fallbackLng[0]), e;
-    }
-    Array.prototype.indexOf || (Array.prototype.indexOf = function(e) {
-        "use strict";
-        if (null == this) throw new TypeError();
-        var n = Object(this), t = n.length >>> 0;
-        if (0 === t) return -1;
-        var r = 0;
-        if (arguments.length > 0 && (r = Number(arguments[1]), r != r ? r = 0 : 0 != r && r != 1 / 0 && r != -(1 / 0) && (r = (r > 0 || -1) * Math.floor(Math.abs(r)))), 
-        r >= t) return -1;
-        for (var a = r >= 0 ? r : Math.max(t - Math.abs(r), 0); a < t; a++) if (a in n && n[a] === e) return a;
-        return -1;
-    }), Array.prototype.lastIndexOf || (Array.prototype.lastIndexOf = function(e) {
-        "use strict";
-        if (null == this) throw new TypeError();
-        var n = Object(this), t = n.length >>> 0;
-        if (0 === t) return -1;
-        var r = t;
-        arguments.length > 1 && (r = Number(arguments[1]), r != r ? r = 0 : 0 != r && r != 1 / 0 && r != -(1 / 0) && (r = (r > 0 || -1) * Math.floor(Math.abs(r))));
-        for (var a = r >= 0 ? Math.min(r, t - 1) : t - Math.abs(r); a >= 0; a--) if (a in n && n[a] === e) return a;
-        return -1;
-    }), "function" != typeof String.prototype.trim && (String.prototype.trim = function() {
-        return this.replace(/^\s+|\s+$/g, "");
-    });
-    var I, V = e.jQuery || e.Zepto, H = {}, z = {}, D = 0, K = [], B = !1, G = {}, q = null;
-    "undefined" != typeof module && module.exports ? module.exports = H : (V && (V.i18n = V.i18n || H), 
-    e.i18n && (q = e.i18n), e.i18n = H), G = {
-        load: function(e, n, t) {
-            n.useLocalStorage ? G._loadLocal(e, n, function(r, a) {
-                for (var o = [], i = 0, s = e.length; i < s; i++) a[e[i]] || o.push(e[i]);
-                o.length > 0 ? G._fetch(o, n, function(e, n) {
-                    W.extend(a, n), G._storeLocal(n), t(e, a);
-                }) : t(r, a);
-            }) : G._fetch(e, n, function(e, n) {
-                t(e, n);
-            });
-        },
-        _loadLocal: function(e, n, t) {
-            var r = {}, a = new Date().getTime();
-            if (window.localStorage) {
-                var o = e.length;
-                W.each(e, function(e, i) {
-                    var s = W.localStorage.getItem("res_" + i);
-                    s && (s = JSON.parse(s), s.i18nStamp && s.i18nStamp + n.localStorageExpirationTime > a && (r[i] = s)), 
-                    o--, 0 === o && t(null, r);
-                });
-            }
-        },
-        _storeLocal: function(e) {
-            if (window.localStorage) for (var n in e) e[n].i18nStamp = new Date().getTime(), 
-            W.localStorage.setItem("res_" + n, JSON.stringify(e[n]));
-        },
-        _fetch: function(e, n, t) {
-            var r = n.ns, a = {};
-            if (n.dynamicLoad) {
-                var o = function(e, n) {
-                    t(e, n);
-                };
-                if ("function" == typeof n.customLoad) n.customLoad(e, r.namespaces, n, o); else {
-                    var i = O(n.resGetPath, {
-                        lng: e.join("+"),
-                        ns: r.namespaces.join("+")
-                    });
-                    W.ajax({
-                        url: i,
-                        cache: n.cache,
-                        success: function(e, n, t) {
-                            W.log("loaded: " + i), o(null, e);
-                        },
-                        error: function(e, n, t) {
-                            W.log("failed loading: " + i), o("failed loading resource.json error: " + t);
-                        },
-                        dataType: "json",
-                        async: n.getAsync,
-                        timeout: n.ajaxTimeout
-                    });
-                }
-            } else {
-                var s, u = r.namespaces.length * e.length;
-                W.each(r.namespaces, function(r, o) {
-                    W.each(e, function(e, r) {
-                        var i = function(e, n) {
-                            e && (s = s || [], s.push(e)), a[r] = a[r] || {}, a[r][o] = n, u--, 0 === u && t(s, a);
-                        };
-                        "function" == typeof n.customLoad ? n.customLoad(r, o, n, i) : G._fetchOne(r, o, n, i);
-                    });
-                });
-            }
-        },
-        _fetchOne: function(e, n, t, r) {
-            var a = O(t.resGetPath, {
-                lng: e,
-                ns: n
-            });
-            W.ajax({
-                url: a,
-                cache: t.cache,
-                success: function(e, n, t) {
-                    W.log("loaded: " + a), r(null, e);
-                },
-                error: function(e, n, t) {
-                    if (n && 200 == n || e && e.status && 200 == e.status) W.error("There is a typo in: " + a); else if (n && 404 == n || e && e.status && 404 == e.status) W.log("Does not exist: " + a); else {
-                        var o = n ? n : e && e.status ? e.status : null;
-                        W.log(o + " when loading " + a);
-                    }
-                    r(t, {});
-                },
-                dataType: "json",
-                async: t.getAsync,
-                timeout: t.ajaxTimeout,
-                headers: t.headers
-            });
-        },
-        postMissing: function(e, n, t, r, a) {
-            var o = {};
-            o[t] = r;
-            var i = [];
-            if ("fallback" === U.sendMissingTo && U.fallbackLng[0] !== !1) for (var s = 0; s < U.fallbackLng.length; s++) i.push({
-                lng: U.fallbackLng[s],
-                url: O(U.resPostPath, {
-                    lng: U.fallbackLng[s],
-                    ns: n
-                })
-            }); else if ("current" === U.sendMissingTo || "fallback" === U.sendMissingTo && U.fallbackLng[0] === !1) i.push({
-                lng: e,
-                url: O(U.resPostPath, {
-                    lng: e,
-                    ns: n
-                })
-            }); else if ("all" === U.sendMissingTo) for (var s = 0, u = a.length; s < u; s++) i.push({
-                lng: a[s],
-                url: O(U.resPostPath, {
-                    lng: a[s],
-                    ns: n
-                })
-            });
-            for (var l = 0, f = i.length; l < f; l++) {
-                var c = i[l];
-                W.ajax({
-                    url: c.url,
-                    type: U.sendType,
-                    data: o,
-                    success: function(e, a, o) {
-                        W.log("posted missing key '" + t + "' to: " + c.url);
-                        for (var i = t.split("."), s = 0, u = z[c.lng][n]; i[s]; ) u = s === i.length - 1 ? u[i[s]] = r : u[i[s]] = u[i[s]] || {}, 
-                        s++;
-                    },
-                    error: function(e, n, r) {
-                        W.log("failed posting missing key '" + t + "' to: " + c.url);
-                    },
-                    dataType: "json",
-                    async: U.postAsync,
-                    timeout: U.ajaxTimeout
-                });
-            }
-        },
-        reload: k
-    };
-    var U = {
-        lng: void 0,
-        load: "all",
-        preload: [],
-        lowerCaseLng: !1,
-        returnObjectTrees: !1,
-        fallbackLng: [ "dev" ],
-        fallbackNS: [],
-        detectLngQS: "setLng",
-        detectLngFromLocalStorage: !1,
-        ns: {
-            namespaces: [ "translation" ],
-            defaultNs: "translation"
-        },
-        fallbackOnNull: !0,
-        fallbackOnEmpty: !1,
-        fallbackToDefaultNS: !1,
-        showKeyIfEmpty: !1,
-        nsseparator: ":",
-        keyseparator: ".",
-        selectorAttr: "data-i18n",
-        debug: !1,
-        resGetPath: "locales/__lng__/__ns__.json",
-        resPostPath: "locales/add/__lng__/__ns__",
-        getAsync: !0,
-        postAsync: !0,
-        resStore: void 0,
-        useLocalStorage: !1,
-        localStorageExpirationTime: 6048e5,
-        dynamicLoad: !1,
-        sendMissing: !1,
-        sendMissingTo: "fallback",
-        sendType: "POST",
-        interpolationPrefix: "__",
-        interpolationSuffix: "__",
-        defaultVariables: !1,
-        reusePrefix: "$t(",
-        reuseSuffix: ")",
-        pluralSuffix: "_plural",
-        pluralNotFound: [ "plural_not_found", Math.random() ].join(""),
-        contextNotFound: [ "context_not_found", Math.random() ].join(""),
-        escapeInterpolation: !1,
-        indefiniteSuffix: "_indefinite",
-        indefiniteNotFound: [ "indefinite_not_found", Math.random() ].join(""),
-        setJqueryExt: !0,
-        defaultValueFromContent: !0,
-        useDataAttrOptions: !1,
-        cookieExpirationTime: void 0,
-        useCookie: !0,
-        cookieName: "i18next",
-        cookieDomain: void 0,
-        objectTreeKeyHandler: void 0,
-        postProcess: void 0,
-        parseMissingKey: void 0,
-        missingKeyHandler: G.postMissing,
-        ajaxTimeout: 0,
-        shortcutFunction: "sprintf"
-    }, J = {
-        "&": "&amp;",
-        "<": "&lt;",
-        ">": "&gt;",
-        '"': "&quot;",
-        "'": "&#39;",
-        "/": "&#x2F;"
-    }, $ = {
-        create: function(e, n, t, r) {
-            var a;
-            if (t) {
-                var o = new Date();
-                o.setTime(o.getTime() + 60 * t * 1e3), a = "; expires=" + o.toGMTString();
-            } else a = "";
-            r = r ? "domain=" + r + ";" : "", document.cookie = e + "=" + n + a + ";" + r + "path=/";
-        },
-        read: function(e) {
-            for (var n = e + "=", t = document.cookie.split(";"), r = 0; r < t.length; r++) {
-                for (var a = t[r]; " " == a.charAt(0); ) a = a.substring(1, a.length);
-                if (0 === a.indexOf(n)) return a.substring(n.length, a.length);
-            }
-            return null;
-        },
-        remove: function(e) {
-            this.create(e, "", -1);
-        }
-    }, X = {
-        create: function(e, n, t, r) {},
-        read: function(e) {
-            return null;
-        },
-        remove: function(e) {}
-    }, W = {
-        extend: V ? V.extend : n,
-        deepExtend: t,
-        each: V ? V.each : r,
-        ajax: V ? V.ajax : "undefined" != typeof document ? o : function() {},
-        cookie: "undefined" != typeof document ? $ : X,
-        detectLanguage: R,
-        escape: a,
-        log: function(e) {
-            U.debug && "undefined" != typeof console && console.log(e);
-        },
-        error: function(e) {
-            "undefined" != typeof console && console.error(e);
-        },
-        getCountyIndexOfLng: function(e) {
-            var n = 0;
-            return "nb-NO" !== e && "nn-NO" !== e && "nb-no" !== e && "nn-no" !== e || (n = 1), 
-            n;
-        },
-        toLanguages: function(e, n) {
-            function t(e) {
-                var n = e;
-                if ("string" == typeof e && e.indexOf("-") > -1) {
-                    var t = e.split("-");
-                    n = U.lowerCaseLng ? t[0].toLowerCase() + "-" + t[1].toLowerCase() : t[0].toLowerCase() + "-" + t[1].toUpperCase();
-                } else n = U.lowerCaseLng ? e.toLowerCase() : e;
-                return n;
-            }
-            var r = this.log;
-            n = n || U.fallbackLng, "string" == typeof n && (n = [ n ]);
-            var a = [], o = U.lngWhitelist || !1, i = function(e) {
-                !o || o.indexOf(e) > -1 ? a.push(e) : r("rejecting non-whitelisted language: " + e);
-            };
-            if ("string" == typeof e && e.indexOf("-") > -1) {
-                var s = e.split("-");
-                "unspecific" !== U.load && i(t(e)), "current" !== U.load && i(t(s[this.getCountyIndexOfLng(e)]));
-            } else i(t(e));
-            for (var u = 0; u < n.length; u++) a.indexOf(n[u]) === -1 && n[u] && a.push(t(n[u]));
-            return a;
-        },
-        regexEscape: function(e) {
-            return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
-        },
-        regexReplacementEscape: function(e) {
-            return "string" == typeof e ? e.replace(/\$/g, "$$$$") : e;
-        },
-        localStorage: {
-            setItem: function(e, n) {
-                if (window.localStorage) try {
-                    window.localStorage.setItem(e, n);
-                } catch (t) {
-                    W.log('failed to set value for key "' + e + '" to localStorage.');
-                }
-            },
-            getItem: function(e, n) {
-                if (window.localStorage) try {
-                    return window.localStorage.getItem(e, n);
-                } catch (t) {
-                    return void W.log('failed to get value for key "' + e + '" from localStorage.');
-                }
-            }
-        }
-    };
-    W.applyReplacement = O;
-    var Q = [ [ "ach", "Acholi", [ 1, 2 ], 1 ], [ "af", "Afrikaans", [ 1, 2 ], 2 ], [ "ak", "Akan", [ 1, 2 ], 1 ], [ "am", "Amharic", [ 1, 2 ], 1 ], [ "an", "Aragonese", [ 1, 2 ], 2 ], [ "ar", "Arabic", [ 0, 1, 2, 3, 11, 100 ], 5 ], [ "arn", "Mapudungun", [ 1, 2 ], 1 ], [ "ast", "Asturian", [ 1, 2 ], 2 ], [ "ay", "Aymará", [ 1 ], 3 ], [ "az", "Azerbaijani", [ 1, 2 ], 2 ], [ "be", "Belarusian", [ 1, 2, 5 ], 4 ], [ "bg", "Bulgarian", [ 1, 2 ], 2 ], [ "bn", "Bengali", [ 1, 2 ], 2 ], [ "bo", "Tibetan", [ 1 ], 3 ], [ "br", "Breton", [ 1, 2 ], 1 ], [ "bs", "Bosnian", [ 1, 2, 5 ], 4 ], [ "ca", "Catalan", [ 1, 2 ], 2 ], [ "cgg", "Chiga", [ 1 ], 3 ], [ "cs", "Czech", [ 1, 2, 5 ], 6 ], [ "csb", "Kashubian", [ 1, 2, 5 ], 7 ], [ "cy", "Welsh", [ 1, 2, 3, 8 ], 8 ], [ "da", "Danish", [ 1, 2 ], 2 ], [ "de", "German", [ 1, 2 ], 2 ], [ "dev", "Development Fallback", [ 1, 2 ], 2 ], [ "dz", "Dzongkha", [ 1 ], 3 ], [ "el", "Greek", [ 1, 2 ], 2 ], [ "en", "English", [ 1, 2 ], 2 ], [ "eo", "Esperanto", [ 1, 2 ], 2 ], [ "es", "Spanish", [ 1, 2 ], 2 ], [ "es_ar", "Argentinean Spanish", [ 1, 2 ], 2 ], [ "et", "Estonian", [ 1, 2 ], 2 ], [ "eu", "Basque", [ 1, 2 ], 2 ], [ "fa", "Persian", [ 1 ], 3 ], [ "fi", "Finnish", [ 1, 2 ], 2 ], [ "fil", "Filipino", [ 1, 2 ], 1 ], [ "fo", "Faroese", [ 1, 2 ], 2 ], [ "fr", "French", [ 1, 2 ], 9 ], [ "fur", "Friulian", [ 1, 2 ], 2 ], [ "fy", "Frisian", [ 1, 2 ], 2 ], [ "ga", "Irish", [ 1, 2, 3, 7, 11 ], 10 ], [ "gd", "Scottish Gaelic", [ 1, 2, 3, 20 ], 11 ], [ "gl", "Galician", [ 1, 2 ], 2 ], [ "gu", "Gujarati", [ 1, 2 ], 2 ], [ "gun", "Gun", [ 1, 2 ], 1 ], [ "ha", "Hausa", [ 1, 2 ], 2 ], [ "he", "Hebrew", [ 1, 2 ], 2 ], [ "hi", "Hindi", [ 1, 2 ], 2 ], [ "hr", "Croatian", [ 1, 2, 5 ], 4 ], [ "hu", "Hungarian", [ 1, 2 ], 2 ], [ "hy", "Armenian", [ 1, 2 ], 2 ], [ "ia", "Interlingua", [ 1, 2 ], 2 ], [ "id", "Indonesian", [ 1 ], 3 ], [ "is", "Icelandic", [ 1, 2 ], 12 ], [ "it", "Italian", [ 1, 2 ], 2 ], [ "ja", "Japanese", [ 1 ], 3 ], [ "jbo", "Lojban", [ 1 ], 3 ], [ "jv", "Javanese", [ 0, 1 ], 13 ], [ "ka", "Georgian", [ 1 ], 3 ], [ "kk", "Kazakh", [ 1 ], 3 ], [ "km", "Khmer", [ 1 ], 3 ], [ "kn", "Kannada", [ 1, 2 ], 2 ], [ "ko", "Korean", [ 1 ], 3 ], [ "ku", "Kurdish", [ 1, 2 ], 2 ], [ "kw", "Cornish", [ 1, 2, 3, 4 ], 14 ], [ "ky", "Kyrgyz", [ 1 ], 3 ], [ "lb", "Letzeburgesch", [ 1, 2 ], 2 ], [ "ln", "Lingala", [ 1, 2 ], 1 ], [ "lo", "Lao", [ 1 ], 3 ], [ "lt", "Lithuanian", [ 1, 2, 10 ], 15 ], [ "lv", "Latvian", [ 1, 2, 0 ], 16 ], [ "mai", "Maithili", [ 1, 2 ], 2 ], [ "mfe", "Mauritian Creole", [ 1, 2 ], 1 ], [ "mg", "Malagasy", [ 1, 2 ], 1 ], [ "mi", "Maori", [ 1, 2 ], 1 ], [ "mk", "Macedonian", [ 1, 2 ], 17 ], [ "ml", "Malayalam", [ 1, 2 ], 2 ], [ "mn", "Mongolian", [ 1, 2 ], 2 ], [ "mnk", "Mandinka", [ 0, 1, 2 ], 18 ], [ "mr", "Marathi", [ 1, 2 ], 2 ], [ "ms", "Malay", [ 1 ], 3 ], [ "mt", "Maltese", [ 1, 2, 11, 20 ], 19 ], [ "nah", "Nahuatl", [ 1, 2 ], 2 ], [ "nap", "Neapolitan", [ 1, 2 ], 2 ], [ "nb", "Norwegian Bokmal", [ 1, 2 ], 2 ], [ "ne", "Nepali", [ 1, 2 ], 2 ], [ "nl", "Dutch", [ 1, 2 ], 2 ], [ "nn", "Norwegian Nynorsk", [ 1, 2 ], 2 ], [ "no", "Norwegian", [ 1, 2 ], 2 ], [ "nso", "Northern Sotho", [ 1, 2 ], 2 ], [ "oc", "Occitan", [ 1, 2 ], 1 ], [ "or", "Oriya", [ 2, 1 ], 2 ], [ "pa", "Punjabi", [ 1, 2 ], 2 ], [ "pap", "Papiamento", [ 1, 2 ], 2 ], [ "pl", "Polish", [ 1, 2, 5 ], 7 ], [ "pms", "Piemontese", [ 1, 2 ], 2 ], [ "ps", "Pashto", [ 1, 2 ], 2 ], [ "pt", "Portuguese", [ 1, 2 ], 2 ], [ "pt_br", "Brazilian Portuguese", [ 1, 2 ], 2 ], [ "rm", "Romansh", [ 1, 2 ], 2 ], [ "ro", "Romanian", [ 1, 2, 20 ], 20 ], [ "ru", "Russian", [ 1, 2, 5 ], 4 ], [ "sah", "Yakut", [ 1 ], 3 ], [ "sco", "Scots", [ 1, 2 ], 2 ], [ "se", "Northern Sami", [ 1, 2 ], 2 ], [ "si", "Sinhala", [ 1, 2 ], 2 ], [ "sk", "Slovak", [ 1, 2, 5 ], 6 ], [ "sl", "Slovenian", [ 5, 1, 2, 3 ], 21 ], [ "so", "Somali", [ 1, 2 ], 2 ], [ "son", "Songhay", [ 1, 2 ], 2 ], [ "sq", "Albanian", [ 1, 2 ], 2 ], [ "sr", "Serbian", [ 1, 2, 5 ], 4 ], [ "su", "Sundanese", [ 1 ], 3 ], [ "sv", "Swedish", [ 1, 2 ], 2 ], [ "sw", "Swahili", [ 1, 2 ], 2 ], [ "ta", "Tamil", [ 1, 2 ], 2 ], [ "te", "Telugu", [ 1, 2 ], 2 ], [ "tg", "Tajik", [ 1, 2 ], 1 ], [ "th", "Thai", [ 1 ], 3 ], [ "ti", "Tigrinya", [ 1, 2 ], 1 ], [ "tk", "Turkmen", [ 1, 2 ], 2 ], [ "tr", "Turkish", [ 1, 2 ], 1 ], [ "tt", "Tatar", [ 1 ], 3 ], [ "ug", "Uyghur", [ 1 ], 3 ], [ "uk", "Ukrainian", [ 1, 2, 5 ], 4 ], [ "ur", "Urdu", [ 1, 2 ], 2 ], [ "uz", "Uzbek", [ 1, 2 ], 1 ], [ "vi", "Vietnamese", [ 1 ], 3 ], [ "wa", "Walloon", [ 1, 2 ], 1 ], [ "wo", "Wolof", [ 1 ], 3 ], [ "yo", "Yoruba", [ 1, 2 ], 2 ], [ "zh", "Chinese", [ 1 ], 3 ] ], Y = {
-        1: function(e) {
-            return Number(e > 1);
-        },
-        2: function(e) {
-            return Number(1 != e);
-        },
-        3: function(e) {
-            return 0;
-        },
-        4: function(e) {
-            return Number(e % 10 == 1 && e % 100 != 11 ? 0 : e % 10 >= 2 && e % 10 <= 4 && (e % 100 < 10 || e % 100 >= 20) ? 1 : 2);
-        },
-        5: function(e) {
-            return Number(0 === e ? 0 : 1 == e ? 1 : 2 == e ? 2 : e % 100 >= 3 && e % 100 <= 10 ? 3 : e % 100 >= 11 ? 4 : 5);
-        },
-        6: function(e) {
-            return Number(1 == e ? 0 : e >= 2 && e <= 4 ? 1 : 2);
-        },
-        7: function(e) {
-            return Number(1 == e ? 0 : e % 10 >= 2 && e % 10 <= 4 && (e % 100 < 10 || e % 100 >= 20) ? 1 : 2);
-        },
-        8: function(e) {
-            return Number(1 == e ? 0 : 2 == e ? 1 : 8 != e && 11 != e ? 2 : 3);
-        },
-        9: function(e) {
-            return Number(e >= 2);
-        },
-        10: function(e) {
-            return Number(1 == e ? 0 : 2 == e ? 1 : e < 7 ? 2 : e < 11 ? 3 : 4);
-        },
-        11: function(e) {
-            return Number(1 == e || 11 == e ? 0 : 2 == e || 12 == e ? 1 : e > 2 && e < 20 ? 2 : 3);
-        },
-        12: function(e) {
-            return Number(e % 10 != 1 || e % 100 == 11);
-        },
-        13: function(e) {
-            return Number(0 !== e);
-        },
-        14: function(e) {
-            return Number(1 == e ? 0 : 2 == e ? 1 : 3 == e ? 2 : 3);
-        },
-        15: function(e) {
-            return Number(e % 10 == 1 && e % 100 != 11 ? 0 : e % 10 >= 2 && (e % 100 < 10 || e % 100 >= 20) ? 1 : 2);
-        },
-        16: function(e) {
-            return Number(e % 10 == 1 && e % 100 != 11 ? 0 : 0 !== e ? 1 : 2);
-        },
-        17: function(e) {
-            return Number(1 == e || e % 10 == 1 ? 0 : 1);
-        },
-        18: function(e) {
-            return Number(0 == e ? 0 : 1 == e ? 1 : 2);
-        },
-        19: function(e) {
-            return Number(1 == e ? 0 : 0 === e || e % 100 > 1 && e % 100 < 11 ? 1 : e % 100 > 10 && e % 100 < 20 ? 2 : 3);
-        },
-        20: function(e) {
-            return Number(1 == e ? 0 : 0 === e || e % 100 > 0 && e % 100 < 20 ? 1 : 2);
-        },
-        21: function(e) {
-            return Number(e % 100 == 1 ? 1 : e % 100 == 2 ? 2 : e % 100 == 3 || e % 100 == 4 ? 3 : 0);
-        }
-    }, Z = {
-        rules: function() {
-            var e, n = {};
-            for (e = Q.length; e--; ) n[Q[e][0]] = {
-                name: Q[e][1],
-                numbers: Q[e][2],
-                plurals: Y[Q[e][3]]
-            };
-            return n;
-        }(),
-        addRule: function(e, n) {
-            Z.rules[e] = n;
-        },
-        setCurrentLng: function(e) {
-            if (!Z.currentRule || Z.currentRule.lng !== e) {
-                var n = e.split("-");
-                Z.currentRule = {
-                    lng: e,
-                    rule: Z.rules[n[0]]
-                };
-            }
-        },
-        needsPlural: function(e, n) {
-            var t, r = e.split("-");
-            return t = Z.currentRule && Z.currentRule.lng === e ? Z.currentRule.rule : Z.rules[r[W.getCountyIndexOfLng(e)]], 
-            !(t && t.numbers.length <= 1) && 1 !== this.get(e, n);
-        },
-        get: function(e, n) {
-            function t(n, t) {
-                var r;
-                if (r = Z.currentRule && Z.currentRule.lng === e ? Z.currentRule.rule : Z.rules[n]) {
-                    var a;
-                    a = r.noAbs ? r.plurals(t) : r.plurals(Math.abs(t));
-                    var o = r.numbers[a];
-                    return 2 === r.numbers.length && 1 === r.numbers[0] && (2 === o ? o = -1 : 1 === o && (o = 1)), 
-                    o;
-                }
-                return 1 === t ? "1" : "-1";
-            }
-            var r = e.split("-");
-            return t(r[W.getCountyIndexOfLng(e)], n);
-        }
-    }, ee = {}, ne = function(e, n) {
-        ee[e] = n;
-    }, te = function() {
-        function e(e) {
-            return Object.prototype.toString.call(e).slice(8, -1).toLowerCase();
-        }
-        function n(e, n) {
-            for (var t = []; n > 0; t[--n] = e) ;
-            return t.join("");
-        }
-        var t = function() {
-            return t.cache.hasOwnProperty(arguments[0]) || (t.cache[arguments[0]] = t.parse(arguments[0])), 
-            t.format.call(null, t.cache[arguments[0]], arguments);
-        };
-        return t.format = function(t, r) {
-            var a, o, i, s, u, l, f, c = 1, p = t.length, d = "", g = [];
-            for (o = 0; o < p; o++) if (d = e(t[o]), "string" === d) g.push(t[o]); else if ("array" === d) {
-                if (s = t[o], s[2]) for (a = r[c], i = 0; i < s[2].length; i++) {
-                    if (!a.hasOwnProperty(s[2][i])) throw te('[sprintf] property "%s" does not exist', s[2][i]);
-                    a = a[s[2][i]];
-                } else a = s[1] ? r[s[1]] : r[c++];
-                if (/[^s]/.test(s[8]) && "number" != e(a)) throw te("[sprintf] expecting number but found %s", e(a));
-                switch (s[8]) {
-                  case "b":
-                    a = a.toString(2);
-                    break;
-
-                  case "c":
-                    a = String.fromCharCode(a);
-                    break;
-
-                  case "d":
-                    a = parseInt(a, 10);
-                    break;
-
-                  case "e":
-                    a = s[7] ? a.toExponential(s[7]) : a.toExponential();
-                    break;
-
-                  case "f":
-                    a = s[7] ? parseFloat(a).toFixed(s[7]) : parseFloat(a);
-                    break;
-
-                  case "o":
-                    a = a.toString(8);
-                    break;
-
-                  case "s":
-                    a = (a = String(a)) && s[7] ? a.substring(0, s[7]) : a;
-                    break;
-
-                  case "u":
-                    a = Math.abs(a);
-                    break;
-
-                  case "x":
-                    a = a.toString(16);
-                    break;
-
-                  case "X":
-                    a = a.toString(16).toUpperCase();
-                }
-                a = /[def]/.test(s[8]) && s[3] && a >= 0 ? "+" + a : a, l = s[4] ? "0" == s[4] ? "0" : s[4].charAt(1) : " ", 
-                f = s[6] - String(a).length, u = s[6] ? n(l, f) : "", g.push(s[5] ? a + u : u + a);
-            }
-            return g.join("");
-        }, t.cache = {}, t.parse = function(e) {
-            for (var n = e, t = [], r = [], a = 0; n; ) {
-                if (null !== (t = /^[^\x25]+/.exec(n))) r.push(t[0]); else if (null !== (t = /^\x25{2}/.exec(n))) r.push("%"); else {
-                    if (null === (t = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(n))) throw "[sprintf] huh?";
-                    if (t[2]) {
-                        a |= 1;
-                        var o = [], i = t[2], s = [];
-                        if (null === (s = /^([a-z_][a-z_\d]*)/i.exec(i))) throw "[sprintf] huh?";
-                        for (o.push(s[1]); "" !== (i = i.substring(s[0].length)); ) if (null !== (s = /^\.([a-z_][a-z_\d]*)/i.exec(i))) o.push(s[1]); else {
-                            if (null === (s = /^\[(\d+)\]/.exec(i))) throw "[sprintf] huh?";
-                            o.push(s[1]);
-                        }
-                        t[2] = o;
-                    } else a |= 2;
-                    if (3 === a) throw "[sprintf] mixing positional and named placeholders is not (yet) supported";
-                    r.push(t);
-                }
-                n = n.substring(t[0].length);
-            }
-            return r;
-        }, t;
-    }(), re = function(e, n) {
-        return n.unshift(e), te.apply(null, n);
-    };
-    ne("sprintf", function(e, n, t) {
-        return t.sprintf ? "[object Array]" === Object.prototype.toString.apply(t.sprintf) ? re(e, t.sprintf) : "object" == typeof t.sprintf ? te(e, t.sprintf) : e : e;
-    }), H.init = i, H.isInitialized = s, H.setLng = v, H.preload = u, H.addResourceBundle = l, 
-    H.hasResourceBundle = f, H.getResourceBundle = c, H.addResource = d, H.addResources = g, 
-    H.removeResourceBundle = p, H.loadNamespace = y, H.loadNamespaces = m, H.setDefaultNamespace = h, 
-    H.t = _, H.translate = _, H.exists = T, H.detectLanguage = W.detectLanguage, H.pluralExtensions = Z, 
-    H.sync = G, H.functions = W, H.lng = x, H.dir = b, H.addPostProcessor = ne, H.applyReplacement = W.applyReplacement, 
-    H.options = U, H.noConflict = L;
-}("undefined" == typeof exports ? window : exports);
-!function(t) {
-    if ("object" == typeof exports && "undefined" != typeof module) module.exports = t(); else if ("function" == typeof define && define.amd) define([], t); else {
-        var e;
-        e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, 
-        e.Clipboard = t();
-    }
-}(function() {
-    return function t(e, n, o) {
-        function r(c, a) {
-            if (!n[c]) {
-                if (!e[c]) {
-                    var s = "function" == typeof require && require;
-                    if (!a && s) return s(c, !0);
-                    if (i) return i(c, !0);
-                    var u = new Error("Cannot find module '" + c + "'");
-                    throw u.code = "MODULE_NOT_FOUND", u;
-                }
-                var l = n[c] = {
-                    exports: {}
-                };
-                e[c][0].call(l.exports, function(t) {
-                    var n = e[c][1][t];
-                    return r(n ? n : t);
-                }, l, l.exports, t, e, n, o);
-            }
-            return n[c].exports;
-        }
-        for (var i = "function" == typeof require && require, c = 0; c < o.length; c++) r(o[c]);
-        return r;
-    }({
-        1: [ function(t, e, n) {
-            var o = t("matches-selector");
-            e.exports = function(t, e, n) {
-                for (var r = n ? t : t.parentNode; r && r !== document; ) {
-                    if (o(r, e)) return r;
-                    r = r.parentNode;
-                }
-            };
-        }, {
-            "matches-selector": 2
-        } ],
-        2: [ function(t, e, n) {
-            function o(t, e) {
-                if (i) return i.call(t, e);
-                for (var n = t.parentNode.querySelectorAll(e), o = 0; o < n.length; ++o) if (n[o] == t) return !0;
-                return !1;
-            }
-            var r = Element.prototype, i = r.matchesSelector || r.webkitMatchesSelector || r.mozMatchesSelector || r.msMatchesSelector || r.oMatchesSelector;
-            e.exports = o;
-        }, {} ],
-        3: [ function(t, e, n) {
-            function o(t, e, n, o) {
-                var i = r.apply(this, arguments);
-                return t.addEventListener(n, i), {
-                    destroy: function() {
-                        t.removeEventListener(n, i);
-                    }
-                };
-            }
-            function r(t, e, n, o) {
-                return function(n) {
-                    n.delegateTarget = i(n.target, e, !0), n.delegateTarget && o.call(t, n);
-                };
-            }
-            var i = t("closest");
-            e.exports = o;
-        }, {
-            closest: 1
-        } ],
-        4: [ function(t, e, n) {
-            n.node = function(t) {
-                return void 0 !== t && t instanceof HTMLElement && 1 === t.nodeType;
-            }, n.nodeList = function(t) {
-                var e = Object.prototype.toString.call(t);
-                return void 0 !== t && ("[object NodeList]" === e || "[object HTMLCollection]" === e) && "length" in t && (0 === t.length || n.node(t[0]));
-            }, n.string = function(t) {
-                return "string" == typeof t || t instanceof String;
-            }, n["function"] = function(t) {
-                var e = Object.prototype.toString.call(t);
-                return "[object Function]" === e;
-            };
-        }, {} ],
-        5: [ function(t, e, n) {
-            function o(t, e, n) {
-                if (!t && !e && !n) throw new Error("Missing required arguments");
-                if (!a.string(e)) throw new TypeError("Second argument must be a String");
-                if (!a["function"](n)) throw new TypeError("Third argument must be a Function");
-                if (a.node(t)) return r(t, e, n);
-                if (a.nodeList(t)) return i(t, e, n);
-                if (a.string(t)) return c(t, e, n);
-                throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");
-            }
-            function r(t, e, n) {
-                return t.addEventListener(e, n), {
-                    destroy: function() {
-                        t.removeEventListener(e, n);
-                    }
-                };
-            }
-            function i(t, e, n) {
-                return Array.prototype.forEach.call(t, function(t) {
-                    t.addEventListener(e, n);
-                }), {
-                    destroy: function() {
-                        Array.prototype.forEach.call(t, function(t) {
-                            t.removeEventListener(e, n);
-                        });
-                    }
-                };
-            }
-            function c(t, e, n) {
-                return s(document.body, t, e, n);
-            }
-            var a = t("./is"), s = t("delegate");
-            e.exports = o;
-        }, {
-            "./is": 4,
-            delegate: 3
-        } ],
-        6: [ function(t, e, n) {
-            function o(t) {
-                var e;
-                if ("INPUT" === t.nodeName || "TEXTAREA" === t.nodeName) t.focus(), t.setSelectionRange(0, t.value.length), 
-                e = t.value; else {
-                    t.hasAttribute("contenteditable") && t.focus();
-                    var n = window.getSelection(), o = document.createRange();
-                    o.selectNodeContents(t), n.removeAllRanges(), n.addRange(o), e = n.toString();
-                }
-                return e;
-            }
-            e.exports = o;
-        }, {} ],
-        7: [ function(t, e, n) {
-            function o() {}
-            o.prototype = {
-                on: function(t, e, n) {
-                    var o = this.e || (this.e = {});
-                    return (o[t] || (o[t] = [])).push({
-                        fn: e,
-                        ctx: n
-                    }), this;
-                },
-                once: function(t, e, n) {
-                    function o() {
-                        r.off(t, o), e.apply(n, arguments);
-                    }
-                    var r = this;
-                    return o._ = e, this.on(t, o, n);
-                },
-                emit: function(t) {
-                    var e = [].slice.call(arguments, 1), n = ((this.e || (this.e = {}))[t] || []).slice(), o = 0, r = n.length;
-                    for (o; o < r; o++) n[o].fn.apply(n[o].ctx, e);
-                    return this;
-                },
-                off: function(t, e) {
-                    var n = this.e || (this.e = {}), o = n[t], r = [];
-                    if (o && e) for (var i = 0, c = o.length; i < c; i++) o[i].fn !== e && o[i].fn._ !== e && r.push(o[i]);
-                    return r.length ? n[t] = r : delete n[t], this;
-                }
-            }, e.exports = o;
-        }, {} ],
-        8: [ function(t, e, n) {
-            "use strict";
-            function o(t) {
-                return t && t.__esModule ? t : {
-                    "default": t
-                };
-            }
-            function r(t, e) {
-                if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function");
-            }
-            n.__esModule = !0;
-            var i = function() {
-                function t(t, e) {
-                    for (var n = 0; n < e.length; n++) {
-                        var o = e[n];
-                        o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), 
-                        Object.defineProperty(t, o.key, o);
-                    }
-                }
-                return function(e, n, o) {
-                    return n && t(e.prototype, n), o && t(e, o), e;
-                };
-            }(), c = t("select"), a = o(c), s = function() {
-                function t(e) {
-                    r(this, t), this.resolveOptions(e), this.initSelection();
-                }
-                return t.prototype.resolveOptions = function() {
-                    var t = arguments.length <= 0 || void 0 === arguments[0] ? {} : arguments[0];
-                    this.action = t.action, this.emitter = t.emitter, this.target = t.target, this.text = t.text, 
-                    this.trigger = t.trigger, this.selectedText = "";
-                }, t.prototype.initSelection = function() {
-                    if (this.text && this.target) throw new Error('Multiple attributes declared, use either "target" or "text"');
-                    if (this.text) this.selectFake(); else {
-                        if (!this.target) throw new Error('Missing required attributes, use either "target" or "text"');
-                        this.selectTarget();
-                    }
-                }, t.prototype.selectFake = function() {
-                    var t = this;
-                    this.removeFake(), this.fakeHandler = document.body.addEventListener("click", function() {
-                        return t.removeFake();
-                    }), this.fakeElem = document.createElement("textarea"), this.fakeElem.style.position = "absolute", 
-                    this.fakeElem.style.left = "-9999px", this.fakeElem.style.top = (window.pageYOffset || document.documentElement.scrollTop) + "px", 
-                    this.fakeElem.setAttribute("readonly", ""), this.fakeElem.value = this.text, document.body.appendChild(this.fakeElem), 
-                    this.selectedText = a["default"](this.fakeElem), this.copyText();
-                }, t.prototype.removeFake = function() {
-                    this.fakeHandler && (document.body.removeEventListener("click"), this.fakeHandler = null), 
-                    this.fakeElem && (document.body.removeChild(this.fakeElem), this.fakeElem = null);
-                }, t.prototype.selectTarget = function() {
-                    this.selectedText = a["default"](this.target), this.copyText();
-                }, t.prototype.copyText = function() {
-                    var t = void 0;
-                    try {
-                        t = document.execCommand(this.action);
-                    } catch (e) {
-                        t = !1;
-                    }
-                    this.handleResult(t);
-                }, t.prototype.handleResult = function(t) {
-                    t ? this.emitter.emit("success", {
-                        action: this.action,
-                        text: this.selectedText,
-                        trigger: this.trigger,
-                        clearSelection: this.clearSelection.bind(this)
-                    }) : this.emitter.emit("error", {
-                        action: this.action,
-                        trigger: this.trigger,
-                        clearSelection: this.clearSelection.bind(this)
-                    });
-                }, t.prototype.clearSelection = function() {
-                    this.target && this.target.blur(), window.getSelection().removeAllRanges();
-                }, t.prototype.destroy = function() {
-                    this.removeFake();
-                }, i(t, [ {
-                    key: "action",
-                    set: function() {
-                        var t = arguments.length <= 0 || void 0 === arguments[0] ? "copy" : arguments[0];
-                        if (this._action = t, "copy" !== this._action && "cut" !== this._action) throw new Error('Invalid "action" value, use either "copy" or "cut"');
-                    },
-                    get: function() {
-                        return this._action;
-                    }
-                }, {
-                    key: "target",
-                    set: function(t) {
-                        if (void 0 !== t) {
-                            if (!t || "object" != typeof t || 1 !== t.nodeType) throw new Error('Invalid "target" value, use a valid Element');
-                            this._target = t;
-                        }
-                    },
-                    get: function() {
-                        return this._target;
-                    }
-                } ]), t;
-            }();
-            n["default"] = s, e.exports = n["default"];
-        }, {
-            select: 6
-        } ],
-        9: [ function(t, e, n) {
-            "use strict";
-            function o(t) {
-                return t && t.__esModule ? t : {
-                    "default": t
-                };
-            }
-            function r(t, e) {
-                if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function");
-            }
-            function i(t, e) {
-                if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e);
-                t.prototype = Object.create(e && e.prototype, {
-                    constructor: {
-                        value: t,
-                        enumerable: !1,
-                        writable: !0,
-                        configurable: !0
-                    }
-                }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e);
-            }
-            function c(t, e) {
-                var n = "data-clipboard-" + t;
-                if (e.hasAttribute(n)) return e.getAttribute(n);
-            }
-            n.__esModule = !0;
-            var a = t("./clipboard-action"), s = o(a), u = t("tiny-emitter"), l = o(u), f = t("good-listener"), d = o(f), h = function(t) {
-                function e(n, o) {
-                    r(this, e), t.call(this), this.resolveOptions(o), this.listenClick(n);
-                }
-                return i(e, t), e.prototype.resolveOptions = function() {
-                    var t = arguments.length <= 0 || void 0 === arguments[0] ? {} : arguments[0];
-                    this.action = "function" == typeof t.action ? t.action : this.defaultAction, this.target = "function" == typeof t.target ? t.target : this.defaultTarget, 
-                    this.text = "function" == typeof t.text ? t.text : this.defaultText;
-                }, e.prototype.listenClick = function(t) {
-                    var e = this;
-                    this.listener = d["default"](t, "click", function(t) {
-                        return e.onClick(t);
-                    });
-                }, e.prototype.onClick = function(t) {
-                    var e = t.delegateTarget || t.currentTarget;
-                    this.clipboardAction && (this.clipboardAction = null), this.clipboardAction = new s["default"]({
-                        action: this.action(e),
-                        target: this.target(e),
-                        text: this.text(e),
-                        trigger: e,
-                        emitter: this
-                    });
-                }, e.prototype.defaultAction = function(t) {
-                    return c("action", t);
-                }, e.prototype.defaultTarget = function(t) {
-                    var e = c("target", t);
-                    if (e) return document.querySelector(e);
-                }, e.prototype.defaultText = function(t) {
-                    return c("text", t);
-                }, e.prototype.destroy = function() {
-                    this.listener.destroy(), this.clipboardAction && (this.clipboardAction.destroy(), 
-                    this.clipboardAction = null);
-                }, e;
-            }(l["default"]);
-            n["default"] = h, e.exports = n["default"];
-        }, {
-            "./clipboard-action": 8,
-            "good-listener": 5,
-            "tiny-emitter": 7
-        } ]
-    }, {}, [ 9 ])(9);
-});
-(function() {
-    function n(n, r, e) {
-        for (var t = (e || 0) - 1, o = n ? n.length : 0; ++t < o; ) if (n[t] === r) return t;
-        return -1;
-    }
-    function r(r, e) {
-        var t = typeof e;
-        if (r = r.cache, "boolean" == t || null == e) return r[e] ? 0 : -1;
-        "number" != t && "string" != t && (t = "object");
-        var o = "number" == t ? e : _ + e;
-        return r = (r = r[t]) && r[o], "object" == t ? r && n(r, e) > -1 ? 0 : -1 : r ? 0 : -1;
-    }
-    function e(n) {
-        var r = this.cache, e = typeof n;
-        if ("boolean" == e || null == n) r[n] = !0; else {
-            "number" != e && "string" != e && (e = "object");
-            var t = "number" == e ? n : _ + n, o = r[e] || (r[e] = {});
-            "object" == e ? (o[t] || (o[t] = [])).push(n) : o[t] = !0;
-        }
-    }
-    function t(n) {
-        return n.charCodeAt(0);
-    }
-    function o(n, r) {
-        for (var e = n.criteria, t = r.criteria, o = -1, u = e.length; ++o < u; ) {
-            var a = e[o], i = t[o];
-            if (a !== i) {
-                if (a > i || "undefined" == typeof a) return 1;
-                if (a < i || "undefined" == typeof i) return -1;
-            }
-        }
-        return n.index - r.index;
-    }
-    function u(n) {
-        var r = -1, t = n.length, o = n[0], u = n[t / 2 | 0], a = n[t - 1];
-        if (o && "object" == typeof o && u && "object" == typeof u && a && "object" == typeof a) return !1;
-        var i = l();
-        i["false"] = i["null"] = i["true"] = i.undefined = !1;
-        var c = l();
-        for (c.array = n, c.cache = i, c.push = e; ++r < t; ) c.push(n[r]);
-        return c;
-    }
-    function a(n) {
-        return "\\" + Z[n];
-    }
-    function i() {
-        return v.pop() || [];
-    }
-    function l() {
-        return y.pop() || {
-            array: null,
-            cache: null,
-            criteria: null,
-            "false": !1,
-            index: 0,
-            "null": !1,
-            number: null,
-            object: null,
-            push: null,
-            string: null,
-            "true": !1,
-            undefined: !1,
-            value: null
-        };
-    }
-    function c(n) {
-        return "function" != typeof n.toString && "string" == typeof (n + "");
-    }
-    function f(n) {
-        n.length = 0, v.length < w && v.push(n);
-    }
-    function s(n) {
-        var r = n.cache;
-        r && s(r), n.array = n.cache = n.criteria = n.object = n.number = n.string = n.value = null, 
-        y.length < w && y.push(n);
-    }
-    function p(n, r, e) {
-        r || (r = 0), "undefined" == typeof e && (e = n ? n.length : 0);
-        for (var t = -1, o = e - r || 0, u = Array(o < 0 ? 0 : o); ++t < o; ) u[t] = n[r + t];
-        return u;
-    }
-    function h(e) {
-        function v(n) {
-            return n && "object" == typeof n && !st(n) && Ke.call(n, "__wrapped__") ? n : new y(n);
-        }
-        function y(n, r) {
-            this.__chain__ = !!r, this.__wrapped__ = n;
-        }
-        function w(n) {
-            function r() {
-                if (t) {
-                    var n = p(t);
-                    Ue.apply(n, arguments);
-                }
-                if (this instanceof r) {
-                    var u = rn(e.prototype), a = e.apply(u, n || arguments);
-                    return Bn(a) ? a : u;
-                }
-                return e.apply(o, n || arguments);
-            }
-            var e = n[0], t = n[2], o = n[4];
-            return ft(r, n), r;
-        }
-        function Z(n, r, e, t, o) {
-            if (e) {
-                var u = e(n);
-                if ("undefined" != typeof u) return u;
-            }
-            var a = Bn(n);
-            if (!a) return n;
-            var l = $e.call(n);
-            if (!G[l] || !lt.nodeClass && c(n)) return n;
-            var s = at[l];
-            switch (l) {
-              case H:
-              case W:
-                return new s((+n));
-
-              case K:
-              case V:
-                return new s(n);
-
-              case M:
-                return u = s(n.source, O.exec(n)), u.lastIndex = n.lastIndex, u;
-            }
-            var h = st(n);
-            if (r) {
-                var g = !t;
-                t || (t = i()), o || (o = i());
-                for (var v = t.length; v--; ) if (t[v] == n) return o[v];
-                u = h ? s(n.length) : {};
-            } else u = h ? p(n) : xt({}, n);
-            return h && (Ke.call(n, "index") && (u.index = n.index), Ke.call(n, "input") && (u.input = n.input)), 
-            r ? (t.push(n), o.push(u), (h ? wt : Ct)(n, function(n, a) {
-                u[a] = Z(n, r, e, t, o);
-            }), g && (f(t), f(o)), u) : u;
-        }
-        function rn(n, r) {
-            return Bn(n) ? Xe(n) : {};
-        }
-        function en(n, r, e) {
-            if ("function" != typeof n) return ue;
-            if ("undefined" == typeof r || !("prototype" in n)) return n;
-            var t = n.__bindData__;
-            if ("undefined" == typeof t && (lt.funcNames && (t = !n.name), t = t || !lt.funcDecomp, 
-            !t)) {
-                var o = qe.call(n);
-                lt.funcNames || (t = !S.test(o)), t || (t = N.test(o), ft(n, t));
-            }
-            if (t === !1 || t !== !0 && 1 & t[1]) return n;
-            switch (e) {
-              case 1:
-                return function(e) {
-                    return n.call(r, e);
-                };
-
-              case 2:
-                return function(e, t) {
-                    return n.call(r, e, t);
-                };
-
-              case 3:
-                return function(e, t, o) {
-                    return n.call(r, e, t, o);
-                };
-
-              case 4:
-                return function(e, t, o, u) {
-                    return n.call(r, e, t, o, u);
-                };
-            }
-            return qr(n, r);
-        }
-        function tn(n) {
-            function r() {
-                var n = l ? a : this;
-                if (o) {
-                    var g = p(o);
-                    Ue.apply(g, arguments);
-                }
-                if ((u || f) && (g || (g = p(arguments)), u && Ue.apply(g, u), f && g.length < i)) return t |= 16, 
-                tn([ e, s ? t : t & -4, g, null, a, i ]);
-                if (g || (g = arguments), c && (e = n[h]), this instanceof r) {
-                    n = rn(e.prototype);
-                    var v = e.apply(n, g);
-                    return Bn(v) ? v : n;
-                }
-                return e.apply(n, g);
-            }
-            var e = n[0], t = n[1], o = n[2], u = n[3], a = n[4], i = n[5], l = 1 & t, c = 2 & t, f = 4 & t, s = 8 & t, h = e;
-            return ft(r, n), r;
-        }
-        function on(e, t) {
-            var o = -1, a = yn(), i = e ? e.length : 0, l = i >= m && a === n, c = [];
-            if (l) {
-                var f = u(t);
-                f ? (a = r, t = f) : l = !1;
-            }
-            for (;++o < i; ) {
-                var p = e[o];
-                a(t, p) < 0 && c.push(p);
-            }
-            return l && s(t), c;
-        }
-        function an(n, r, e, t) {
-            for (var o = (t || 0) - 1, u = n ? n.length : 0, a = []; ++o < u; ) {
-                var i = n[o];
-                if (i && "object" == typeof i && "number" == typeof i.length && (st(i) || mn(i))) {
-                    r || (i = an(i, r, e));
-                    var l = -1, c = i.length, f = a.length;
-                    for (a.length += c; ++l < c; ) a[f++] = i[l];
-                } else e || a.push(i);
-            }
-            return a;
-        }
-        function ln(n, r, e, t, o, u) {
-            if (e) {
-                var a = e(n, r);
-                if ("undefined" != typeof a) return !!a;
-            }
-            if (n === r) return 0 !== n || 1 / n == 1 / r;
-            var l = typeof n, s = typeof r;
-            if (!(n !== n || n && Y[l] || r && Y[s])) return !1;
-            if (null == n || null == r) return n === r;
-            var p = $e.call(n), h = $e.call(r);
-            if (p == B && (p = U), h == B && (h = U), p != h) return !1;
-            switch (p) {
-              case H:
-              case W:
-                return +n == +r;
-
-              case K:
-                return n != +n ? r != +r : 0 == n ? 1 / n == 1 / r : n == +r;
-
-              case M:
-              case V:
-                return n == Ae(r);
-            }
-            var g = p == F;
-            if (!g) {
-                var v = Ke.call(n, "__wrapped__"), y = Ke.call(r, "__wrapped__");
-                if (v || y) return ln(v ? n.__wrapped__ : n, y ? r.__wrapped__ : r, e, t, o, u);
-                if (p != U || !lt.nodeClass && (c(n) || c(r))) return !1;
-                var b = !lt.argsObject && mn(n) ? Oe : n.constructor, d = !lt.argsObject && mn(r) ? Oe : r.constructor;
-                if (b != d && !($n(b) && b instanceof b && $n(d) && d instanceof d) && "constructor" in n && "constructor" in r) return !1;
-            }
-            var _ = !o;
-            o || (o = i()), u || (u = i());
-            for (var m = o.length; m--; ) if (o[m] == n) return u[m] == r;
-            var w = 0;
-            if (a = !0, o.push(n), u.push(r), g) {
-                if (m = n.length, w = r.length, a = w == m, a || t) for (;w--; ) {
-                    var x = m, j = r[w];
-                    if (t) for (;x-- && !(a = ln(n[x], j, e, t, o, u)); ) ; else if (!(a = ln(n[w], j, e, t, o, u))) break;
-                }
-            } else kt(r, function(r, i, l) {
-                if (Ke.call(l, i)) return w++, a = Ke.call(n, i) && ln(n[i], r, e, t, o, u);
-            }), a && !t && kt(n, function(n, r, e) {
-                if (Ke.call(e, r)) return a = --w > -1;
-            });
-            return o.pop(), u.pop(), _ && (f(o), f(u)), a;
-        }
-        function cn(n, r, e, t, o) {
-            (st(r) ? or : Ct)(r, function(r, u) {
-                var a, i, l = r, c = n[u];
-                if (r && ((i = st(r)) || Pt(r))) {
-                    for (var f = t.length; f--; ) if (a = t[f] == r) {
-                        c = o[f];
-                        break;
-                    }
-                    if (!a) {
-                        var s;
-                        e && (l = e(c, r), (s = "undefined" != typeof l) && (c = l)), s || (c = i ? st(c) ? c : [] : Pt(c) ? c : {}), 
-                        t.push(r), o.push(c), s || cn(c, r, e, t, o);
-                    }
-                } else e && (l = e(c, r), "undefined" == typeof l && (l = r)), "undefined" != typeof l && (c = l);
-                n[u] = c;
-            });
-        }
-        function fn(n, r) {
-            return n + We(ut() * (r - n + 1));
-        }
-        function sn(e, t, o) {
-            var a = -1, l = yn(), c = e ? e.length : 0, p = [], h = !t && c >= m && l === n, g = o || h ? i() : p;
-            if (h) {
-                var v = u(g);
-                l = r, g = v;
-            }
-            for (;++a < c; ) {
-                var y = e[a], b = o ? o(y, a, e) : y;
-                (t ? !a || g[g.length - 1] !== b : l(g, b) < 0) && ((o || h) && g.push(b), p.push(y));
-            }
-            return h ? (f(g.array), s(g)) : o && f(g), p;
-        }
-        function pn(n) {
-            return function(r, e, t) {
-                var o = {};
-                if (e = v.createCallback(e, t, 3), st(r)) for (var u = -1, a = r.length; ++u < a; ) {
-                    var i = r[u];
-                    n(o, i, e(i, u, r), r);
-                } else wt(r, function(r, t, u) {
-                    n(o, r, e(r, t, u), u);
-                });
-                return o;
-            };
-        }
-        function hn(n, r, e, t, o, u) {
-            var a = 1 & r, i = 2 & r, l = 4 & r, c = 16 & r, f = 32 & r;
-            if (!i && !$n(n)) throw new Ie();
-            c && !e.length && (r &= -17, c = e = !1), f && !t.length && (r &= -33, f = t = !1);
-            var s = n && n.__bindData__;
-            if (s && s !== !0) return s = p(s), s[2] && (s[2] = p(s[2])), s[3] && (s[3] = p(s[3])), 
-            !a || 1 & s[1] || (s[4] = o), !a && 1 & s[1] && (r |= 8), !l || 4 & s[1] || (s[5] = u), 
-            c && Ue.apply(s[2] || (s[2] = []), e), f && Je.apply(s[3] || (s[3] = []), t), s[1] |= r, 
-            hn.apply(null, s);
-            var h = 1 == r || 17 === r ? w : tn;
-            return h([ n, r, e, t, o, u ]);
-        }
-        function gn() {
-            X.shadowedProps = D, X.array = X.bottom = X.loop = X.top = "", X.init = "iterable", 
-            X.useHas = !0;
-            for (var n, r = 0; n = arguments[r]; r++) for (var e in n) X[e] = n[e];
-            var t = X.args;
-            X.firstArg = /^[^,]+/.exec(t)[0];
-            var o = Ce("baseCreateCallback, errorClass, errorProto, hasOwnProperty, indicatorObject, isArguments, isArray, isString, keys, objectProto, objectTypes, nonEnumProps, stringClass, stringProto, toString", "return function(" + t + ") {\n" + ct(X) + "\n}");
-            return o(en, q, Ne, Ke, d, mn, st, zn, X.keys, Re, Y, it, V, Te, $e);
-        }
-        function vn(n) {
-            return bt[n];
-        }
-        function yn() {
-            var r = (r = v.indexOf) === Cr ? n : r;
-            return r;
-        }
-        function bn(n) {
-            return "function" == typeof n && Be.test(n);
-        }
-        function dn(n) {
-            var r, e;
-            return !(!(n && $e.call(n) == U && (r = n.constructor, !$n(r) || r instanceof r)) || !lt.argsClass && mn(n) || !lt.nodeClass && c(n)) && (lt.ownLast ? (kt(n, function(n, r, t) {
-                return e = Ke.call(t, r), !1;
-            }), e !== !1) : (kt(n, function(n, r) {
-                e = r;
-            }), "undefined" == typeof e || Ke.call(n, e)));
-        }
-        function _n(n) {
-            return dt[n];
-        }
-        function mn(n) {
-            return n && "object" == typeof n && "number" == typeof n.length && $e.call(n) == B || !1;
-        }
-        function wn(n, r, e, t) {
-            return "boolean" != typeof r && null != r && (t = e, e = r, r = !1), Z(n, r, "function" == typeof e && en(e, t, 1));
-        }
-        function xn(n, r, e) {
-            return Z(n, !0, "function" == typeof r && en(r, e, 1));
-        }
-        function jn(n, r) {
-            var e = rn(n);
-            return r ? xt(e, r) : e;
-        }
-        function kn(n, r, e) {
-            var t;
-            return r = v.createCallback(r, e, 3), Ct(n, function(n, e, o) {
-                if (r(n, e, o)) return t = e, !1;
-            }), t;
-        }
-        function Cn(n, r, e) {
-            var t;
-            return r = v.createCallback(r, e, 3), En(n, function(n, e, o) {
-                if (r(n, e, o)) return t = e, !1;
-            }), t;
-        }
-        function Pn(n, r, e) {
-            var t = [];
-            kt(n, function(n, r) {
-                t.push(r, n);
-            });
-            var o = t.length;
-            for (r = en(r, e, 3); o-- && r(t[o--], t[o], n) !== !1; ) ;
-            return n;
-        }
-        function En(n, r, e) {
-            var t = ht(n), o = t.length;
-            for (r = en(r, e, 3); o--; ) {
-                var u = t[o];
-                if (r(n[u], u, n) === !1) break;
-            }
-            return n;
-        }
-        function On(n) {
-            var r = [];
-            return kt(n, function(n, e) {
-                $n(n) && r.push(e);
-            }), r.sort();
-        }
-        function Sn(n, r) {
-            return !!n && Ke.call(n, r);
-        }
-        function An(n) {
-            for (var r = -1, e = ht(n), t = e.length, o = {}; ++r < t; ) {
-                var u = e[r];
-                o[n[u]] = u;
-            }
-            return o;
-        }
-        function In(n) {
-            return n === !0 || n === !1 || n && "object" == typeof n && $e.call(n) == H || !1;
-        }
-        function Ln(n) {
-            return n && "object" == typeof n && $e.call(n) == W || !1;
-        }
-        function Nn(n) {
-            return n && 1 === n.nodeType || !1;
-        }
-        function Rn(n) {
-            var r = !0;
-            if (!n) return r;
-            var e = $e.call(n), t = n.length;
-            return e == F || e == V || (lt.argsClass ? e == B : mn(n)) || e == U && "number" == typeof t && $n(n.splice) ? !t : (Ct(n, function() {
-                return r = !1;
-            }), r);
-        }
-        function Tn(n, r, e, t) {
-            return ln(n, r, "function" == typeof e && en(e, t, 2));
-        }
-        function Dn(n) {
-            return Ze(n) && !nt(parseFloat(n));
-        }
-        function $n(n) {
-            return "function" == typeof n;
-        }
-        function Bn(n) {
-            return !(!n || !Y[typeof n]);
-        }
-        function Fn(n) {
-            return Wn(n) && n != +n;
-        }
-        function Hn(n) {
-            return null === n;
-        }
-        function Wn(n) {
-            return "number" == typeof n || n && "object" == typeof n && $e.call(n) == K || !1;
-        }
-        function qn(n) {
-            return n && Y[typeof n] && $e.call(n) == M || !1;
-        }
-        function zn(n) {
-            return "string" == typeof n || n && "object" == typeof n && $e.call(n) == V || !1;
-        }
-        function Kn(n) {
-            return "undefined" == typeof n;
-        }
-        function Un(n, r, e) {
-            var t = {};
-            return r = v.createCallback(r, e, 3), Ct(n, function(n, e, o) {
-                t[e] = r(n, e, o);
-            }), t;
-        }
-        function Mn(n) {
-            var r = arguments, e = 2;
-            if (!Bn(n)) return n;
-            if ("number" != typeof r[2] && (e = r.length), e > 3 && "function" == typeof r[e - 2]) var t = en(r[--e - 1], r[e--], 2); else e > 2 && "function" == typeof r[e - 1] && (t = r[--e]);
-            for (var o = p(arguments, 1, e), u = -1, a = i(), l = i(); ++u < e; ) cn(n, o[u], t, a, l);
-            return f(a), f(l), n;
-        }
-        function Vn(n, r, e) {
-            var t = {};
-            if ("function" != typeof r) {
-                var o = [];
-                kt(n, function(n, r) {
-                    o.push(r);
-                }), o = on(o, an(arguments, !0, !1, 1));
-                for (var u = -1, a = o.length; ++u < a; ) {
-                    var i = o[u];
-                    t[i] = n[i];
-                }
-            } else r = v.createCallback(r, e, 3), kt(n, function(n, e, o) {
-                r(n, e, o) || (t[e] = n);
-            });
-            return t;
-        }
-        function Gn(n) {
-            for (var r = -1, e = ht(n), t = e.length, o = we(t); ++r < t; ) {
-                var u = e[r];
-                o[r] = [ u, n[u] ];
-            }
-            return o;
-        }
-        function Jn(n, r, e) {
-            var t = {};
-            if ("function" != typeof r) for (var o = -1, u = an(arguments, !0, !1, 1), a = Bn(n) ? u.length : 0; ++o < a; ) {
-                var i = u[o];
-                i in n && (t[i] = n[i]);
-            } else r = v.createCallback(r, e, 3), kt(n, function(n, e, o) {
-                r(n, e, o) && (t[e] = n);
-            });
-            return t;
-        }
-        function Qn(n, r, e, t) {
-            var o = st(n);
-            if (null == e) if (o) e = []; else {
-                var u = n && n.constructor, a = u && u.prototype;
-                e = rn(a);
-            }
-            return r && (r = v.createCallback(r, t, 4), (o ? wt : Ct)(n, function(n, t, o) {
-                return r(e, n, t, o);
-            })), e;
-        }
-        function Xn(n) {
-            for (var r = -1, e = ht(n), t = e.length, o = we(t); ++r < t; ) o[r] = n[e[r]];
-            return o;
-        }
-        function Yn(n) {
-            var r = arguments, e = -1, t = an(r, !0, !1, 1), o = r[2] && r[2][r[1]] === n ? 1 : t.length, u = we(o);
-            for (lt.unindexedChars && zn(n) && (n = n.split("")); ++e < o; ) u[e] = n[t[e]];
-            return u;
-        }
-        function Zn(n, r, e) {
-            var t = -1, o = yn(), u = n ? n.length : 0, a = !1;
-            return e = (e < 0 ? et(0, u + e) : e) || 0, st(n) ? a = o(n, r, e) > -1 : "number" == typeof u ? a = (zn(n) ? n.indexOf(r, e) : o(n, r, e)) > -1 : wt(n, function(n) {
-                if (++t >= e) return !(a = n === r);
-            }), a;
-        }
-        function nr(n, r, e) {
-            var t = !0;
-            if (r = v.createCallback(r, e, 3), st(n)) for (var o = -1, u = n.length; ++o < u && (t = !!r(n[o], o, n)); ) ; else wt(n, function(n, e, o) {
-                return t = !!r(n, e, o);
-            });
-            return t;
-        }
-        function rr(n, r, e) {
-            var t = [];
-            if (r = v.createCallback(r, e, 3), st(n)) for (var o = -1, u = n.length; ++o < u; ) {
-                var a = n[o];
-                r(a, o, n) && t.push(a);
-            } else wt(n, function(n, e, o) {
-                r(n, e, o) && t.push(n);
-            });
-            return t;
-        }
-        function er(n, r, e) {
-            if (r = v.createCallback(r, e, 3), !st(n)) {
-                var t;
-                return wt(n, function(n, e, o) {
-                    if (r(n, e, o)) return t = n, !1;
-                }), t;
-            }
-            for (var o = -1, u = n.length; ++o < u; ) {
-                var a = n[o];
-                if (r(a, o, n)) return a;
-            }
-        }
-        function tr(n, r, e) {
-            var t;
-            return r = v.createCallback(r, e, 3), ur(n, function(n, e, o) {
-                if (r(n, e, o)) return t = n, !1;
-            }), t;
-        }
-        function or(n, r, e) {
-            if (r && "undefined" == typeof e && st(n)) for (var t = -1, o = n.length; ++t < o && r(n[t], t, n) !== !1; ) ; else wt(n, r, e);
-            return n;
-        }
-        function ur(n, r, e) {
-            var t = n, o = n ? n.length : 0;
-            if (r = r && "undefined" == typeof e ? r : en(r, e, 3), st(n)) for (;o-- && r(n[o], o, n) !== !1; ) ; else {
-                if ("number" != typeof o) {
-                    var u = ht(n);
-                    o = u.length;
-                } else lt.unindexedChars && zn(n) && (t = n.split(""));
-                wt(n, function(n, e, a) {
-                    return e = u ? u[--o] : --o, r(t[e], e, a);
-                });
-            }
-            return n;
-        }
-        function ar(n, r) {
-            var e = p(arguments, 2), t = -1, o = "function" == typeof r, u = n ? n.length : 0, a = we("number" == typeof u ? u : 0);
-            return or(n, function(n) {
-                a[++t] = (o ? r : n[r]).apply(n, e);
-            }), a;
-        }
-        function ir(n, r, e) {
-            var t = -1, o = n ? n.length : 0, u = we("number" == typeof o ? o : 0);
-            if (r = v.createCallback(r, e, 3), st(n)) for (;++t < o; ) u[t] = r(n[t], t, n); else wt(n, function(n, e, o) {
-                u[++t] = r(n, e, o);
-            });
-            return u;
-        }
-        function lr(n, r, e) {
-            var o = -(1 / 0), u = o;
-            if ("function" != typeof r && e && e[r] === n && (r = null), null == r && st(n)) for (var a = -1, i = n.length; ++a < i; ) {
-                var l = n[a];
-                l > u && (u = l);
-            } else r = null == r && zn(n) ? t : v.createCallback(r, e, 3), wt(n, function(n, e, t) {
-                var a = r(n, e, t);
-                a > o && (o = a, u = n);
-            });
-            return u;
-        }
-        function cr(n, r, e) {
-            var o = 1 / 0, u = o;
-            if ("function" != typeof r && e && e[r] === n && (r = null), null == r && st(n)) for (var a = -1, i = n.length; ++a < i; ) {
-                var l = n[a];
-                l < u && (u = l);
-            } else r = null == r && zn(n) ? t : v.createCallback(r, e, 3), wt(n, function(n, e, t) {
-                var a = r(n, e, t);
-                a < o && (o = a, u = n);
-            });
-            return u;
-        }
-        function fr(n, r, e, t) {
-            var o = arguments.length < 3;
-            if (r = v.createCallback(r, t, 4), st(n)) {
-                var u = -1, a = n.length;
-                for (o && (e = n[++u]); ++u < a; ) e = r(e, n[u], u, n);
-            } else wt(n, function(n, t, u) {
-                e = o ? (o = !1, n) : r(e, n, t, u);
-            });
-            return e;
-        }
-        function sr(n, r, e, t) {
-            var o = arguments.length < 3;
-            return r = v.createCallback(r, t, 4), ur(n, function(n, t, u) {
-                e = o ? (o = !1, n) : r(e, n, t, u);
-            }), e;
-        }
-        function pr(n, r, e) {
-            return r = v.createCallback(r, e, 3), rr(n, function(n, e, t) {
-                return !r(n, e, t);
-            });
-        }
-        function hr(n, r, e) {
-            if (n && "number" != typeof n.length ? n = Xn(n) : lt.unindexedChars && zn(n) && (n = n.split("")), 
-            null == r || e) return n ? n[fn(0, n.length - 1)] : g;
-            var t = gr(n);
-            return t.length = tt(et(0, r), t.length), t;
-        }
-        function gr(n) {
-            var r = -1, e = n ? n.length : 0, t = we("number" == typeof e ? e : 0);
-            return or(n, function(n) {
-                var e = fn(0, ++r);
-                t[r] = t[e], t[e] = n;
-            }), t;
-        }
-        function vr(n) {
-            var r = n ? n.length : 0;
-            return "number" == typeof r ? r : ht(n).length;
-        }
-        function yr(n, r, e) {
-            var t;
-            if (r = v.createCallback(r, e, 3), st(n)) for (var o = -1, u = n.length; ++o < u && !(t = r(n[o], o, n)); ) ; else wt(n, function(n, e, o) {
-                return !(t = r(n, e, o));
-            });
-            return !!t;
-        }
-        function br(n, r, e) {
-            var t = -1, u = st(r), a = n ? n.length : 0, c = we("number" == typeof a ? a : 0);
-            for (u || (r = v.createCallback(r, e, 3)), or(n, function(n, e, o) {
-                var a = c[++t] = l();
-                u ? a.criteria = ir(r, function(r) {
-                    return n[r];
-                }) : (a.criteria = i())[0] = r(n, e, o), a.index = t, a.value = n;
-            }), a = c.length, c.sort(o); a--; ) {
-                var p = c[a];
-                c[a] = p.value, u || f(p.criteria), s(p);
-            }
-            return c;
-        }
-        function dr(n) {
-            return n && "number" == typeof n.length ? lt.unindexedChars && zn(n) ? n.split("") : p(n) : Xn(n);
-        }
-        function _r(n) {
-            for (var r = -1, e = n ? n.length : 0, t = []; ++r < e; ) {
-                var o = n[r];
-                o && t.push(o);
-            }
-            return t;
-        }
-        function mr(n) {
-            return on(n, an(arguments, !0, !0, 1));
-        }
-        function wr(n, r, e) {
-            var t = -1, o = n ? n.length : 0;
-            for (r = v.createCallback(r, e, 3); ++t < o; ) if (r(n[t], t, n)) return t;
-            return -1;
-        }
-        function xr(n, r, e) {
-            var t = n ? n.length : 0;
-            for (r = v.createCallback(r, e, 3); t--; ) if (r(n[t], t, n)) return t;
-            return -1;
-        }
-        function jr(n, r, e) {
-            var t = 0, o = n ? n.length : 0;
-            if ("number" != typeof r && null != r) {
-                var u = -1;
-                for (r = v.createCallback(r, e, 3); ++u < o && r(n[u], u, n); ) t++;
-            } else if (t = r, null == t || e) return n ? n[0] : g;
-            return p(n, 0, tt(et(0, t), o));
-        }
-        function kr(n, r, e, t) {
-            return "boolean" != typeof r && null != r && (t = e, e = "function" != typeof r && t && t[r] === n ? null : r, 
-            r = !1), null != e && (n = ir(n, e, t)), an(n, r);
-        }
-        function Cr(r, e, t) {
-            if ("number" == typeof t) {
-                var o = r ? r.length : 0;
-                t = t < 0 ? et(0, o + t) : t || 0;
-            } else if (t) {
-                var u = Rr(r, e);
-                return r[u] === e ? u : -1;
-            }
-            return n(r, e, t);
-        }
-        function Pr(n, r, e) {
-            var t = 0, o = n ? n.length : 0;
-            if ("number" != typeof r && null != r) {
-                var u = o;
-                for (r = v.createCallback(r, e, 3); u-- && r(n[u], u, n); ) t++;
-            } else t = null == r || e ? 1 : r || t;
-            return p(n, 0, tt(et(0, o - t), o));
-        }
-        function Er() {
-            for (var e = [], t = -1, o = arguments.length, a = i(), l = yn(), c = l === n, p = i(); ++t < o; ) {
-                var h = arguments[t];
-                (st(h) || mn(h)) && (e.push(h), a.push(c && h.length >= m && u(t ? e[t] : p)));
-            }
-            var g = e[0], v = -1, y = g ? g.length : 0, b = [];
-            n: for (;++v < y; ) {
-                var d = a[0];
-                if (h = g[v], (d ? r(d, h) : l(p, h)) < 0) {
-                    for (t = o, (d || p).push(h); --t; ) if (d = a[t], (d ? r(d, h) : l(e[t], h)) < 0) continue n;
-                    b.push(h);
-                }
-            }
-            for (;o--; ) d = a[o], d && s(d);
-            return f(a), f(p), b;
-        }
-        function Or(n, r, e) {
-            var t = 0, o = n ? n.length : 0;
-            if ("number" != typeof r && null != r) {
-                var u = o;
-                for (r = v.createCallback(r, e, 3); u-- && r(n[u], u, n); ) t++;
-            } else if (t = r, null == t || e) return n ? n[o - 1] : g;
-            return p(n, et(0, o - t));
-        }
-        function Sr(n, r, e) {
-            var t = n ? n.length : 0;
-            for ("number" == typeof e && (t = (e < 0 ? et(0, t + e) : tt(e, t - 1)) + 1); t--; ) if (n[t] === r) return t;
-            return -1;
-        }
-        function Ar(n) {
-            for (var r = arguments, e = 0, t = r.length, o = n ? n.length : 0; ++e < t; ) for (var u = -1, a = r[e]; ++u < o; ) n[u] === a && (Ge.call(n, u--, 1), 
-            o--);
-            return n;
-        }
-        function Ir(n, r, e) {
-            n = +n || 0, e = "number" == typeof e ? e : +e || 1, null == r && (r = n, n = 0);
-            for (var t = -1, o = et(0, Fe((r - n) / (e || 1))), u = we(o); ++t < o; ) u[t] = n, 
-            n += e;
-            return u;
-        }
-        function Lr(n, r, e) {
-            var t = -1, o = n ? n.length : 0, u = [];
-            for (r = v.createCallback(r, e, 3); ++t < o; ) {
-                var a = n[t];
-                r(a, t, n) && (u.push(a), Ge.call(n, t--, 1), o--);
-            }
-            return u;
-        }
-        function Nr(n, r, e) {
-            if ("number" != typeof r && null != r) {
-                var t = 0, o = -1, u = n ? n.length : 0;
-                for (r = v.createCallback(r, e, 3); ++o < u && r(n[o], o, n); ) t++;
-            } else t = null == r || e ? 1 : et(0, r);
-            return p(n, t);
-        }
-        function Rr(n, r, e, t) {
-            var o = 0, u = n ? n.length : o;
-            for (e = e ? v.createCallback(e, t, 1) : ue, r = e(r); o < u; ) {
-                var a = o + u >>> 1;
-                e(n[a]) < r ? o = a + 1 : u = a;
-            }
-            return o;
-        }
-        function Tr() {
-            return sn(an(arguments, !0, !0));
-        }
-        function Dr(n, r, e, t) {
-            return "boolean" != typeof r && null != r && (t = e, e = "function" != typeof r && t && t[r] === n ? null : r, 
-            r = !1), null != e && (e = v.createCallback(e, t, 3)), sn(n, r, e);
-        }
-        function $r(n) {
-            return on(n, p(arguments, 1));
-        }
-        function Br() {
-            for (var n = -1, r = arguments.length; ++n < r; ) {
-                var e = arguments[n];
-                if (st(e) || mn(e)) var t = t ? sn(on(t, e).concat(on(e, t))) : e;
-            }
-            return t || [];
-        }
-        function Fr() {
-            for (var n = arguments.length > 1 ? arguments : arguments[0], r = -1, e = n ? lr(At(n, "length")) : 0, t = we(e < 0 ? 0 : e); ++r < e; ) t[r] = At(n, r);
-            return t;
-        }
-        function Hr(n, r) {
-            var e = -1, t = n ? n.length : 0, o = {};
-            for (r || !t || st(n[0]) || (r = []); ++e < t; ) {
-                var u = n[e];
-                r ? o[u] = r[e] : u && (o[u[0]] = u[1]);
-            }
-            return o;
-        }
-        function Wr(n, r) {
-            if (!$n(r)) throw new Ie();
-            return function() {
-                if (--n < 1) return r.apply(this, arguments);
-            };
-        }
-        function qr(n, r) {
-            return arguments.length > 2 ? hn(n, 17, p(arguments, 2), null, r) : hn(n, 1, null, null, r);
-        }
-        function zr(n) {
-            for (var r = arguments.length > 1 ? an(arguments, !0, !1, 1) : On(n), e = -1, t = r.length; ++e < t; ) {
-                var o = r[e];
-                n[o] = hn(n[o], 1, null, null, n);
-            }
-            return n;
-        }
-        function Kr(n, r) {
-            return arguments.length > 2 ? hn(r, 19, p(arguments, 2), null, n) : hn(r, 3, null, null, n);
-        }
-        function Ur() {
-            for (var n = arguments, r = n.length; r--; ) if (!$n(n[r])) throw new Ie();
-            return function() {
-                for (var r = arguments, e = n.length; e--; ) r = [ n[e].apply(this, r) ];
-                return r[0];
-            };
-        }
-        function Mr(n, r) {
-            return r = "number" == typeof r ? r : +r || n.length, hn(n, 4, null, null, null, r);
-        }
-        function Vr(n, r, e) {
-            var t, o, u, a, i, l, c, f = 0, s = !1, p = !0;
-            if (!$n(n)) throw new Ie();
-            if (r = et(0, r) || 0, e === !0) {
-                var h = !0;
-                p = !1;
-            } else Bn(e) && (h = e.leading, s = "maxWait" in e && (et(r, e.maxWait) || 0), p = "trailing" in e ? e.trailing : p);
-            var v = function() {
-                var e = r - (Lt() - a);
-                if (e <= 0) {
-                    o && He(o);
-                    var s = c;
-                    o = l = c = g, s && (f = Lt(), u = n.apply(i, t), l || o || (t = i = null));
-                } else l = Ve(v, e);
-            }, y = function() {
-                l && He(l), o = l = c = g, (p || s !== r) && (f = Lt(), u = n.apply(i, t), l || o || (t = i = null));
-            };
-            return function() {
-                if (t = arguments, a = Lt(), i = this, c = p && (l || !h), s === !1) var e = h && !l; else {
-                    o || h || (f = a);
-                    var g = s - (a - f), b = g <= 0;
-                    b ? (o && (o = He(o)), f = a, u = n.apply(i, t)) : o || (o = Ve(y, g));
-                }
-                return b && l ? l = He(l) : l || r === s || (l = Ve(v, r)), e && (b = !0, u = n.apply(i, t)), 
-                !b || l || o || (t = i = null), u;
-            };
-        }
-        function Gr(n) {
-            if (!$n(n)) throw new Ie();
-            var r = p(arguments, 1);
-            return Ve(function() {
-                n.apply(g, r);
-            }, 1);
-        }
-        function Jr(n, r) {
-            if (!$n(n)) throw new Ie();
-            var e = p(arguments, 2);
-            return Ve(function() {
-                n.apply(g, e);
-            }, r);
-        }
-        function Qr(n, r) {
-            if (!$n(n)) throw new Ie();
-            var e = function() {
-                var t = e.cache, o = r ? r.apply(this, arguments) : _ + arguments[0];
-                return Ke.call(t, o) ? t[o] : t[o] = n.apply(this, arguments);
-            };
-            return e.cache = {}, e;
-        }
-        function Xr(n) {
-            var r, e;
-            if (!$n(n)) throw new Ie();
-            return function() {
-                return r ? e : (r = !0, e = n.apply(this, arguments), n = null, e);
-            };
-        }
-        function Yr(n) {
-            return hn(n, 16, p(arguments, 1));
-        }
-        function Zr(n) {
-            return hn(n, 32, null, p(arguments, 1));
-        }
-        function ne(n, r, e) {
-            var t = !0, o = !0;
-            if (!$n(n)) throw new Ie();
-            return e === !1 ? t = !1 : Bn(e) && (t = "leading" in e ? e.leading : t, o = "trailing" in e ? e.trailing : o), 
-            J.leading = t, J.maxWait = r, J.trailing = o, Vr(n, r, J);
-        }
-        function re(n, r) {
-            return hn(r, 16, [ n ]);
-        }
-        function ee(n) {
-            return function() {
-                return n;
-            };
-        }
-        function te(n, r, e) {
-            var t = typeof n;
-            if (null == n || "function" == t) return en(n, r, e);
-            if ("object" != t) return ce(n);
-            var o = ht(n), u = o[0], a = n[u];
-            return 1 != o.length || a !== a || Bn(a) ? function(r) {
-                for (var e = o.length, t = !1; e-- && (t = ln(r[o[e]], n[o[e]], null, !0)); ) ;
-                return t;
-            } : function(n) {
-                var r = n[u];
-                return a === r && (0 !== a || 1 / a == 1 / r);
-            };
-        }
-        function oe(n) {
-            return null == n ? "" : Ae(n).replace(mt, vn);
-        }
-        function ue(n) {
-            return n;
-        }
-        function ae(n, r, e) {
-            var t = !0, o = r && On(r);
-            r && (e || o.length) || (null == e && (e = r), u = y, r = n, n = v, o = On(r)), 
-            e === !1 ? t = !1 : Bn(e) && "chain" in e && (t = e.chain);
-            var u = n, a = $n(u);
-            or(o, function(e) {
-                var o = n[e] = r[e];
-                a && (u.prototype[e] = function() {
-                    var r = this.__chain__, e = this.__wrapped__, a = [ e ];
-                    Ue.apply(a, arguments);
-                    var i = o.apply(n, a);
-                    if (t || r) {
-                        if (e === i && Bn(i)) return this;
-                        i = new u(i), i.__chain__ = r;
-                    }
-                    return i;
-                });
-            });
-        }
-        function ie() {
-            return e._ = De, this;
-        }
-        function le() {}
-        function ce(n) {
-            return function(r) {
-                return r[n];
-            };
-        }
-        function fe(n, r, e) {
-            var t = null == n, o = null == r;
-            if (null == e && ("boolean" == typeof n && o ? (e = n, n = 1) : o || "boolean" != typeof r || (e = r, 
-            o = !0)), t && o && (r = 1), n = +n || 0, o ? (r = n, n = 0) : r = +r || 0, e || n % 1 || r % 1) {
-                var u = ut();
-                return tt(n + u * (r - n + parseFloat("1e-" + ((u + "").length - 1))), r);
-            }
-            return fn(n, r);
-        }
-        function se(n, r) {
-            if (n) {
-                var e = n[r];
-                return $n(e) ? n[r]() : e;
-            }
-        }
-        function pe(n, r, e) {
-            var t = v.templateSettings;
-            n = Ae(n || ""), e = jt({}, e, t);
-            var o, u = jt({}, e.imports, t.imports), i = ht(u), l = Xn(u), c = 0, f = e.interpolate || L, s = "__p += '", p = Se((e.escape || L).source + "|" + f.source + "|" + (f === A ? E : L).source + "|" + (e.evaluate || L).source + "|$", "g");
-            n.replace(p, function(r, e, t, u, i, l) {
-                return t || (t = u), s += n.slice(c, l).replace(R, a), e && (s += "' +\n__e(" + e + ") +\n'"), 
-                i && (o = !0, s += "';\n" + i + ";\n__p += '"), t && (s += "' +\n((__t = (" + t + ")) == null ? '' : __t) +\n'"), 
-                c = l + r.length, r;
-            }), s += "';\n";
-            var h = e.variable, y = h;
-            y || (h = "obj", s = "with (" + h + ") {\n" + s + "\n}\n"), s = (o ? s.replace(j, "") : s).replace(C, "$1").replace(P, "$1;"), 
-            s = "function(" + h + ") {\n" + (y ? "" : h + " || (" + h + " = {});\n") + "var __t, __p = '', __e = _.escape" + (o ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + s + "return __p\n}";
-            var b = "\n/*\n//# sourceURL=" + (e.sourceURL || "/lodash/template/source[" + $++ + "]") + "\n*/";
-            try {
-                var d = Ce(i, "return " + s + b).apply(g, l);
-            } catch (_) {
-                throw _.source = s, _;
-            }
-            return r ? d(r) : (d.source = s, d);
-        }
-        function he(n, r, e) {
-            n = (n = +n) > -1 ? n : 0;
-            var t = -1, o = we(n);
-            for (r = en(r, e, 1); ++t < n; ) o[t] = r(t);
-            return o;
-        }
-        function ge(n) {
-            return null == n ? "" : Ae(n).replace(_t, _n);
-        }
-        function ve(n) {
-            var r = ++b;
-            return Ae(null == n ? "" : n) + r;
-        }
-        function ye(n) {
-            return n = new y(n), n.__chain__ = !0, n;
-        }
-        function be(n, r) {
-            return r(n), n;
-        }
-        function de() {
-            return this.__chain__ = !0, this;
-        }
-        function _e() {
-            return Ae(this.__wrapped__);
-        }
-        function me() {
-            return this.__wrapped__;
-        }
-        e = e ? un.defaults(nn.Object(), e, un.pick(nn, T)) : nn;
-        var we = e.Array, xe = e.Boolean, je = e.Date, ke = e.Error, Ce = e.Function, Pe = e.Math, Ee = e.Number, Oe = e.Object, Se = e.RegExp, Ae = e.String, Ie = e.TypeError, Le = [], Ne = ke.prototype, Re = Oe.prototype, Te = Ae.prototype, De = e._, $e = Re.toString, Be = Se("^" + Ae($e).replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/toString| for [^\]]+/g, ".*?") + "$"), Fe = Pe.ceil, He = e.clearTimeout, We = Pe.floor, qe = Ce.prototype.toString, ze = bn(ze = Oe.getPrototypeOf) && ze, Ke = Re.hasOwnProperty, Ue = Le.push, Me = Re.propertyIsEnumerable, Ve = e.setTimeout, Ge = Le.splice, Je = Le.unshift, Qe = function() {
-            try {
-                var n = {}, r = bn(r = Oe.defineProperty) && r, e = r(n, n, n) && r;
-            } catch (t) {}
-            return e;
-        }(), Xe = bn(Xe = Oe.create) && Xe, Ye = bn(Ye = we.isArray) && Ye, Ze = e.isFinite, nt = e.isNaN, rt = bn(rt = Oe.keys) && rt, et = Pe.max, tt = Pe.min, ot = e.parseInt, ut = Pe.random, at = {};
-        at[F] = we, at[H] = xe, at[W] = je, at[z] = Ce, at[U] = Oe, at[K] = Ee, at[M] = Se, 
-        at[V] = Ae;
-        var it = {};
-        it[F] = it[W] = it[K] = {
-            constructor: !0,
-            toLocaleString: !0,
-            toString: !0,
-            valueOf: !0
-        }, it[H] = it[V] = {
-            constructor: !0,
-            toString: !0,
-            valueOf: !0
-        }, it[q] = it[z] = it[M] = {
-            constructor: !0,
-            toString: !0
-        }, it[U] = {
-            constructor: !0
-        }, function() {
-            for (var n = D.length; n--; ) {
-                var r = D[n];
-                for (var e in it) Ke.call(it, e) && !Ke.call(it[e], r) && (it[e][r] = !1);
-            }
-        }(), y.prototype = v.prototype;
-        var lt = v.support = {};
-        !function() {
-            var n = function() {
-                this.x = 1;
-            }, r = {
-                "0": 1,
-                length: 1
-            }, t = [];
-            n.prototype = {
-                valueOf: 1,
-                y: 1
-            };
-            for (var o in new n()) t.push(o);
-            for (o in arguments) ;
-            lt.argsClass = $e.call(arguments) == B, lt.argsObject = arguments.constructor == Oe && !(arguments instanceof we), 
-            lt.enumErrorProps = Me.call(Ne, "message") || Me.call(Ne, "name"), lt.enumPrototypes = Me.call(n, "prototype"), 
-            lt.funcDecomp = !bn(e.WinRTError) && N.test(h), lt.funcNames = "string" == typeof Ce.name, 
-            lt.nonEnumArgs = 0 != o, lt.nonEnumShadows = !/valueOf/.test(t), lt.ownLast = "x" != t[0], 
-            lt.spliceObjects = (Le.splice.call(r, 0, 1), !r[0]), lt.unindexedChars = "x"[0] + Oe("x")[0] != "xx";
-            try {
-                lt.nodeClass = !($e.call(document) == U && !({
-                    toString: 0
-                } + ""));
-            } catch (u) {
-                lt.nodeClass = !0;
-            }
-        }(1), v.templateSettings = {
-            escape: /<%-([\s\S]+?)%>/g,
-            evaluate: /<%([\s\S]+?)%>/g,
-            interpolate: A,
-            variable: "",
-            imports: {
-                _: v
-            }
-        };
-        var ct = function(n) {
-            var r = "var index, iterable = " + n.firstArg + ", result = " + n.init + ";\nif (!iterable) return result;\n" + n.top + ";";
-            n.array ? (r += "\nvar length = iterable.length; index = -1;\nif (" + n.array + ") {  ", 
-            lt.unindexedChars && (r += "\n  if (isString(iterable)) {\n    iterable = iterable.split('')\n  }  "), 
-            r += "\n  while (++index < length) {\n    " + n.loop + ";\n  }\n}\nelse {  ") : lt.nonEnumArgs && (r += "\n  var length = iterable.length; index = -1;\n  if (length && isArguments(iterable)) {\n    while (++index < length) {\n      index += '';\n      " + n.loop + ";\n    }\n  } else {  "), 
-            lt.enumPrototypes && (r += "\n  var skipProto = typeof iterable == 'function';\n  "), 
-            lt.enumErrorProps && (r += "\n  var skipErrorProps = iterable === errorProto || iterable instanceof Error;\n  ");
-            var e = [];
-            if (lt.enumPrototypes && e.push('!(skipProto && index == "prototype")'), lt.enumErrorProps && e.push('!(skipErrorProps && (index == "message" || index == "name"))'), 
-            n.useHas && n.keys) r += "\n  var ownIndex = -1,\n      ownProps = objectTypes[typeof iterable] && keys(iterable),\n      length = ownProps ? ownProps.length : 0;\n\n  while (++ownIndex < length) {\n    index = ownProps[ownIndex];\n", 
-            e.length && (r += "    if (" + e.join(" && ") + ") {\n  "), r += n.loop + ";    ", 
-            e.length && (r += "\n    }"), r += "\n  }  "; else if (r += "\n  for (index in iterable) {\n", 
-            n.useHas && e.push("hasOwnProperty.call(iterable, index)"), e.length && (r += "    if (" + e.join(" && ") + ") {\n  "), 
-            r += n.loop + ";    ", e.length && (r += "\n    }"), r += "\n  }    ", lt.nonEnumShadows) {
-                for (r += "\n\n  if (iterable !== objectProto) {\n    var ctor = iterable.constructor,\n        isProto = iterable === (ctor && ctor.prototype),\n        className = iterable === stringProto ? stringClass : iterable === errorProto ? errorClass : toString.call(iterable),\n        nonEnum = nonEnumProps[className];\n      ", 
-                k = 0; k < 7; k++) r += "\n    index = '" + n.shadowedProps[k] + "';\n    if ((!(isProto && nonEnum[index]) && hasOwnProperty.call(iterable, index))", 
-                n.useHas || (r += " || (!nonEnum[index] && iterable[index] !== objectProto[index])"), 
-                r += ") {\n      " + n.loop + ";\n    }      ";
-                r += "\n  }    ";
-            }
-            return (n.array || lt.nonEnumArgs) && (r += "\n}"), r += n.bottom + ";\nreturn result";
-        };
-        Xe || (rn = function() {
-            function n() {}
-            return function(r) {
-                if (Bn(r)) {
-                    n.prototype = r;
-                    var t = new n();
-                    n.prototype = null;
-                }
-                return t || e.Object();
-            };
-        }());
-        var ft = Qe ? function(n, r) {
-            Q.value = r, Qe(n, "__bindData__", Q);
-        } : le;
-        lt.argsClass || (mn = function(n) {
-            return n && "object" == typeof n && "number" == typeof n.length && Ke.call(n, "callee") && !Me.call(n, "callee") || !1;
-        });
-        var st = Ye || function(n) {
-            return n && "object" == typeof n && "number" == typeof n.length && $e.call(n) == F || !1;
-        }, pt = gn({
-            args: "object",
-            init: "[]",
-            top: "if (!(objectTypes[typeof object])) return result",
-            loop: "result.push(index)"
-        }), ht = rt ? function(n) {
-            return Bn(n) ? lt.enumPrototypes && "function" == typeof n || lt.nonEnumArgs && n.length && mn(n) ? pt(n) : rt(n) : [];
-        } : pt, gt = {
-            args: "collection, callback, thisArg",
-            top: "callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3)",
-            array: "typeof length == 'number'",
-            keys: ht,
-            loop: "if (callback(iterable[index], index, collection) === false) return result"
-        }, vt = {
-            args: "object, source, guard",
-            top: "var args = arguments,\n    argsIndex = 0,\n    argsLength = typeof guard == 'number' ? 2 : args.length;\nwhile (++argsIndex < argsLength) {\n  iterable = args[argsIndex];\n  if (iterable && objectTypes[typeof iterable]) {",
-            keys: ht,
-            loop: "if (typeof result[index] == 'undefined') result[index] = iterable[index]",
-            bottom: "  }\n}"
-        }, yt = {
-            top: "if (!objectTypes[typeof iterable]) return result;\n" + gt.top,
-            array: !1
-        }, bt = {
-            "&": "&amp;",
-            "<": "&lt;",
-            ">": "&gt;",
-            '"': "&quot;",
-            "'": "&#39;"
-        }, dt = An(bt), _t = Se("(" + ht(dt).join("|") + ")", "g"), mt = Se("[" + ht(bt).join("") + "]", "g"), wt = gn(gt), xt = gn(vt, {
-            top: vt.top.replace(";", ";\nif (argsLength > 3 && typeof args[argsLength - 2] == 'function') {\n  var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2);\n} else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') {\n  callback = args[--argsLength];\n}"),
-            loop: "result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]"
-        }), jt = gn(vt), kt = gn(gt, yt, {
-            useHas: !1
-        }), Ct = gn(gt, yt);
-        $n(/x/) && ($n = function(n) {
-            return "function" == typeof n && $e.call(n) == z;
-        });
-        var Pt = ze ? function(n) {
-            if (!n || $e.call(n) != U || !lt.argsClass && mn(n)) return !1;
-            var r = n.valueOf, e = bn(r) && (e = ze(r)) && ze(e);
-            return e ? n == e || ze(n) == e : dn(n);
-        } : dn, Et = pn(function(n, r, e) {
-            Ke.call(n, e) ? n[e]++ : n[e] = 1;
-        }), Ot = pn(function(n, r, e) {
-            (Ke.call(n, e) ? n[e] : n[e] = []).push(r);
-        }), St = pn(function(n, r, e) {
-            n[e] = r;
-        }), At = ir, It = rr, Lt = bn(Lt = je.now) && Lt || function() {
-            return new je().getTime();
-        }, Nt = 8 == ot(x + "08") ? ot : function(n, r) {
-            return ot(zn(n) ? n.replace(I, "") : n, r || 0);
-        };
-        return v.after = Wr, v.assign = xt, v.at = Yn, v.bind = qr, v.bindAll = zr, v.bindKey = Kr, 
-        v.chain = ye, v.compact = _r, v.compose = Ur, v.constant = ee, v.countBy = Et, v.create = jn, 
-        v.createCallback = te, v.curry = Mr, v.debounce = Vr, v.defaults = jt, v.defer = Gr, 
-        v.delay = Jr, v.difference = mr, v.filter = rr, v.flatten = kr, v.forEach = or, 
-        v.forEachRight = ur, v.forIn = kt, v.forInRight = Pn, v.forOwn = Ct, v.forOwnRight = En, 
-        v.functions = On, v.groupBy = Ot, v.indexBy = St, v.initial = Pr, v.intersection = Er, 
-        v.invert = An, v.invoke = ar, v.keys = ht, v.map = ir, v.mapValues = Un, v.max = lr, 
-        v.memoize = Qr, v.merge = Mn, v.min = cr, v.omit = Vn, v.once = Xr, v.pairs = Gn, 
-        v.partial = Yr, v.partialRight = Zr, v.pick = Jn, v.pluck = At, v.property = ce, 
-        v.pull = Ar, v.range = Ir, v.reject = pr, v.remove = Lr, v.rest = Nr, v.shuffle = gr, 
-        v.sortBy = br, v.tap = be, v.throttle = ne, v.times = he, v.toArray = dr, v.transform = Qn, 
-        v.union = Tr, v.uniq = Dr, v.values = Xn, v.where = It, v.without = $r, v.wrap = re, 
-        v.xor = Br, v.zip = Fr, v.zipObject = Hr, v.collect = ir, v.drop = Nr, v.each = or, 
-        v.eachRight = ur, v.extend = xt, v.methods = On, v.object = Hr, v.select = rr, v.tail = Nr, 
-        v.unique = Dr, v.unzip = Fr, ae(v), v.clone = wn, v.cloneDeep = xn, v.contains = Zn, 
-        v.escape = oe, v.every = nr, v.find = er, v.findIndex = wr, v.findKey = kn, v.findLast = tr, 
-        v.findLastIndex = xr, v.findLastKey = Cn, v.has = Sn, v.identity = ue, v.indexOf = Cr, 
-        v.isArguments = mn, v.isArray = st, v.isBoolean = In, v.isDate = Ln, v.isElement = Nn, 
-        v.isEmpty = Rn, v.isEqual = Tn, v.isFinite = Dn, v.isFunction = $n, v.isNaN = Fn, 
-        v.isNull = Hn, v.isNumber = Wn, v.isObject = Bn, v.isPlainObject = Pt, v.isRegExp = qn, 
-        v.isString = zn, v.isUndefined = Kn, v.lastIndexOf = Sr, v.mixin = ae, v.noConflict = ie, 
-        v.noop = le, v.now = Lt, v.parseInt = Nt, v.random = fe, v.reduce = fr, v.reduceRight = sr, 
-        v.result = se, v.runInContext = h, v.size = vr, v.some = yr, v.sortedIndex = Rr, 
-        v.template = pe, v.unescape = ge, v.uniqueId = ve, v.all = nr, v.any = yr, v.detect = er, 
-        v.findWhere = er, v.foldl = fr, v.foldr = sr, v.include = Zn, v.inject = fr, ae(function() {
-            var n = {};
-            return Ct(v, function(r, e) {
-                v.prototype[e] || (n[e] = r);
-            }), n;
-        }(), !1), v.first = jr, v.last = Or, v.sample = hr, v.take = jr, v.head = jr, Ct(v, function(n, r) {
-            var e = "sample" !== r;
-            v.prototype[r] || (v.prototype[r] = function(r, t) {
-                var o = this.__chain__, u = n(this.__wrapped__, r, t);
-                return o || null != r && (!t || e && "function" == typeof r) ? new y(u, o) : u;
-            });
-        }), v.VERSION = "2.4.1", v.prototype.chain = de, v.prototype.toString = _e, v.prototype.value = me, 
-        v.prototype.valueOf = me, wt([ "join", "pop", "shift" ], function(n) {
-            var r = Le[n];
-            v.prototype[n] = function() {
-                var n = this.__chain__, e = r.apply(this.__wrapped__, arguments);
-                return n ? new y(e, n) : e;
-            };
-        }), wt([ "push", "reverse", "sort", "unshift" ], function(n) {
-            var r = Le[n];
-            v.prototype[n] = function() {
-                return r.apply(this.__wrapped__, arguments), this;
-            };
-        }), wt([ "concat", "slice", "splice" ], function(n) {
-            var r = Le[n];
-            v.prototype[n] = function() {
-                return new y(r.apply(this.__wrapped__, arguments), this.__chain__);
-            };
-        }), lt.spliceObjects || wt([ "pop", "shift", "splice" ], function(n) {
-            var r = Le[n], e = "splice" == n;
-            v.prototype[n] = function() {
-                var n = this.__chain__, t = this.__wrapped__, o = r.apply(t, arguments);
-                return 0 === t.length && delete t[0], n || e ? new y(o, n) : o;
-            };
-        }), v;
-    }
-    var g, v = [], y = [], b = 0, d = {}, _ = +new Date() + "", m = 75, w = 40, x = " \t\x0B\f \ufeff\n\r\u2028\u2029 ᠎              ", j = /\b__p \+= '';/g, C = /\b(__p \+=) '' \+/g, P = /(__e\(.*?\)|\b__t\)) \+\n'';/g, E = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g, O = /\w*$/, S = /^\s*function[ \n\r\t]+\w/, A = /<%=([\s\S]+?)%>/g, I = RegExp("^[" + x + "]*0+(?=.$)"), L = /($^)/, N = /\bthis\b/, R = /['\n\r\t\u2028\u2029\\]/g, T = [ "Array", "Boolean", "Date", "Error", "Function", "Math", "Number", "Object", "RegExp", "String", "_", "attachEvent", "clearTimeout", "isFinite", "isNaN", "parseInt", "setTimeout" ], D = [ "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf" ], $ = 0, B = "[object Arguments]", F = "[object Array]", H = "[object Boolean]", W = "[object Date]", q = "[object Error]", z = "[object Function]", K = "[object Number]", U = "[object Object]", M = "[object RegExp]", V = "[object String]", G = {};
-    G[z] = !1, G[B] = G[F] = G[H] = G[W] = G[K] = G[U] = G[M] = G[V] = !0;
-    var J = {
-        leading: !1,
-        maxWait: 0,
-        trailing: !1
-    }, Q = {
-        configurable: !1,
-        enumerable: !1,
-        value: null,
-        writable: !1
-    }, X = {
-        args: "",
-        array: null,
-        bottom: "",
-        firstArg: "",
-        init: "",
-        keys: null,
-        loop: "",
-        shadowedProps: null,
-        support: null,
-        top: "",
-        useHas: !1
-    }, Y = {
-        "boolean": !1,
-        "function": !0,
-        object: !0,
-        number: !1,
-        string: !1,
-        undefined: !1
-    }, Z = {
-        "\\": "\\",
-        "'": "'",
-        "\n": "n",
-        "\r": "r",
-        "\t": "t",
-        "\u2028": "u2028",
-        "\u2029": "u2029"
-    }, nn = Y[typeof window] && window || this, rn = Y[typeof exports] && exports && !exports.nodeType && exports, en = Y[typeof module] && module && !module.nodeType && module, tn = en && en.exports === rn && rn, on = Y[typeof global] && global;
-    !on || on.global !== on && on.window !== on || (nn = on);
-    var un = h();
-    "function" == typeof define && "object" == typeof define.amd && define.amd ? (nn._ = un, 
-    define(function() {
-        return un;
-    })) : rn && en ? tn ? (en.exports = un)._ = un : rn._ = un : nn._ = un;
-}).call(this);
-!function() {
-    "use strict";
-    function t(e, o) {
-        function i(t, e) {
-            return function() {
-                return t.apply(e, arguments);
-            };
-        }
-        var r;
-        if (o = o || {}, this.trackingClick = !1, this.trackingClickStart = 0, this.targetElement = null, 
-        this.touchStartX = 0, this.touchStartY = 0, this.lastTouchIdentifier = 0, this.touchBoundary = o.touchBoundary || 10, 
-        this.layer = e, this.tapDelay = o.tapDelay || 200, this.tapTimeout = o.tapTimeout || 700, 
-        !t.notNeeded(e)) {
-            for (var a = [ "onMouse", "onClick", "onTouchStart", "onTouchMove", "onTouchEnd", "onTouchCancel" ], c = this, s = 0, u = a.length; s < u; s++) c[a[s]] = i(c[a[s]], c);
-            n && (e.addEventListener("mouseover", this.onMouse, !0), e.addEventListener("mousedown", this.onMouse, !0), 
-            e.addEventListener("mouseup", this.onMouse, !0)), e.addEventListener("click", this.onClick, !0), 
-            e.addEventListener("touchstart", this.onTouchStart, !1), e.addEventListener("touchmove", this.onTouchMove, !1), 
-            e.addEventListener("touchend", this.onTouchEnd, !1), e.addEventListener("touchcancel", this.onTouchCancel, !1), 
-            Event.prototype.stopImmediatePropagation || (e.removeEventListener = function(t, n, o) {
-                var i = Node.prototype.removeEventListener;
-                "click" === t ? i.call(e, t, n.hijacked || n, o) : i.call(e, t, n, o);
-            }, e.addEventListener = function(t, n, o) {
-                var i = Node.prototype.addEventListener;
-                "click" === t ? i.call(e, t, n.hijacked || (n.hijacked = function(t) {
-                    t.propagationStopped || n(t);
-                }), o) : i.call(e, t, n, o);
-            }), "function" == typeof e.onclick && (r = e.onclick, e.addEventListener("click", function(t) {
-                r(t);
-            }, !1), e.onclick = null);
-        }
-    }
-    var e = navigator.userAgent.indexOf("Windows Phone") >= 0, n = navigator.userAgent.indexOf("Android") > 0 && !e, o = /iP(ad|hone|od)/.test(navigator.userAgent) && !e, i = o && /OS 4_\d(_\d)?/.test(navigator.userAgent), r = o && /OS [6-7]_\d/.test(navigator.userAgent), a = navigator.userAgent.indexOf("BB10") > 0;
-    t.prototype.needsClick = function(t) {
-        switch (t.nodeName.toLowerCase()) {
-          case "button":
-          case "select":
-          case "textarea":
-            if (t.disabled) return !0;
-            break;
-
-          case "input":
-            if (o && "file" === t.type || t.disabled) return !0;
-            break;
-
-          case "label":
-          case "iframe":
-          case "video":
-            return !0;
-        }
-        return /\bneedsclick\b/.test(t.className);
-    }, t.prototype.needsFocus = function(t) {
-        switch (t.nodeName.toLowerCase()) {
-          case "textarea":
-            return !0;
-
-          case "select":
-            return !n;
-
-          case "input":
-            switch (t.type) {
-              case "button":
-              case "checkbox":
-              case "file":
-              case "image":
-              case "radio":
-              case "submit":
-                return !1;
-            }
-            return !t.disabled && !t.readOnly;
-
-          default:
-            return /\bneedsfocus\b/.test(t.className);
-        }
-    }, t.prototype.sendClick = function(t, e) {
-        var n, o;
-        document.activeElement && document.activeElement !== t && document.activeElement.blur(), 
-        o = e.changedTouches[0], n = document.createEvent("MouseEvents"), n.initMouseEvent(this.determineEventType(t), !0, !0, window, 1, o.screenX, o.screenY, o.clientX, o.clientY, !1, !1, !1, !1, 0, null), 
-        n.forwardedTouchEvent = !0, t.dispatchEvent(n);
-    }, t.prototype.determineEventType = function(t) {
-        return n && "select" === t.tagName.toLowerCase() ? "mousedown" : "click";
-    }, t.prototype.focus = function(t) {
-        var e;
-        o && t.setSelectionRange && 0 !== t.type.indexOf("date") && "time" !== t.type && "month" !== t.type ? (e = t.value.length, 
-        t.setSelectionRange(e, e)) : t.focus();
-    }, t.prototype.updateScrollParent = function(t) {
-        var e, n;
-        if (e = t.fastClickScrollParent, !e || !e.contains(t)) {
-            n = t;
-            do {
-                if (n.scrollHeight > n.offsetHeight) {
-                    e = n, t.fastClickScrollParent = n;
-                    break;
-                }
-                n = n.parentElement;
-            } while (n);
-        }
-        e && (e.fastClickLastScrollTop = e.scrollTop);
-    }, t.prototype.getTargetElementFromEventTarget = function(t) {
-        return t.nodeType === Node.TEXT_NODE ? t.parentNode : t;
-    }, t.prototype.onTouchStart = function(t) {
-        var e, n, r;
-        if (t.targetTouches.length > 1) return !0;
-        if (e = this.getTargetElementFromEventTarget(t.target), n = t.targetTouches[0], 
-        o) {
-            if (r = window.getSelection(), r.rangeCount && !r.isCollapsed) return !0;
-            if (!i) {
-                if (n.identifier && n.identifier === this.lastTouchIdentifier) return t.preventDefault(), 
-                !1;
-                this.lastTouchIdentifier = n.identifier, this.updateScrollParent(e);
-            }
-        }
-        return this.trackingClick = !0, this.trackingClickStart = t.timeStamp, this.targetElement = e, 
-        this.touchStartX = n.pageX, this.touchStartY = n.pageY, t.timeStamp - this.lastClickTime < this.tapDelay && t.preventDefault(), 
-        !0;
-    }, t.prototype.touchHasMoved = function(t) {
-        var e = t.changedTouches[0], n = this.touchBoundary;
-        return Math.abs(e.pageX - this.touchStartX) > n || Math.abs(e.pageY - this.touchStartY) > n;
-    }, t.prototype.onTouchMove = function(t) {
-        return !this.trackingClick || ((this.targetElement !== this.getTargetElementFromEventTarget(t.target) || this.touchHasMoved(t)) && (this.trackingClick = !1, 
-        this.targetElement = null), !0);
-    }, t.prototype.findControl = function(t) {
-        return void 0 !== t.control ? t.control : t.htmlFor ? document.getElementById(t.htmlFor) : t.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea");
-    }, t.prototype.onTouchEnd = function(t) {
-        var e, a, c, s, u, l = this.targetElement;
-        if (!this.trackingClick) return !0;
-        if (t.timeStamp - this.lastClickTime < this.tapDelay) return this.cancelNextClick = !0, 
-        !0;
-        if (t.timeStamp - this.trackingClickStart > this.tapTimeout) return !0;
-        if (this.cancelNextClick = !1, this.lastClickTime = t.timeStamp, a = this.trackingClickStart, 
-        this.trackingClick = !1, this.trackingClickStart = 0, r && (u = t.changedTouches[0], 
-        l = document.elementFromPoint(u.pageX - window.pageXOffset, u.pageY - window.pageYOffset) || l, 
-        l.fastClickScrollParent = this.targetElement.fastClickScrollParent), c = l.tagName.toLowerCase(), 
-        "label" === c) {
-            if (e = this.findControl(l)) {
-                if (this.focus(l), n) return !1;
-                l = e;
-            }
-        } else if (this.needsFocus(l)) return t.timeStamp - a > 100 || o && window.top !== window && "input" === c ? (this.targetElement = null, 
-        !1) : (this.focus(l), this.sendClick(l, t), o && "select" === c || (this.targetElement = null, 
-        t.preventDefault()), !1);
-        return !(!o || i || (s = l.fastClickScrollParent, !s || s.fastClickLastScrollTop === s.scrollTop)) || (this.needsClick(l) || (t.preventDefault(), 
-        this.sendClick(l, t)), !1);
-    }, t.prototype.onTouchCancel = function() {
-        this.trackingClick = !1, this.targetElement = null;
-    }, t.prototype.onMouse = function(t) {
-        return !this.targetElement || (!!t.forwardedTouchEvent || (!t.cancelable || (!(!this.needsClick(this.targetElement) || this.cancelNextClick) || (t.stopImmediatePropagation ? t.stopImmediatePropagation() : t.propagationStopped = !0, 
-        t.stopPropagation(), t.preventDefault(), !1))));
-    }, t.prototype.onClick = function(t) {
-        var e;
-        return this.trackingClick ? (this.targetElement = null, this.trackingClick = !1, 
-        !0) : "submit" === t.target.type && 0 === t.detail || (e = this.onMouse(t), e || (this.targetElement = null), 
-        e);
-    }, t.prototype.destroy = function() {
-        var t = this.layer;
-        n && (t.removeEventListener("mouseover", this.onMouse, !0), t.removeEventListener("mousedown", this.onMouse, !0), 
-        t.removeEventListener("mouseup", this.onMouse, !0)), t.removeEventListener("click", this.onClick, !0), 
-        t.removeEventListener("touchstart", this.onTouchStart, !1), t.removeEventListener("touchmove", this.onTouchMove, !1), 
-        t.removeEventListener("touchend", this.onTouchEnd, !1), t.removeEventListener("touchcancel", this.onTouchCancel, !1);
-    }, t.notNeeded = function(t) {
-        var e, o, i, r;
-        if ("undefined" == typeof window.ontouchstart) return !0;
-        if (o = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [ , 0 ])[1]) {
-            if (!n) return !0;
-            if (e = document.querySelector("meta[name=viewport]")) {
-                if (e.content.indexOf("user-scalable=no") !== -1) return !0;
-                if (o > 31 && document.documentElement.scrollWidth <= window.outerWidth) return !0;
-            }
-        }
-        if (a && (i = navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/), i[1] >= 10 && i[2] >= 3 && (e = document.querySelector("meta[name=viewport]")))) {
-            if (e.content.indexOf("user-scalable=no") !== -1) return !0;
-            if (document.documentElement.scrollWidth <= window.outerWidth) return !0;
-        }
-        return "none" === t.style.msTouchAction || "manipulation" === t.style.touchAction || (r = +(/Firefox\/([0-9]+)/.exec(navigator.userAgent) || [ , 0 ])[1], 
-        !!(r >= 27 && (e = document.querySelector("meta[name=viewport]"), e && (e.content.indexOf("user-scalable=no") !== -1 || document.documentElement.scrollWidth <= window.outerWidth))) || ("none" === t.style.touchAction || "manipulation" === t.style.touchAction));
-    }, t.attach = function(e, n) {
-        return new t(e, n);
-    }, "function" == typeof define && "object" == typeof define.amd && define.amd ? define(function() {
-        return t;
-    }) : "undefined" != typeof module && module.exports ? (module.exports = t.attach, 
-    module.exports.FastClick = t) : window.FastClick = t;
-}();
-!function(t, e) {
-    "object" == typeof exports && "undefined" != typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define(e) : t.Vue = e();
-}(this, function() {
-    "use strict";
-    function t(e, n, r) {
-        if (i(e, n)) return void (e[n] = r);
-        if (e._isVue) return void t(e._data, n, r);
-        var s = e.__ob__;
-        if (!s) return void (e[n] = r);
-        if (s.convert(n, r), s.dep.notify(), s.vms) for (var o = s.vms.length; o--; ) {
-            var a = s.vms[o];
-            a._proxy(n), a._digest();
-        }
-        return r;
-    }
-    function e(t, e) {
-        if (i(t, e)) {
-            delete t[e];
-            var n = t.__ob__;
-            if (!n) return void (t._isVue && (delete t._data[e], t._digest()));
-            if (n.dep.notify(), n.vms) for (var r = n.vms.length; r--; ) {
-                var s = n.vms[r];
-                s._unproxy(e), s._digest();
-            }
-        }
-    }
-    function i(t, e) {
-        return Oi.call(t, e);
-    }
-    function n(t) {
-        return Ni.test(t);
-    }
-    function r(t) {
-        var e = (t + "").charCodeAt(0);
-        return 36 === e || 95 === e;
-    }
-    function s(t) {
-        return null == t ? "" : t.toString();
-    }
-    function o(t) {
-        if ("string" != typeof t) return t;
-        var e = Number(t);
-        return isNaN(e) ? t : e;
-    }
-    function a(t) {
-        return "true" === t || "false" !== t && t;
-    }
-    function h(t) {
-        var e = t.charCodeAt(0), i = t.charCodeAt(t.length - 1);
-        return e !== i || 34 !== e && 39 !== e ? t : t.slice(1, -1);
-    }
-    function l(t) {
-        return t.replace(ji, c);
-    }
-    function c(t, e) {
-        return e ? e.toUpperCase() : "";
-    }
-    function u(t) {
-        return t.replace(Ei, "$1-$2").toLowerCase();
-    }
-    function f(t) {
-        return t.replace(Si, c);
-    }
-    function p(t, e) {
-        return function(i) {
-            var n = arguments.length;
-            return n ? n > 1 ? t.apply(e, arguments) : t.call(e, i) : t.call(e);
-        };
-    }
-    function d(t, e) {
-        e = e || 0;
-        for (var i = t.length - e, n = new Array(i); i--; ) n[i] = t[i + e];
-        return n;
-    }
-    function v(t, e) {
-        for (var i = Object.keys(e), n = i.length; n--; ) t[i[n]] = e[i[n]];
-        return t;
-    }
-    function m(t) {
-        return null !== t && "object" == typeof t;
-    }
-    function g(t) {
-        return Di.call(t) === Fi;
-    }
-    function _(t, e, i, n) {
-        Object.defineProperty(t, e, {
-            value: i,
-            enumerable: !!n,
-            writable: !0,
-            configurable: !0
-        });
-    }
-    function b(t, e) {
-        var i, n, r, s, o, a = function h() {
-            var a = Date.now() - s;
-            a < e && a >= 0 ? i = setTimeout(h, e - a) : (i = null, o = t.apply(r, n), i || (r = n = null));
-        };
-        return function() {
-            return r = this, n = arguments, s = Date.now(), i || (i = setTimeout(a, e)), o;
-        };
-    }
-    function y(t, e) {
-        for (var i = t.length; i--; ) if (t[i] === e) return i;
-        return -1;
-    }
-    function w(t) {
-        var e = function i() {
-            if (!i.cancelled) return t.apply(this, arguments);
-        };
-        return e.cancel = function() {
-            e.cancelled = !0;
-        }, e;
-    }
-    function C(t, e) {
-        return t == e || !(!m(t) || !m(e)) && JSON.stringify(t) === JSON.stringify(e);
-    }
-    function $(t) {
-        this.size = 0, this.limit = t, this.head = this.tail = void 0, this._keymap = Object.create(null);
-    }
-    function k() {
-        var t, e = Ki.slice(on, rn).trim();
-        if (e) {
-            t = {};
-            var i = e.match(pn);
-            t.name = i[0], i.length > 1 && (t.args = i.slice(1).map(x));
-        }
-        t && (tn.filters = tn.filters || []).push(t), on = rn + 1;
-    }
-    function x(t) {
-        if (dn.test(t)) return {
-            value: o(t),
-            dynamic: !1
-        };
-        var e = h(t), i = e === t;
-        return {
-            value: i ? t : e,
-            dynamic: i
-        };
-    }
-    function A(t) {
-        var e = fn.get(t);
-        if (e) return e;
-        for (Ki = t, an = hn = !1, ln = cn = un = 0, on = 0, tn = {}, rn = 0, sn = Ki.length; rn < sn; rn++) if (nn = en, 
-        en = Ki.charCodeAt(rn), an) 39 === en && 92 !== nn && (an = !an); else if (hn) 34 === en && 92 !== nn && (hn = !hn); else if (124 === en && 124 !== Ki.charCodeAt(rn + 1) && 124 !== Ki.charCodeAt(rn - 1)) null == tn.expression ? (on = rn + 1, 
-        tn.expression = Ki.slice(0, rn).trim()) : k(); else switch (en) {
-          case 34:
-            hn = !0;
-            break;
-
-          case 39:
-            an = !0;
-            break;
-
-          case 40:
-            un++;
-            break;
-
-          case 41:
-            un--;
-            break;
-
-          case 91:
-            cn++;
-            break;
-
-          case 93:
-            cn--;
-            break;
-
-          case 123:
-            ln++;
-            break;
-
-          case 125:
-            ln--;
-        }
-        return null == tn.expression ? tn.expression = Ki.slice(0, rn).trim() : 0 !== on && k(), 
-        fn.put(t, tn), tn;
-    }
-    function T(t) {
-        return t.replace(mn, "\\$&");
-    }
-    function O() {
-        var t = T(kn.delimiters[0]), e = T(kn.delimiters[1]), i = T(kn.unsafeDelimiters[0]), n = T(kn.unsafeDelimiters[1]);
-        _n = new RegExp(i + "((?:.|\\n)+?)" + n + "|" + t + "((?:.|\\n)+?)" + e, "g"), bn = new RegExp("^" + i + ".*" + n + "$"), 
-        gn = new $(1e3);
-    }
-    function N(t) {
-        gn || O();
-        var e = gn.get(t);
-        if (e) return e;
-        if (!_n.test(t)) return null;
-        for (var i, n, r, s, o, a, h = [], l = _n.lastIndex = 0; i = _n.exec(t); ) n = i.index, 
-        n > l && h.push({
-            value: t.slice(l, n)
-        }), r = bn.test(i[0]), s = r ? i[1] : i[2], o = s.charCodeAt(0), a = 42 === o, s = a ? s.slice(1) : s, 
-        h.push({
-            tag: !0,
-            value: s.trim(),
-            html: r,
-            oneTime: a
-        }), l = n + i[0].length;
-        return l < t.length && h.push({
-            value: t.slice(l)
-        }), gn.put(t, h), h;
-    }
-    function j(t, e) {
-        return t.length > 1 ? t.map(function(t) {
-            return E(t, e);
-        }).join("+") : E(t[0], e, !0);
-    }
-    function E(t, e, i) {
-        return t.tag ? t.oneTime && e ? '"' + e.$eval(t.value) + '"' : S(t.value, i) : '"' + t.value + '"';
-    }
-    function S(t, e) {
-        if (yn.test(t)) {
-            var i = A(t);
-            return i.filters ? "this._applyFilters(" + i.expression + ",null," + JSON.stringify(i.filters) + ",false)" : "(" + t + ")";
-        }
-        return e ? t : "(" + t + ")";
-    }
-    function D(t, e, i, n) {
-        R(t, 1, function() {
-            e.appendChild(t);
-        }, i, n);
-    }
-    function F(t, e, i, n) {
-        R(t, 1, function() {
-            V(t, e);
-        }, i, n);
-    }
-    function P(t, e, i) {
-        R(t, -1, function() {
-            U(t);
-        }, e, i);
-    }
-    function R(t, e, i, n, r) {
-        var s = t.__v_trans;
-        if (!s || !s.hooks && !zi || !n._isCompiled || n.$parent && !n.$parent._isCompiled) return i(), 
-        void (r && r());
-        var o = e > 0 ? "enter" : "leave";
-        s[o](i, r);
-    }
-    function L(t) {
-        if ("string" == typeof t) {
-            var e = t;
-            t = document.querySelector(t), t || xn("Cannot find element: " + e);
-        }
-        return t;
-    }
-    function I(t) {
-        if (!t) return !1;
-        var e = t.ownerDocument.documentElement, i = t.parentNode;
-        return e === t || e === i || !(!i || 1 !== i.nodeType || !e.contains(i));
-    }
-    function H(t, e) {
-        var i = t.getAttribute(e);
-        return null !== i && t.removeAttribute(e), i;
-    }
-    function M(t, e) {
-        var i = H(t, ":" + e);
-        return null === i && (i = H(t, "v-bind:" + e)), i;
-    }
-    function W(t, e) {
-        return t.hasAttribute(e) || t.hasAttribute(":" + e) || t.hasAttribute("v-bind:" + e);
-    }
-    function V(t, e) {
-        e.parentNode && e.parentNode.insertBefore(t, e);
-    }
-    function B(t, e) {
-        e.nextSibling ? V(t, e.nextSibling) : e.parentNode.appendChild(t);
-    }
-    function U(t) {
-        t.parentNode && t.parentNode.removeChild(t);
-    }
-    function z(t, e) {
-        e.firstChild ? V(t, e.firstChild) : e.appendChild(t);
-    }
-    function q(t, e) {
-        var i = t.parentNode;
-        i && i.replaceChild(e, t);
-    }
-    function J(t, e, i, n) {
-        t.addEventListener(e, i, n);
-    }
-    function Y(t, e, i) {
-        t.removeEventListener(e, i);
-    }
-    function Q(t) {
-        var e = t.className;
-        return "object" == typeof e && (e = e.baseVal || ""), e;
-    }
-    function Z(t, e) {
-        Mi && !/svg$/.test(t.namespaceURI) ? t.className = e : t.setAttribute("class", e);
-    }
-    function G(t, e) {
-        if (t.classList) t.classList.add(e); else {
-            var i = " " + Q(t) + " ";
-            i.indexOf(" " + e + " ") < 0 && Z(t, (i + e).trim());
-        }
-    }
-    function X(t, e) {
-        if (t.classList) t.classList.remove(e); else {
-            for (var i = " " + Q(t) + " ", n = " " + e + " "; i.indexOf(n) >= 0; ) i = i.replace(n, " ");
-            Z(t, i.trim());
-        }
-        t.className || t.removeAttribute("class");
-    }
-    function K(t, e) {
-        var i, n;
-        if (it(t) && at(t.content) && (t = t.content), t.hasChildNodes()) for (tt(t), n = e ? document.createDocumentFragment() : document.createElement("div"); i = t.firstChild; ) n.appendChild(i);
-        return n;
-    }
-    function tt(t) {
-        for (var e; e = t.firstChild, et(e); ) t.removeChild(e);
-        for (;e = t.lastChild, et(e); ) t.removeChild(e);
-    }
-    function et(t) {
-        return t && (3 === t.nodeType && !t.data.trim() || 8 === t.nodeType);
-    }
-    function it(t) {
-        return t.tagName && "template" === t.tagName.toLowerCase();
-    }
-    function nt(t, e) {
-        var i = kn.debug ? document.createComment(t) : document.createTextNode(e ? " " : "");
-        return i.__v_anchor = !0, i;
-    }
-    function rt(t) {
-        if (t.hasAttributes()) for (var e = t.attributes, i = 0, n = e.length; i < n; i++) {
-            var r = e[i].name;
-            if (On.test(r)) return l(r.replace(On, ""));
-        }
-    }
-    function st(t, e, i) {
-        for (var n; t !== e; ) n = t.nextSibling, i(t), t = n;
-        i(e);
-    }
-    function ot(t, e, i, n, r) {
-        function s() {
-            if (a++, o && a >= h.length) {
-                for (var t = 0; t < h.length; t++) n.appendChild(h[t]);
-                r && r();
-            }
-        }
-        var o = !1, a = 0, h = [];
-        st(t, e, function(t) {
-            t === e && (o = !0), h.push(t), P(t, i, s);
-        });
-    }
-    function at(t) {
-        return t && 11 === t.nodeType;
-    }
-    function ht(t) {
-        if (t.outerHTML) return t.outerHTML;
-        var e = document.createElement("div");
-        return e.appendChild(t.cloneNode(!0)), e.innerHTML;
-    }
-    function lt(t, e) {
-        var i = t.tagName.toLowerCase(), n = t.hasAttributes();
-        if (Nn.test(i) || jn.test(i)) {
-            if (n) return ct(t, e);
-        } else {
-            if (gt(e, "components", i)) return {
-                id: i
-            };
-            var r = n && ct(t, e);
-            if (r) return r;
-            var s = e._componentNameMap && e._componentNameMap[i];
-            s ? xn("Unknown custom element: <" + i + "> - did you mean <" + s + ">? HTML is case-insensitive, remember to use kebab-case in templates.") : En(t, i) && xn("Unknown custom element: <" + i + '> - did you register the component correctly? For recursive components, make sure to provide the "name" option.');
-        }
-    }
-    function ct(t, e) {
-        var i = t.getAttribute("is");
-        if (null != i) {
-            if (gt(e, "components", i)) return t.removeAttribute("is"), {
-                id: i
-            };
-        } else if (i = M(t, "is"), null != i) return {
-            id: i,
-            dynamic: !0
-        };
-    }
-    function ut(e, n) {
-        var r, s, o;
-        for (r in n) s = e[r], o = n[r], i(e, r) ? m(s) && m(o) && ut(s, o) : t(e, r, o);
-        return e;
-    }
-    function ft(t, e) {
-        var i = Object.create(t || null);
-        return e ? v(i, vt(e)) : i;
-    }
-    function pt(t) {
-        if (t.components) for (var e, i = t.components = vt(t.components), n = Object.keys(i), r = t._componentNameMap = {}, s = 0, o = n.length; s < o; s++) {
-            var a = n[s];
-            Nn.test(a) || jn.test(a) ? xn("Do not use built-in or reserved HTML elements as component id: " + a) : (r[a.replace(/-/g, "").toLowerCase()] = u(a), 
-            e = i[a], g(e) && (i[a] = Ci.extend(e)));
-        }
-    }
-    function dt(t) {
-        var e, i, n = t.props;
-        if (Pi(n)) for (t.props = {}, e = n.length; e--; ) i = n[e], "string" == typeof i ? t.props[i] = null : i.name && (t.props[i.name] = i); else if (g(n)) {
-            var r = Object.keys(n);
-            for (e = r.length; e--; ) i = n[r[e]], "function" == typeof i && (n[r[e]] = {
-                type: i
-            });
-        }
-    }
-    function vt(t) {
-        if (Pi(t)) {
-            for (var e, i = {}, n = t.length; n--; ) {
-                e = t[n];
-                var r = "function" == typeof e ? e.options && e.options.name || e.id : e.name || e.id;
-                r ? i[r] = e : xn('Array-syntax assets must provide a "name" or "id" field.');
-            }
-            return i;
-        }
-        return t;
-    }
-    function mt(t, e, n) {
-        function r(i) {
-            var r = Sn[i] || Dn;
-            o[i] = r(t[i], e[i], n, i);
-        }
-        pt(e), dt(e), e.propsData && !n && xn("propsData can only be used as an instantiation option.");
-        var s, o = {};
-        if (e["extends"] && (t = "function" == typeof e["extends"] ? mt(t, e["extends"].options, n) : mt(t, e["extends"], n)), 
-        e.mixins) for (var a = 0, h = e.mixins.length; a < h; a++) t = mt(t, e.mixins[a], n);
-        for (s in t) r(s);
-        for (s in e) i(t, s) || r(s);
-        return o;
-    }
-    function gt(t, e, i, n) {
-        if ("string" == typeof i) {
-            var r, s = t[e], o = s[i] || s[r = l(i)] || s[r.charAt(0).toUpperCase() + r.slice(1)];
-            return n && !o && xn("Failed to resolve " + e.slice(0, -1) + ": " + i, t), o;
-        }
-    }
-    function _t() {
-        this.id = Fn++, this.subs = [];
-    }
-    function bt(t) {
-        In = !1, t(), In = !0;
-    }
-    function yt(t) {
-        if (this.value = t, this.dep = new _t(), _(t, "__ob__", this), Pi(t)) {
-            var e = Ri ? wt : Ct;
-            e(t, Rn, Ln), this.observeArray(t);
-        } else this.walk(t);
-    }
-    function wt(t, e) {
-        t.__proto__ = e;
-    }
-    function Ct(t, e, i) {
-        for (var n = 0, r = i.length; n < r; n++) {
-            var s = i[n];
-            _(t, s, e[s]);
-        }
-    }
-    function $t(t, e) {
-        if (t && "object" == typeof t) {
-            var n;
-            return i(t, "__ob__") && t.__ob__ instanceof yt ? n = t.__ob__ : In && (Pi(t) || g(t)) && Object.isExtensible(t) && !t._isVue && (n = new yt(t)), 
-            n && e && n.addVm(e), n;
-        }
-    }
-    function kt(t, e, i) {
-        var n = new _t(), r = Object.getOwnPropertyDescriptor(t, e);
-        if (!r || r.configurable !== !1) {
-            var s = r && r.get, o = r && r.set, a = $t(i);
-            Object.defineProperty(t, e, {
-                enumerable: !0,
-                configurable: !0,
-                get: function() {
-                    var e = s ? s.call(t) : i;
-                    if (_t.target && (n.depend(), a && a.dep.depend(), Pi(e))) for (var r, o = 0, h = e.length; o < h; o++) r = e[o], 
-                    r && r.__ob__ && r.__ob__.dep.depend();
-                    return e;
-                },
-                set: function(e) {
-                    var r = s ? s.call(t) : i;
-                    e !== r && (o ? o.call(t, e) : i = e, a = $t(e), n.notify());
-                }
-            });
-        }
-    }
-    function xt(t) {
-        t.prototype._init = function(t) {
-            t = t || {}, this.$el = null, this.$parent = t.parent, this.$root = this.$parent ? this.$parent.$root : this, 
-            this.$children = [], this.$refs = {}, this.$els = {}, this._watchers = [], this._directives = [], 
-            this._uid = Mn++, this._isVue = !0, this._events = {}, this._eventsCount = {}, this._isFragment = !1, 
-            this._fragment = this._fragmentStart = this._fragmentEnd = null, this._isCompiled = this._isDestroyed = this._isReady = this._isAttached = this._isBeingDestroyed = this._vForRemoving = !1, 
-            this._unlinkFn = null, this._context = t._context || this.$parent, this._scope = t._scope, 
-            this._frag = t._frag, this._frag && this._frag.children.push(this), this.$parent && this.$parent.$children.push(this), 
-            t = this.$options = mt(this.constructor.options, t, this), this._updateRef(), this._data = {}, 
-            this._callHook("init"), this._initState(), this._initEvents(), this._callHook("created"), 
-            t.el && this.$mount(t.el);
-        };
-    }
-    function At(t) {
-        if (void 0 === t) return "eof";
-        var e = t.charCodeAt(0);
-        switch (e) {
-          case 91:
-          case 93:
-          case 46:
-          case 34:
-          case 39:
-          case 48:
-            return t;
-
-          case 95:
-          case 36:
-            return "ident";
-
-          case 32:
-          case 9:
-          case 10:
-          case 13:
-          case 160:
-          case 65279:
-          case 8232:
-          case 8233:
-            return "ws";
-        }
-        return e >= 97 && e <= 122 || e >= 65 && e <= 90 ? "ident" : e >= 49 && e <= 57 ? "number" : "else";
-    }
-    function Tt(t) {
-        var e = t.trim();
-        return ("0" !== t.charAt(0) || !isNaN(t)) && (n(e) ? h(e) : "*" + e);
-    }
-    function Ot(t) {
-        function e() {
-            var e = t[c + 1];
-            if (u === Gn && "'" === e || u === Xn && '"' === e) return c++, n = "\\" + e, p[Vn](), 
-            !0;
-        }
-        var i, n, r, s, o, a, h, l = [], c = -1, u = qn, f = 0, p = [];
-        for (p[Bn] = function() {
-            void 0 !== r && (l.push(r), r = void 0);
-        }, p[Vn] = function() {
-            void 0 === r ? r = n : r += n;
-        }, p[Un] = function() {
-            p[Vn](), f++;
-        }, p[zn] = function() {
-            if (f > 0) f--, u = Zn, p[Vn](); else {
-                if (f = 0, r = Tt(r), r === !1) return !1;
-                p[Bn]();
-            }
-        }; null != u; ) if (c++, i = t[c], "\\" !== i || !e()) {
-            if (s = At(i), h = er[u], o = h[s] || h["else"] || tr, o === tr) return;
-            if (u = o[0], a = p[o[1]], a && (n = o[2], n = void 0 === n ? i : n, a() === !1)) return;
-            if (u === Kn) return l.raw = t, l;
-        }
-    }
-    function Nt(t) {
-        var e = Wn.get(t);
-        return e || (e = Ot(t), e && Wn.put(t, e)), e;
-    }
-    function jt(t, e) {
-        return It(e).get(t);
-    }
-    function Et(e, i, n) {
-        var r = e;
-        if ("string" == typeof i && (i = Ot(i)), !i || !m(e)) return !1;
-        for (var s, o, a = 0, h = i.length; a < h; a++) s = e, o = i[a], "*" === o.charAt(0) && (o = It(o.slice(1)).get.call(r, r)), 
-        a < h - 1 ? (e = e[o], m(e) || (e = {}, s._isVue && ir(i, s), t(s, o, e))) : Pi(e) ? e.$set(o, n) : o in e ? e[o] = n : (e._isVue && ir(i, e), 
-        t(e, o, n));
-        return !0;
-    }
-    function St(t, e) {
-        var i = mr.length;
-        return mr[i] = e ? t.replace(cr, "\\n") : t, '"' + i + '"';
-    }
-    function Dt(t) {
-        var e = t.charAt(0), i = t.slice(1);
-        return or.test(i) ? t : (i = i.indexOf('"') > -1 ? i.replace(fr, Ft) : i, e + "scope." + i);
-    }
-    function Ft(t, e) {
-        return mr[e];
-    }
-    function Pt(t) {
-        hr.test(t) && xn("Avoid using reserved keywords in expression: " + t), mr.length = 0;
-        var e = t.replace(ur, St).replace(lr, "");
-        return e = (" " + e).replace(dr, Dt).replace(fr, Ft), Rt(e);
-    }
-    function Rt(t) {
-        try {
-            return new Function("scope", "return " + t + ";");
-        } catch (e) {
-            xn("Invalid expression. Generated function body: " + t);
-        }
-    }
-    function Lt(t) {
-        var e = Nt(t);
-        return e ? function(t, i) {
-            Et(t, e, i);
-        } : void xn("Invalid setter expression: " + t);
-    }
-    function It(t, e) {
-        t = t.trim();
-        var i = rr.get(t);
-        if (i) return e && !i.set && (i.set = Lt(i.exp)), i;
-        var n = {
-            exp: t
-        };
-        return n.get = Ht(t) && t.indexOf("[") < 0 ? Rt("scope." + t) : Pt(t), e && (n.set = Lt(t)), 
-        rr.put(t, n), n;
-    }
-    function Ht(t) {
-        return pr.test(t) && !vr.test(t) && "Math." !== t.slice(0, 5);
-    }
-    function Mt() {
-        _r.length = 0, br.length = 0, yr = {}, wr = {}, Cr = !1;
-    }
-    function Wt() {
-        for (var t = !0; t; ) t = !1, Vt(_r), Vt(br), _r.length ? t = !0 : (Ii && kn.devtools && Ii.emit("flush"), 
-        Mt());
-    }
-    function Vt(t) {
-        for (var e = 0; e < t.length; e++) {
-            var i = t[e], n = i.id;
-            if (yr[n] = null, i.run(), null != yr[n] && (wr[n] = (wr[n] || 0) + 1, wr[n] > kn._maxUpdateCount)) {
-                xn('You may have an infinite update loop for watcher with expression "' + i.expression + '"', i.vm);
-                break;
-            }
-        }
-        t.length = 0;
-    }
-    function Bt(t) {
-        var e = t.id;
-        if (null == yr[e]) {
-            var i = t.user ? br : _r;
-            yr[e] = i.length, i.push(t), Cr || (Cr = !0, Zi(Wt));
-        }
-    }
-    function Ut(t, e, i, n) {
-        n && v(this, n);
-        var r = "function" == typeof e;
-        if (this.vm = t, t._watchers.push(this), this.expression = e, this.cb = i, this.id = ++$r, 
-        this.active = !0, this.dirty = this.lazy, this.deps = [], this.newDeps = [], this.depIds = new Gi(), 
-        this.newDepIds = new Gi(), this.prevError = null, r) this.getter = e, this.setter = void 0; else {
-            var s = It(e, this.twoWay);
-            this.getter = s.get, this.setter = s.set;
-        }
-        this.value = this.lazy ? void 0 : this.get(), this.queued = this.shallow = !1;
-    }
-    function zt(t, e) {
-        var i = void 0, n = void 0;
-        e || (e = kr, e.clear());
-        var r = Pi(t), s = m(t);
-        if (r || s) {
-            if (t.__ob__) {
-                var o = t.__ob__.dep.id;
-                if (e.has(o)) return;
-                e.add(o);
-            }
-            if (r) for (i = t.length; i--; ) zt(t[i], e); else if (s) for (n = Object.keys(t), 
-            i = n.length; i--; ) zt(t[n[i]], e);
-        }
-    }
-    function qt(t) {
-        return it(t) && at(t.content);
-    }
-    function Jt(t, e) {
-        var i = e ? t : t.trim(), n = Ar.get(i);
-        if (n) return n;
-        var r = document.createDocumentFragment(), s = t.match(Nr), o = jr.test(t);
-        if (s || o) {
-            var a = s && s[1], h = Or[a] || Or.efault, l = h[0], c = h[1], u = h[2], f = document.createElement("div");
-            for (f.innerHTML = c + t + u; l--; ) f = f.lastChild;
-            for (var p; p = f.firstChild; ) r.appendChild(p);
-        } else r.appendChild(document.createTextNode(t));
-        return e || tt(r), Ar.put(i, r), r;
-    }
-    function Yt(t) {
-        if (qt(t)) return Jt(t.innerHTML);
-        if ("SCRIPT" === t.tagName) return Jt(t.textContent);
-        for (var e, i = Qt(t), n = document.createDocumentFragment(); e = i.firstChild; ) n.appendChild(e);
-        return tt(n), n;
-    }
-    function Qt(t) {
-        if (!t.querySelectorAll) return t.cloneNode();
-        var e, i, n, r = t.cloneNode(!0);
-        if (Er) {
-            var s = r;
-            if (qt(t) && (t = t.content, s = r.content), i = t.querySelectorAll("template"), 
-            i.length) for (n = s.querySelectorAll("template"), e = n.length; e--; ) n[e].parentNode.replaceChild(Qt(i[e]), n[e]);
-        }
-        if (Sr) if ("TEXTAREA" === t.tagName) r.value = t.value; else if (i = t.querySelectorAll("textarea"), 
-        i.length) for (n = r.querySelectorAll("textarea"), e = n.length; e--; ) n[e].value = i[e].value;
-        return r;
-    }
-    function Zt(t, e, i) {
-        var n, r;
-        return at(t) ? (tt(t), e ? Qt(t) : t) : ("string" == typeof t ? i || "#" !== t.charAt(0) ? r = Jt(t, i) : (r = Tr.get(t), 
-        r || (n = document.getElementById(t.slice(1)), n && (r = Yt(n), Tr.put(t, r)))) : t.nodeType && (r = Yt(t)), 
-        r && e ? Qt(r) : r);
-    }
-    function Gt(t, e, i, n, r, s) {
-        this.children = [], this.childFrags = [], this.vm = e, this.scope = r, this.inserted = !1, 
-        this.parentFrag = s, s && s.childFrags.push(this), this.unlink = t(e, i, n, r, this);
-        var o = this.single = 1 === i.childNodes.length && !i.childNodes[0].__v_anchor;
-        o ? (this.node = i.childNodes[0], this.before = Xt, this.remove = Kt) : (this.node = nt("fragment-start"), 
-        this.end = nt("fragment-end"), this.frag = i, z(this.node, i), i.appendChild(this.end), 
-        this.before = te, this.remove = ee), this.node.__v_frag = this;
-    }
-    function Xt(t, e) {
-        this.inserted = !0;
-        var i = e !== !1 ? F : V;
-        i(this.node, t, this.vm), I(this.node) && this.callHook(ie);
-    }
-    function Kt() {
-        this.inserted = !1;
-        var t = I(this.node), e = this;
-        this.beforeRemove(), P(this.node, this.vm, function() {
-            t && e.callHook(ne), e.destroy();
-        });
-    }
-    function te(t, e) {
-        this.inserted = !0;
-        var i = this.vm, n = e !== !1 ? F : V;
-        st(this.node, this.end, function(e) {
-            n(e, t, i);
-        }), I(this.node) && this.callHook(ie);
-    }
-    function ee() {
-        this.inserted = !1;
-        var t = this, e = I(this.node);
-        this.beforeRemove(), ot(this.node, this.end, this.vm, this.frag, function() {
-            e && t.callHook(ne), t.destroy();
-        });
-    }
-    function ie(t) {
-        !t._isAttached && I(t.$el) && t._callHook("attached");
-    }
-    function ne(t) {
-        t._isAttached && !I(t.$el) && t._callHook("detached");
-    }
-    function re(t, e) {
-        this.vm = t;
-        var i, n = "string" == typeof e;
-        n || it(e) && !e.hasAttribute("v-if") ? i = Zt(e, !0) : (i = document.createDocumentFragment(), 
-        i.appendChild(e)), this.template = i;
-        var r, s = t.constructor.cid;
-        if (s > 0) {
-            var o = s + (n ? e : ht(e));
-            r = Pr.get(o), r || (r = Pe(i, t.$options, !0), Pr.put(o, r));
-        } else r = Pe(i, t.$options, !0);
-        this.linker = r;
-    }
-    function se(t, e, i) {
-        var n = t.node.previousSibling;
-        if (n) {
-            for (t = n.__v_frag; !(t && t.forId === i && t.inserted || n === e); ) {
-                if (n = n.previousSibling, !n) return;
-                t = n.__v_frag;
-            }
-            return t;
-        }
-    }
-    function oe(t) {
-        var e = t.node;
-        if (t.end) for (;!e.__vue__ && e !== t.end && e.nextSibling; ) e = e.nextSibling;
-        return e.__vue__;
-    }
-    function ae(t) {
-        for (var e = -1, i = new Array(Math.floor(t)); ++e < t; ) i[e] = e;
-        return i;
-    }
-    function he(t, e, i, n) {
-        return n ? "$index" === n ? t : n.charAt(0).match(/\w/) ? jt(i, n) : i[n] : e || i;
-    }
-    function le(t, e, i) {
-        for (var n, r, s, o = e ? [] : null, a = 0, h = t.options.length; a < h; a++) if (n = t.options[a], 
-        s = i ? n.hasAttribute("selected") : n.selected) {
-            if (r = n.hasOwnProperty("_value") ? n._value : n.value, !e) return r;
-            o.push(r);
-        }
-        return o;
-    }
-    function ce(t, e) {
-        for (var i = t.length; i--; ) if (C(t[i], e)) return i;
-        return -1;
-    }
-    function ue(t, e) {
-        var i = e.map(function(t) {
-            var e = t.charCodeAt(0);
-            return e > 47 && e < 58 ? parseInt(t, 10) : 1 === t.length && (e = t.toUpperCase().charCodeAt(0), 
-            e > 64 && e < 91) ? e : is[t];
-        });
-        return i = [].concat.apply([], i), function(e) {
-            if (i.indexOf(e.keyCode) > -1) return t.call(this, e);
-        };
-    }
-    function fe(t) {
-        return function(e) {
-            return e.stopPropagation(), t.call(this, e);
-        };
-    }
-    function pe(t) {
-        return function(e) {
-            return e.preventDefault(), t.call(this, e);
-        };
-    }
-    function de(t) {
-        return function(e) {
-            if (e.target === e.currentTarget) return t.call(this, e);
-        };
-    }
-    function ve(t) {
-        if (as[t]) return as[t];
-        var e = me(t);
-        return as[t] = as[e] = e, e;
-    }
-    function me(t) {
-        t = u(t);
-        var e = l(t), i = e.charAt(0).toUpperCase() + e.slice(1);
-        hs || (hs = document.createElement("div"));
-        var n, r = rs.length;
-        if ("filter" !== e && e in hs.style) return {
-            kebab: t,
-            camel: e
-        };
-        for (;r--; ) if (n = ss[r] + i, n in hs.style) return {
-            kebab: rs[r] + t,
-            camel: n
-        };
-    }
-    function ge(t) {
-        var e = [];
-        if (Pi(t)) for (var i = 0, n = t.length; i < n; i++) {
-            var r = t[i];
-            if (r) if ("string" == typeof r) e.push(r); else for (var s in r) r[s] && e.push(s);
-        } else if (m(t)) for (var o in t) t[o] && e.push(o);
-        return e;
-    }
-    function _e(t, e, i) {
-        if (e = e.trim(), e.indexOf(" ") === -1) return void i(t, e);
-        for (var n = e.split(/\s+/), r = 0, s = n.length; r < s; r++) i(t, n[r]);
-    }
-    function be(t, e, i) {
-        function n() {
-            ++s >= r ? i() : t[s].call(e, n);
-        }
-        var r = t.length, s = 0;
-        t[0].call(e, n);
-    }
-    function ye(t, e, i) {
-        for (var r, s, o, a, h, c, f, p = [], d = Object.keys(e), v = d.length; v--; ) if (s = d[v], 
-        r = e[s] || ks, "$data" !== s) if (h = l(s), xs.test(h)) {
-            if (f = {
-                name: s,
-                path: h,
-                options: r,
-                mode: $s.ONE_WAY,
-                raw: null
-            }, o = u(s), null === (a = M(t, o)) && (null !== (a = M(t, o + ".sync")) ? f.mode = $s.TWO_WAY : null !== (a = M(t, o + ".once")) && (f.mode = $s.ONE_TIME)), 
-            null !== a) f.raw = a, c = A(a), a = c.expression, f.filters = c.filters, n(a) && !c.filters ? f.optimizedLiteral = !0 : (f.dynamic = !0, 
-            f.mode !== $s.TWO_WAY || As.test(a) || (f.mode = $s.ONE_WAY, xn("Cannot bind two-way prop with non-settable parent path: " + a, i))), 
-            f.parentPath = a, r.twoWay && f.mode !== $s.TWO_WAY && xn('Prop "' + s + '" expects a two-way binding type.', i); else if (null !== (a = H(t, o))) f.raw = a; else {
-                var m = h.toLowerCase();
-                a = /[A-Z\-]/.test(s) && (t.getAttribute(m) || t.getAttribute(":" + m) || t.getAttribute("v-bind:" + m) || t.getAttribute(":" + m + ".once") || t.getAttribute("v-bind:" + m + ".once") || t.getAttribute(":" + m + ".sync") || t.getAttribute("v-bind:" + m + ".sync")), 
-                a ? xn("Possible usage error for prop `" + m + "` - did you mean `" + o + "`? HTML is case-insensitive, remember to use kebab-case for props in templates.", i) : r.required && xn("Missing required prop: " + s, i);
-            }
-            p.push(f);
-        } else xn('Invalid prop key: "' + s + '". Prop keys must be valid identifiers.', i); else xn("Do not use $data as prop.", i);
-        return we(p);
-    }
-    function we(t) {
-        return function(e, n) {
-            e._props = {};
-            for (var r, s, l, c, f, p = e.$options.propsData, d = t.length; d--; ) if (r = t[d], 
-            f = r.raw, s = r.path, l = r.options, e._props[s] = r, p && i(p, s) && $e(e, r, p[s]), 
-            null === f) $e(e, r, void 0); else if (r.dynamic) r.mode === $s.ONE_TIME ? (c = (n || e._context || e).$get(r.parentPath), 
-            $e(e, r, c)) : e._context ? e._bindDir({
-                name: "prop",
-                def: Os,
-                prop: r
-            }, null, null, n) : $e(e, r, e.$get(r.parentPath)); else if (r.optimizedLiteral) {
-                var v = h(f);
-                c = v === f ? a(o(f)) : v, $e(e, r, c);
-            } else c = l.type === Boolean && ("" === f || f === u(r.name)) || f, $e(e, r, c);
-        };
-    }
-    function Ce(t, e, i, n) {
-        var r = e.dynamic && Ht(e.parentPath), s = i;
-        void 0 === s && (s = xe(t, e)), s = Te(e, s);
-        var o = s !== i;
-        Ae(e, s, t) || (s = void 0), r && !o ? bt(function() {
-            n(s);
-        }) : n(s);
-    }
-    function $e(t, e, i) {
-        Ce(t, e, i, function(i) {
-            kt(t, e.path, i);
-        });
-    }
-    function ke(t, e, i) {
-        Ce(t, e, i, function(i) {
-            t[e.path] = i;
-        });
-    }
-    function xe(t, e) {
-        var n = e.options;
-        if (!i(n, "default")) return n.type !== Boolean && void 0;
-        var r = n["default"];
-        return m(r) && xn('Invalid default value for prop "' + e.name + '": Props with type Object/Array must use a factory function to return the default value.', t), 
-        "function" == typeof r && n.type !== Function ? r.call(t) : r;
-    }
-    function Ae(t, e, i) {
-        if (!t.options.required && (null === t.raw || null == e)) return !0;
-        var n = t.options, r = n.type, s = !r, o = [];
-        if (r) {
-            Pi(r) || (r = [ r ]);
-            for (var a = 0; a < r.length && !s; a++) {
-                var h = Oe(e, r[a]);
-                o.push(h.expectedType), s = h.valid;
-            }
-        }
-        if (!s) return xn('Invalid prop: type check failed for prop "' + t.name + '". Expected ' + o.map(Ne).join(", ") + ", got " + je(e) + ".", i), 
-        !1;
-        var l = n.validator;
-        return !(l && !l(e)) || (xn('Invalid prop: custom validator check failed for prop "' + t.name + '".', i), 
-        !1);
-    }
-    function Te(t, e) {
-        var i = t.options.coerce;
-        return i ? i(e) : e;
-    }
-    function Oe(t, e) {
-        var i, n;
-        return e === String ? (n = "string", i = typeof t === n) : e === Number ? (n = "number", 
-        i = typeof t === n) : e === Boolean ? (n = "boolean", i = typeof t === n) : e === Function ? (n = "function", 
-        i = typeof t === n) : e === Object ? (n = "object", i = g(t)) : e === Array ? (n = "array", 
-        i = Pi(t)) : i = t instanceof e, {
-            valid: i,
-            expectedType: n
-        };
-    }
-    function Ne(t) {
-        return t ? t.charAt(0).toUpperCase() + t.slice(1) : "custom type";
-    }
-    function je(t) {
-        return Object.prototype.toString.call(t).slice(8, -1);
-    }
-    function Ee(t) {
-        Ns.push(t), js || (js = !0, Zi(Se));
-    }
-    function Se() {
-        for (var t = document.documentElement.offsetHeight, e = 0; e < Ns.length; e++) Ns[e]();
-        return Ns = [], js = !1, t;
-    }
-    function De(t, e, i, n) {
-        this.id = e, this.el = t, this.enterClass = i && i.enterClass || e + "-enter", this.leaveClass = i && i.leaveClass || e + "-leave", 
-        this.hooks = i, this.vm = n, this.pendingCssEvent = this.pendingCssCb = this.cancel = this.pendingJsCb = this.op = this.cb = null, 
-        this.justEntered = !1, this.entered = this.left = !1, this.typeCache = {}, this.type = i && i.type, 
-        this.type && this.type !== Es && this.type !== Ss && xn('invalid CSS transition type for transition="' + this.id + '": ' + this.type, n);
-        var r = this;
-        [ "enterNextTick", "enterDone", "leaveNextTick", "leaveDone" ].forEach(function(t) {
-            r[t] = p(r[t], r);
-        });
-    }
-    function Fe(t) {
-        if (/svg$/.test(t.namespaceURI)) {
-            var e = t.getBoundingClientRect();
-            return !(e.width || e.height);
-        }
-        return !(t.offsetWidth || t.offsetHeight || t.getClientRects().length);
-    }
-    function Pe(t, e, i) {
-        var n = i || !e._asComponent ? Ve(t, e) : null, r = n && n.terminal || si(t) || !t.hasChildNodes() ? null : Ye(t.childNodes, e);
-        return function(t, e, i, s, o) {
-            var a = d(e.childNodes), h = Re(function() {
-                n && n(t, e, i, s, o), r && r(t, a, i, s, o);
-            }, t);
-            return Ie(t, h);
-        };
-    }
-    function Re(t, e) {
-        var i = e._directives.length;
-        t();
-        var n = e._directives.slice(i);
-        n.sort(Le);
-        for (var r = 0, s = n.length; r < s; r++) n[r]._bind();
-        return n;
-    }
-    function Le(t, e) {
-        return t = t.descriptor.def.priority || zs, e = e.descriptor.def.priority || zs, 
-        t > e ? -1 : t === e ? 0 : 1;
-    }
-    function Ie(t, e, i, n) {
-        function r(r) {
-            He(t, e, r), i && n && He(i, n);
-        }
-        return r.dirs = e, r;
-    }
-    function He(t, e, i) {
-        for (var n = e.length; n--; ) e[n]._teardown(), i || t._directives.$remove(e[n]);
-    }
-    function Me(t, e, i, n) {
-        var r = ye(e, i, t), s = Re(function() {
-            r(t, n);
-        }, t);
-        return Ie(t, s);
-    }
-    function We(t, e, i) {
-        var n, r, s = e._containerAttrs, o = e._replacerAttrs;
-        if (11 !== t.nodeType) e._asComponent ? (s && i && (n = ei(s, i)), o && (r = ei(o, e))) : r = ei(t.attributes, e); else if (s) {
-            var a = s.filter(function(t) {
-                return t.name.indexOf("_v-") < 0 && !Ws.test(t.name) && "slot" !== t.name;
-            }).map(function(t) {
-                return '"' + t.name + '"';
-            });
-            if (a.length) {
-                var h = a.length > 1;
-                xn("Attribute" + (h ? "s " : " ") + a.join(", ") + (h ? " are" : " is") + " ignored on component <" + e.el.tagName.toLowerCase() + "> because the component is a fragment instance: http://vuejs.org/guide/components.html#Fragment-Instance");
-            }
-        }
-        return e._containerAttrs = e._replacerAttrs = null, function(t, e, i) {
-            var s, o = t._context;
-            o && n && (s = Re(function() {
-                n(o, e, null, i);
-            }, o));
-            var a = Re(function() {
-                r && r(t, e);
-            }, t);
-            return Ie(t, a, o, s);
-        };
-    }
-    function Ve(t, e) {
-        var i = t.nodeType;
-        return 1 !== i || si(t) ? 3 === i && t.data.trim() ? Ue(t, e) : null : Be(t, e);
-    }
-    function Be(t, e) {
-        if ("TEXTAREA" === t.tagName) {
-            var i = N(t.value);
-            i && (t.setAttribute(":value", j(i)), t.value = "");
-        }
-        var n, r = t.hasAttributes(), s = r && d(t.attributes);
-        return r && (n = Xe(t, s, e)), n || (n = Ze(t, e)), n || (n = Ge(t, e)), !n && r && (n = ei(s, e)), 
-        n;
-    }
-    function Ue(t, e) {
-        if (t._skip) return ze;
-        var i = N(t.wholeText);
-        if (!i) return null;
-        for (var n = t.nextSibling; n && 3 === n.nodeType; ) n._skip = !0, n = n.nextSibling;
-        for (var r, s, o = document.createDocumentFragment(), a = 0, h = i.length; a < h; a++) s = i[a], 
-        r = s.tag ? qe(s, e) : document.createTextNode(s.value), o.appendChild(r);
-        return Je(i, o, e);
-    }
-    function ze(t, e) {
-        U(e);
-    }
-    function qe(t, e) {
-        function i(e) {
-            if (!t.descriptor) {
-                var i = A(t.value);
-                t.descriptor = {
-                    name: e,
-                    def: ys[e],
-                    expression: i.expression,
-                    filters: i.filters
-                };
-            }
-        }
-        var n;
-        return t.oneTime ? n = document.createTextNode(t.value) : t.html ? (n = document.createComment("v-html"), 
-        i("html")) : (n = document.createTextNode(" "), i("text")), n;
-    }
-    function Je(t, e) {
-        return function(i, n, r, s) {
-            for (var o, a, h, l = e.cloneNode(!0), c = d(l.childNodes), u = 0, f = t.length; u < f; u++) o = t[u], 
-            a = o.value, o.tag && (h = c[u], o.oneTime ? (a = (s || i).$eval(a), o.html ? q(h, Zt(a, !0)) : h.data = a) : i._bindDir(o.descriptor, h, r, s));
-            q(n, l);
-        };
-    }
-    function Ye(t, e) {
-        for (var i, n, r, s = [], o = 0, a = t.length; o < a; o++) r = t[o], i = Ve(r, e), 
-        n = i && i.terminal || "SCRIPT" === r.tagName || !r.hasChildNodes() ? null : Ye(r.childNodes, e), 
-        s.push(i, n);
-        return s.length ? Qe(s) : null;
-    }
-    function Qe(t) {
-        return function(e, i, n, r, s) {
-            for (var o, a, h, l = 0, c = 0, u = t.length; l < u; c++) {
-                o = i[c], a = t[l++], h = t[l++];
-                var f = d(o.childNodes);
-                a && a(e, o, n, r, s), h && h(e, f, n, r, s);
-            }
-        };
-    }
-    function Ze(t, e) {
-        var i = t.tagName.toLowerCase();
-        if (!Nn.test(i)) {
-            var n = gt(e, "elementDirectives", i);
-            return n ? ti(t, i, "", e, n) : void 0;
-        }
-    }
-    function Ge(t, e) {
-        var i = lt(t, e);
-        if (i) {
-            var n = rt(t), r = {
-                name: "component",
-                ref: n,
-                expression: i.id,
-                def: Hs.component,
-                modifiers: {
-                    literal: !i.dynamic
-                }
-            }, s = function(t, e, i, s, o) {
-                n && kt((s || t).$refs, n, null), t._bindDir(r, e, i, s, o);
-            };
-            return s.terminal = !0, s;
-        }
-    }
-    function Xe(t, e, i) {
-        if (null !== H(t, "v-pre")) return Ke;
-        if (t.hasAttribute("v-else")) {
-            var n = t.previousElementSibling;
-            if (n && n.hasAttribute("v-if")) return Ke;
-        }
-        for (var r, s, o, a, h, l, c, u, f, p, d = 0, v = e.length; d < v; d++) r = e[d], 
-        s = r.name.replace(Bs, ""), (h = s.match(Vs)) && (f = gt(i, "directives", h[1]), 
-        f && f.terminal && (!p || (f.priority || qs) > p.priority) && (p = f, c = r.name, 
-        a = ii(r.name), o = r.value, l = h[1], u = h[2]));
-        return p ? ti(t, l, o, i, p, c, u, a) : void 0;
-    }
-    function Ke() {}
-    function ti(t, e, i, n, r, s, o, a) {
-        var h = A(i), l = {
-            name: e,
-            arg: o,
-            expression: h.expression,
-            filters: h.filters,
-            raw: i,
-            attr: s,
-            modifiers: a,
-            def: r
-        };
-        "for" !== e && "router-view" !== e || (l.ref = rt(t));
-        var c = function(t, e, i, n, r) {
-            l.ref && kt((n || t).$refs, l.ref, null), t._bindDir(l, e, i, n, r);
-        };
-        return c.terminal = !0, c;
-    }
-    function ei(t, e) {
-        function i(t, e, i) {
-            var n = i && ri(i), r = !n && A(s);
-            v.push({
-                name: t,
-                attr: o,
-                raw: a,
-                def: e,
-                arg: l,
-                modifiers: c,
-                expression: r && r.expression,
-                filters: r && r.filters,
-                interp: i,
-                hasOneTime: n
-            });
-        }
-        for (var n, r, s, o, a, h, l, c, u, f, p, d = t.length, v = []; d--; ) if (n = t[d], 
-        r = o = n.name, s = a = n.value, f = N(s), l = null, c = ii(r), r = r.replace(Bs, ""), 
-        f) s = j(f), l = r, i("bind", ys.bind, f), "class" === r && Array.prototype.some.call(t, function(t) {
-            return ":class" === t.name || "v-bind:class" === t.name;
-        }) && xn('class="' + a + '": Do not mix mustache interpolation and v-bind for "class" on the same element. Use one or the other.', e); else if (Us.test(r)) c.literal = !Ms.test(r), 
-        i("transition", Hs.transition); else if (Ws.test(r)) l = r.replace(Ws, ""), i("on", ys.on); else if (Ms.test(r)) h = r.replace(Ms, ""), 
-        "style" === h || "class" === h ? i(h, Hs[h]) : (l = h, i("bind", ys.bind)); else if (p = r.match(Vs)) {
-            if (h = p[1], l = p[2], "else" === h) continue;
-            u = gt(e, "directives", h, !0), u && i(h, u);
-        }
-        if (v.length) return ni(v);
-    }
-    function ii(t) {
-        var e = Object.create(null), i = t.match(Bs);
-        if (i) for (var n = i.length; n--; ) e[i[n].slice(1)] = !0;
-        return e;
-    }
-    function ni(t) {
-        return function(e, i, n, r, s) {
-            for (var o = t.length; o--; ) e._bindDir(t[o], i, n, r, s);
-        };
-    }
-    function ri(t) {
-        for (var e = t.length; e--; ) if (t[e].oneTime) return !0;
-    }
-    function si(t) {
-        return "SCRIPT" === t.tagName && (!t.hasAttribute("type") || "text/javascript" === t.getAttribute("type"));
-    }
-    function oi(t, e) {
-        return e && (e._containerAttrs = hi(t)), it(t) && (t = Zt(t)), e && (e._asComponent && !e.template && (e.template = "<slot></slot>"), 
-        e.template && (e._content = K(t), t = ai(t, e))), at(t) && (z(nt("v-start", !0), t), 
-        t.appendChild(nt("v-end", !0))), t;
-    }
-    function ai(t, e) {
-        var i = e.template, n = Zt(i, !0);
-        if (n) {
-            var r = n.firstChild, s = r.tagName && r.tagName.toLowerCase();
-            return e.replace ? (t === document.body && xn("You are mounting an instance with a template to <body>. This will replace <body> entirely. You should probably use `replace: false` here."), 
-            n.childNodes.length > 1 || 1 !== r.nodeType || "component" === s || gt(e, "components", s) || W(r, "is") || gt(e, "elementDirectives", s) || r.hasAttribute("v-for") || r.hasAttribute("v-if") ? n : (e._replacerAttrs = hi(r), 
-            li(t, r), r)) : (t.appendChild(n), t);
-        }
-        xn("Invalid template option: " + i);
-    }
-    function hi(t) {
-        if (1 === t.nodeType && t.hasAttributes()) return d(t.attributes);
-    }
-    function li(t, e) {
-        for (var i, n, r = t.attributes, s = r.length; s--; ) i = r[s].name, n = r[s].value, 
-        e.hasAttribute(i) || Js.test(i) ? "class" === i && !N(n) && (n = n.trim()) && n.split(/\s+/).forEach(function(t) {
-            G(e, t);
-        }) : e.setAttribute(i, n);
-    }
-    function ci(t, e) {
-        if (e) {
-            for (var i, n, r = t._slotContents = Object.create(null), s = 0, o = e.children.length; s < o; s++) i = e.children[s], 
-            (n = i.getAttribute("slot")) && (r[n] || (r[n] = [])).push(i), M(i, "slot") && xn('The "slot" attribute must be static.', t.$parent);
-            for (n in r) r[n] = ui(r[n], e);
-            if (e.hasChildNodes()) {
-                var a = e.childNodes;
-                if (1 === a.length && 3 === a[0].nodeType && !a[0].data.trim()) return;
-                r["default"] = ui(e.childNodes, e);
-            }
-        }
-    }
-    function ui(t, e) {
-        var i = document.createDocumentFragment();
-        t = d(t);
-        for (var n = 0, r = t.length; n < r; n++) {
-            var s = t[n];
-            !it(s) || s.hasAttribute("v-if") || s.hasAttribute("v-for") || (e.removeChild(s), 
-            s = Zt(s, !0)), i.appendChild(s);
-        }
-        return i;
-    }
-    function fi(t) {
-        function e() {}
-        function n(t, e) {
-            var i = new Ut(e, t, null, {
-                lazy: !0
-            });
-            return function() {
-                return i.dirty && i.evaluate(), _t.target && i.depend(), i.value;
-            };
-        }
-        Object.defineProperty(t.prototype, "$data", {
-            get: function() {
-                return this._data;
-            },
-            set: function(t) {
-                t !== this._data && this._setData(t);
-            }
-        }), t.prototype._initState = function() {
-            this._initProps(), this._initMeta(), this._initMethods(), this._initData(), this._initComputed();
-        }, t.prototype._initProps = function() {
-            var t = this.$options, e = t.el, i = t.props;
-            i && !e && xn("Props will not be compiled if no `el` option is provided at instantiation.", this), 
-            e = t.el = L(e), this._propsUnlinkFn = e && 1 === e.nodeType && i ? Me(this, e, i, this._scope) : null;
-        }, t.prototype._initData = function() {
-            var t = this.$options.data, e = this._data = t ? t() : {};
-            g(e) || (e = {}, xn("data functions should return an object.", this));
-            var n, r, s = this._props, o = Object.keys(e);
-            for (n = o.length; n--; ) r = o[n], s && i(s, r) ? xn('Data field "' + r + '" is already defined as a prop. To provide default value for a prop, use the "default" prop option; if you want to pass prop values to an instantiation call, use the "propsData" option.', this) : this._proxy(r);
-            $t(e, this);
-        }, t.prototype._setData = function(t) {
-            t = t || {};
-            var e = this._data;
-            this._data = t;
-            var n, r, s;
-            for (n = Object.keys(e), s = n.length; s--; ) r = n[s], r in t || this._unproxy(r);
-            for (n = Object.keys(t), s = n.length; s--; ) r = n[s], i(this, r) || this._proxy(r);
-            e.__ob__.removeVm(this), $t(t, this), this._digest();
-        }, t.prototype._proxy = function(t) {
-            if (!r(t)) {
-                var e = this;
-                Object.defineProperty(e, t, {
-                    configurable: !0,
-                    enumerable: !0,
-                    get: function() {
-                        return e._data[t];
-                    },
-                    set: function(i) {
-                        e._data[t] = i;
-                    }
-                });
-            }
-        }, t.prototype._unproxy = function(t) {
-            r(t) || delete this[t];
-        }, t.prototype._digest = function() {
-            for (var t = 0, e = this._watchers.length; t < e; t++) this._watchers[t].update(!0);
-        }, t.prototype._initComputed = function() {
-            var t = this.$options.computed;
-            if (t) for (var i in t) {
-                var r = t[i], s = {
-                    enumerable: !0,
-                    configurable: !0
-                };
-                "function" == typeof r ? (s.get = n(r, this), s.set = e) : (s.get = r.get ? r.cache !== !1 ? n(r.get, this) : p(r.get, this) : e, 
-                s.set = r.set ? p(r.set, this) : e), Object.defineProperty(this, i, s);
-            }
-        }, t.prototype._initMethods = function() {
-            var t = this.$options.methods;
-            if (t) for (var e in t) this[e] = p(t[e], this);
-        }, t.prototype._initMeta = function() {
-            var t = this.$options._meta;
-            if (t) for (var e in t) kt(this, e, t[e]);
-        };
-    }
-    function pi(t) {
-        function e(t, e) {
-            for (var i, n, r, s = e.attributes, o = 0, a = s.length; o < a; o++) i = s[o].name, 
-            Qs.test(i) && (i = i.replace(Qs, ""), n = s[o].value, Ht(n) && (n += ".apply(this, $arguments)"), 
-            r = (t._scope || t._context).$eval(n, !0), r._fromParent = !0, t.$on(i.replace(Qs), r));
-        }
-        function i(t, e, i) {
-            if (i) {
-                var r, s, o, a;
-                for (s in i) if (r = i[s], Pi(r)) for (o = 0, a = r.length; o < a; o++) n(t, e, s, r[o]); else n(t, e, s, r);
-            }
-        }
-        function n(t, e, i, r, s) {
-            var o = typeof r;
-            if ("function" === o) t[e](i, r, s); else if ("string" === o) {
-                var a = t.$options.methods, h = a && a[r];
-                h ? t[e](i, h, s) : xn('Unknown method: "' + r + '" when registering callback for ' + e + ': "' + i + '".', t);
-            } else r && "object" === o && n(t, e, i, r.handler, r);
-        }
-        function r() {
-            this._isAttached || (this._isAttached = !0, this.$children.forEach(s));
-        }
-        function s(t) {
-            !t._isAttached && I(t.$el) && t._callHook("attached");
-        }
-        function o() {
-            this._isAttached && (this._isAttached = !1, this.$children.forEach(a));
-        }
-        function a(t) {
-            t._isAttached && !I(t.$el) && t._callHook("detached");
-        }
-        t.prototype._initEvents = function() {
-            var t = this.$options;
-            t._asComponent && e(this, t.el), i(this, "$on", t.events), i(this, "$watch", t.watch);
-        }, t.prototype._initDOMHooks = function() {
-            this.$on("hook:attached", r), this.$on("hook:detached", o);
-        }, t.prototype._callHook = function(t) {
-            this.$emit("pre-hook:" + t);
-            var e = this.$options[t];
-            if (e) for (var i = 0, n = e.length; i < n; i++) e[i].call(this);
-            this.$emit("hook:" + t);
-        };
-    }
-    function di() {}
-    function vi(t, e, i, n, r, s) {
-        this.vm = e, this.el = i, this.descriptor = t, this.name = t.name, this.expression = t.expression, 
-        this.arg = t.arg, this.modifiers = t.modifiers, this.filters = t.filters, this.literal = this.modifiers && this.modifiers.literal, 
-        this._locked = !1, this._bound = !1, this._listeners = null, this._host = n, this._scope = r, 
-        this._frag = s, this.el && (this.el._vue_directives = this.el._vue_directives || [], 
-        this.el._vue_directives.push(this));
-    }
-    function mi(t) {
-        t.prototype._updateRef = function(t) {
-            var e = this.$options._ref;
-            if (e) {
-                var i = (this._scope || this._context).$refs;
-                t ? i[e] === this && (i[e] = null) : i[e] = this;
-            }
-        }, t.prototype._compile = function(t) {
-            var e = this.$options, i = t;
-            if (t = oi(t, e), this._initElement(t), 1 !== t.nodeType || null === H(t, "v-pre")) {
-                var n = this._context && this._context.$options, r = We(t, e, n);
-                ci(this, e._content);
-                var s, o = this.constructor;
-                e._linkerCachable && (s = o.linker, s || (s = o.linker = Pe(t, e)));
-                var a = r(this, t, this._scope), h = s ? s(this, t) : Pe(t, e)(this, t);
-                this._unlinkFn = function() {
-                    a(), h(!0);
-                }, e.replace && q(i, t), this._isCompiled = !0, this._callHook("compiled");
-            }
-        }, t.prototype._initElement = function(t) {
-            at(t) ? (this._isFragment = !0, this.$el = this._fragmentStart = t.firstChild, this._fragmentEnd = t.lastChild, 
-            3 === this._fragmentStart.nodeType && (this._fragmentStart.data = this._fragmentEnd.data = ""), 
-            this._fragment = t) : this.$el = t, this.$el.__vue__ = this, this._callHook("beforeCompile");
-        }, t.prototype._bindDir = function(t, e, i, n, r) {
-            this._directives.push(new vi(t, this, e, i, n, r));
-        }, t.prototype._destroy = function(t, e) {
-            if (this._isBeingDestroyed) return void (e || this._cleanup());
-            var i, n, r = this, s = function() {
-                !i || n || e || r._cleanup();
-            };
-            t && this.$el && (n = !0, this.$remove(function() {
-                n = !1, s();
-            })), this._callHook("beforeDestroy"), this._isBeingDestroyed = !0;
-            var o, a = this.$parent;
-            for (a && !a._isBeingDestroyed && (a.$children.$remove(this), this._updateRef(!0)), 
-            o = this.$children.length; o--; ) this.$children[o].$destroy();
-            for (this._propsUnlinkFn && this._propsUnlinkFn(), this._unlinkFn && this._unlinkFn(), 
-            o = this._watchers.length; o--; ) this._watchers[o].teardown();
-            this.$el && (this.$el.__vue__ = null), i = !0, s();
-        }, t.prototype._cleanup = function() {
-            this._isDestroyed || (this._frag && this._frag.children.$remove(this), this._data && this._data.__ob__ && this._data.__ob__.removeVm(this), 
-            this.$el = this.$parent = this.$root = this.$children = this._watchers = this._context = this._scope = this._directives = null, 
-            this._isDestroyed = !0, this._callHook("destroyed"), this.$off());
-        };
-    }
-    function gi(t) {
-        t.prototype._applyFilters = function(t, e, i, n) {
-            var r, s, o, a, h, l, c, u, f;
-            for (l = 0, c = i.length; l < c; l++) if (r = i[n ? c - l - 1 : l], s = gt(this.$options, "filters", r.name, !0), 
-            s && (s = n ? s.write : s.read || s, "function" == typeof s)) {
-                if (o = n ? [ t, e ] : [ t ], h = n ? 2 : 1, r.args) for (u = 0, f = r.args.length; u < f; u++) a = r.args[u], 
-                o[u + h] = a.dynamic ? this.$get(a.value) : a.value;
-                t = s.apply(this, o);
-            }
-            return t;
-        }, t.prototype._resolveComponent = function(e, i) {
-            var n;
-            if (n = "function" == typeof e ? e : gt(this.$options, "components", e, !0)) if (n.options) i(n); else if (n.resolved) i(n.resolved); else if (n.requested) n.pendingCallbacks.push(i); else {
-                n.requested = !0;
-                var r = n.pendingCallbacks = [ i ];
-                n.call(this, function(e) {
-                    g(e) && (e = t.extend(e)), n.resolved = e;
-                    for (var i = 0, s = r.length; i < s; i++) r[i](e);
-                }, function(t) {
-                    xn("Failed to resolve async component" + ("string" == typeof e ? ": " + e : "") + ". " + (t ? "\nReason: " + t : ""));
-                });
-            }
-        };
-    }
-    function _i(t) {
-        function i(t) {
-            return JSON.parse(JSON.stringify(t));
-        }
-        t.prototype.$get = function(t, e) {
-            var i = It(t);
-            if (i) {
-                if (e) {
-                    var n = this;
-                    return function() {
-                        n.$arguments = d(arguments);
-                        var t = i.get.call(n, n);
-                        return n.$arguments = null, t;
-                    };
-                }
-                try {
-                    return i.get.call(this, this);
-                } catch (r) {}
-            }
-        }, t.prototype.$set = function(t, e) {
-            var i = It(t, !0);
-            i && i.set && i.set.call(this, this, e);
-        }, t.prototype.$delete = function(t) {
-            e(this._data, t);
-        }, t.prototype.$watch = function(t, e, i) {
-            var n, r = this;
-            "string" == typeof t && (n = A(t), t = n.expression);
-            var s = new Ut(r, t, e, {
-                deep: i && i.deep,
-                sync: i && i.sync,
-                filters: n && n.filters,
-                user: !i || i.user !== !1
-            });
-            return i && i.immediate && e.call(r, s.value), function() {
-                s.teardown();
-            };
-        }, t.prototype.$eval = function(t, e) {
-            if (Zs.test(t)) {
-                var i = A(t), n = this.$get(i.expression, e);
-                return i.filters ? this._applyFilters(n, null, i.filters) : n;
-            }
-            return this.$get(t, e);
-        }, t.prototype.$interpolate = function(t) {
-            var e = N(t), i = this;
-            return e ? 1 === e.length ? i.$eval(e[0].value) + "" : e.map(function(t) {
-                return t.tag ? i.$eval(t.value) : t.value;
-            }).join("") : t;
-        }, t.prototype.$log = function(t) {
-            var e = t ? jt(this._data, t) : this._data;
-            if (e && (e = i(e)), !t) {
-                var n;
-                for (n in this.$options.computed) e[n] = i(this[n]);
-                if (this._props) for (n in this._props) e[n] = i(this[n]);
-            }
-            console.log(e);
-        };
-    }
-    function bi(t) {
-        function e(t, e, n, r, s, o) {
-            e = i(e);
-            var a = !I(e), h = r === !1 || a ? s : o, l = !a && !t._isAttached && !I(t.$el);
-            return t._isFragment ? (st(t._fragmentStart, t._fragmentEnd, function(i) {
-                h(i, e, t);
-            }), n && n()) : h(t.$el, e, t, n), l && t._callHook("attached"), t;
-        }
-        function i(t) {
-            return "string" == typeof t ? document.querySelector(t) : t;
-        }
-        function n(t, e, i, n) {
-            e.appendChild(t), n && n();
-        }
-        function r(t, e, i, n) {
-            V(t, e), n && n();
-        }
-        function s(t, e, i) {
-            U(t), i && i();
-        }
-        t.prototype.$nextTick = function(t) {
-            Zi(t, this);
-        }, t.prototype.$appendTo = function(t, i, r) {
-            return e(this, t, i, r, n, D);
-        }, t.prototype.$prependTo = function(t, e, n) {
-            return t = i(t), t.hasChildNodes() ? this.$before(t.firstChild, e, n) : this.$appendTo(t, e, n), 
-            this;
-        }, t.prototype.$before = function(t, i, n) {
-            return e(this, t, i, n, r, F);
-        }, t.prototype.$after = function(t, e, n) {
-            return t = i(t), t.nextSibling ? this.$before(t.nextSibling, e, n) : this.$appendTo(t.parentNode, e, n), 
-            this;
-        }, t.prototype.$remove = function(t, e) {
-            if (!this.$el.parentNode) return t && t();
-            var i = this._isAttached && I(this.$el);
-            i || (e = !1);
-            var n = this, r = function() {
-                i && n._callHook("detached"), t && t();
-            };
-            if (this._isFragment) ot(this._fragmentStart, this._fragmentEnd, this, this._fragment, r); else {
-                var o = e === !1 ? s : P;
-                o(this.$el, this, r);
-            }
-            return this;
-        };
-    }
-    function yi(t) {
-        function e(t, e, n) {
-            var r = t.$parent;
-            if (r && n && !i.test(e)) for (;r; ) r._eventsCount[e] = (r._eventsCount[e] || 0) + n, 
-            r = r.$parent;
-        }
-        t.prototype.$on = function(t, i) {
-            return (this._events[t] || (this._events[t] = [])).push(i), e(this, t, 1), this;
-        }, t.prototype.$once = function(t, e) {
-            function i() {
-                n.$off(t, i), e.apply(this, arguments);
-            }
-            var n = this;
-            return i.fn = e, this.$on(t, i), this;
-        }, t.prototype.$off = function(t, i) {
-            var n;
-            if (!arguments.length) {
-                if (this.$parent) for (t in this._events) n = this._events[t], n && e(this, t, -n.length);
-                return this._events = {}, this;
-            }
-            if (n = this._events[t], !n) return this;
-            if (1 === arguments.length) return e(this, t, -n.length), this._events[t] = null, 
-            this;
-            for (var r, s = n.length; s--; ) if (r = n[s], r === i || r.fn === i) {
-                e(this, t, -1), n.splice(s, 1);
-                break;
-            }
-            return this;
-        }, t.prototype.$emit = function(t) {
-            var e = "string" == typeof t;
-            t = e ? t : t.name;
-            var i = this._events[t], n = e || !i;
-            if (i) {
-                i = i.length > 1 ? d(i) : i;
-                var r = e && i.some(function(t) {
-                    return t._fromParent;
-                });
-                r && (n = !1);
-                for (var s = d(arguments, 1), o = 0, a = i.length; o < a; o++) {
-                    var h = i[o], l = h.apply(this, s);
-                    l !== !0 || r && !h._fromParent || (n = !0);
-                }
-            }
-            return n;
-        }, t.prototype.$broadcast = function(t) {
-            var e = "string" == typeof t;
-            if (t = e ? t : t.name, this._eventsCount[t]) {
-                var i = this.$children, n = d(arguments);
-                e && (n[0] = {
-                    name: t,
-                    source: this
-                });
-                for (var r = 0, s = i.length; r < s; r++) {
-                    var o = i[r], a = o.$emit.apply(o, n);
-                    a && o.$broadcast.apply(o, n);
-                }
-                return this;
-            }
-        }, t.prototype.$dispatch = function(t) {
-            var e = this.$emit.apply(this, arguments);
-            if (e) {
-                var i = this.$parent, n = d(arguments);
-                for (n[0] = {
-                    name: t,
-                    source: this
-                }; i; ) e = i.$emit.apply(i, n), i = e ? i.$parent : null;
-                return this;
-            }
-        };
-        var i = /^hook:/;
-    }
-    function wi(t) {
-        function e() {
-            this._isAttached = !0, this._isReady = !0, this._callHook("ready");
-        }
-        t.prototype.$mount = function(t) {
-            return this._isCompiled ? void xn("$mount() should be called only once.", this) : (t = L(t), 
-            t || (t = document.createElement("div")), this._compile(t), this._initDOMHooks(), 
-            I(this.$el) ? (this._callHook("attached"), e.call(this)) : this.$once("hook:attached", e), 
-            this);
-        }, t.prototype.$destroy = function(t, e) {
-            this._destroy(t, e);
-        }, t.prototype.$compile = function(t, e, i, n) {
-            return Pe(t, this.$options, !0)(this, t, e, i, n);
-        };
-    }
-    function Ci(t) {
-        this._init(t);
-    }
-    function $i(t, e, i) {
-        return i = i ? parseInt(i, 10) : 0, e = o(e), "number" == typeof e ? t.slice(i, i + e) : t;
-    }
-    function ki(t, e, i) {
-        if (t = to(t), null == e) return t;
-        if ("function" == typeof e) return t.filter(e);
-        e = ("" + e).toLowerCase();
-        for (var n, r, s, o, a = "in" === i ? 3 : 2, h = Array.prototype.concat.apply([], d(arguments, a)), l = [], c = 0, u = t.length; c < u; c++) if (n = t[c], 
-        s = n && n.$value || n, o = h.length) {
-            for (;o--; ) if (r = h[o], "$key" === r && Ai(n.$key, e) || Ai(jt(s, r), e)) {
-                l.push(n);
-                break;
-            }
-        } else Ai(n, e) && l.push(n);
-        return l;
-    }
-    function xi(t) {
-        function e(t, e, i) {
-            var r = n[i];
-            return r && ("$key" !== r && (m(t) && "$value" in t && (t = t.$value), m(e) && "$value" in e && (e = e.$value)), 
-            t = m(t) ? jt(t, r) : t, e = m(e) ? jt(e, r) : e), t === e ? 0 : t > e ? s : -s;
-        }
-        var i = null, n = void 0;
-        t = to(t);
-        var r = d(arguments, 1), s = r[r.length - 1];
-        "number" == typeof s ? (s = s < 0 ? -1 : 1, r = r.length > 1 ? r.slice(0, -1) : r) : s = 1;
-        var o = r[0];
-        return o ? ("function" == typeof o ? i = function(t, e) {
-            return o(t, e) * s;
-        } : (n = Array.prototype.concat.apply([], r), i = function(t, r, s) {
-            return s = s || 0, s >= n.length - 1 ? e(t, r, s) : e(t, r, s) || i(t, r, s + 1);
-        }), t.slice().sort(i)) : t;
-    }
-    function Ai(t, e) {
-        var i;
-        if (g(t)) {
-            var n = Object.keys(t);
-            for (i = n.length; i--; ) if (Ai(t[n[i]], e)) return !0;
-        } else if (Pi(t)) {
-            for (i = t.length; i--; ) if (Ai(t[i], e)) return !0;
-        } else if (null != t) return t.toString().toLowerCase().indexOf(e) > -1;
-    }
-    function Ti(i) {
-        function n(t) {
-            return new Function("return function " + f(t) + " (options) { this._init(options) }")();
-        }
-        i.options = {
-            directives: ys,
-            elementDirectives: Ks,
-            filters: io,
-            transitions: {},
-            components: {},
-            partials: {},
-            replace: !0
-        }, i.util = Hn, i.config = kn, i.set = t, i["delete"] = e, i.nextTick = Zi, i.compiler = Ys, 
-        i.FragmentFactory = re, i.internalDirectives = Hs, i.parsers = {
-            path: nr,
-            text: wn,
-            template: Dr,
-            directive: vn,
-            expression: gr
-        }, i.cid = 0;
-        var r = 1;
-        i.extend = function(t) {
-            t = t || {};
-            var e = this, i = 0 === e.cid;
-            if (i && t._Ctor) return t._Ctor;
-            var s = t.name || e.options.name;
-            /^[a-zA-Z][\w-]*$/.test(s) || (xn('Invalid component name: "' + s + '". Component names can only contain alphanumeric characaters and the hyphen.'), 
-            s = null);
-            var o = n(s || "VueComponent");
-            return o.prototype = Object.create(e.prototype), o.prototype.constructor = o, o.cid = r++, 
-            o.options = mt(e.options, t), o["super"] = e, o.extend = e.extend, kn._assetTypes.forEach(function(t) {
-                o[t] = e[t];
-            }), s && (o.options.components[s] = o), i && (t._Ctor = o), o;
-        }, i.use = function(t) {
-            if (!t.installed) {
-                var e = d(arguments, 1);
-                return e.unshift(this), "function" == typeof t.install ? t.install.apply(t, e) : t.apply(null, e), 
-                t.installed = !0, this;
-            }
-        }, i.mixin = function(t) {
-            i.options = mt(i.options, t);
-        }, kn._assetTypes.forEach(function(t) {
-            i[t] = function(e, n) {
-                return n ? ("component" === t && (Nn.test(e) || jn.test(e)) && xn("Do not use built-in or reserved HTML elements as component id: " + e), 
-                "component" === t && g(n) && (n.name = e, n = i.extend(n)), this.options[t + "s"][e] = n, 
-                n) : this.options[t + "s"][e];
-            };
-        }), v(i.transition, Tn);
-    }
-    var Oi = Object.prototype.hasOwnProperty, Ni = /^\s?(true|false|-?[\d\.]+|'[^']*'|"[^"]*")\s?$/, ji = /-(\w)/g, Ei = /([a-z\d])([A-Z])/g, Si = /(?:^|[-_\/])(\w)/g, Di = Object.prototype.toString, Fi = "[object Object]", Pi = Array.isArray, Ri = "__proto__" in {}, Li = "undefined" != typeof window && "[object Object]" !== Object.prototype.toString.call(window), Ii = Li && window.__VUE_DEVTOOLS_GLOBAL_HOOK__, Hi = Li && window.navigator.userAgent.toLowerCase(), Mi = Hi && Hi.indexOf("msie 9.0") > 0, Wi = Hi && Hi.indexOf("android") > 0, Vi = Hi && /(iphone|ipad|ipod|ios)/i.test(Hi), Bi = Hi && Hi.indexOf("micromessenger") > 0, Ui = void 0, zi = void 0, qi = void 0, Ji = void 0;
-    if (Li && !Mi) {
-        var Yi = void 0 === window.ontransitionend && void 0 !== window.onwebkittransitionend, Qi = void 0 === window.onanimationend && void 0 !== window.onwebkitanimationend;
-        Ui = Yi ? "WebkitTransition" : "transition", zi = Yi ? "webkitTransitionEnd" : "transitionend", 
-        qi = Qi ? "WebkitAnimation" : "animation", Ji = Qi ? "webkitAnimationEnd" : "animationend";
-    }
-    var Zi = function() {
-        function t() {
-            n = !1;
-            var t = i.slice(0);
-            i = [];
-            for (var e = 0; e < t.length; e++) t[e]();
-        }
-        var e, i = [], n = !1;
-        if ("undefined" == typeof MutationObserver || Bi && Vi) {
-            var r = Li ? window : "undefined" != typeof global ? global : {};
-            e = r.setImmediate || setTimeout;
-        } else {
-            var s = 1, o = new MutationObserver(t), a = document.createTextNode(s);
-            o.observe(a, {
-                characterData: !0
-            }), e = function() {
-                s = (s + 1) % 2, a.data = s;
-            };
-        }
-        return function(r, s) {
-            var o = s ? function() {
-                r.call(s);
-            } : r;
-            i.push(o), n || (n = !0, e(t, 0));
-        };
-    }(), Gi = void 0;
-    "undefined" != typeof Set && Set.toString().match(/native code/) ? Gi = Set : (Gi = function() {
-        this.set = Object.create(null);
-    }, Gi.prototype.has = function(t) {
-        return void 0 !== this.set[t];
-    }, Gi.prototype.add = function(t) {
-        this.set[t] = 1;
-    }, Gi.prototype.clear = function() {
-        this.set = Object.create(null);
-    });
-    var Xi = $.prototype;
-    Xi.put = function(t, e) {
-        var i;
-        this.size === this.limit && (i = this.shift());
-        var n = this.get(t, !0);
-        return n || (n = {
-            key: t
-        }, this._keymap[t] = n, this.tail ? (this.tail.newer = n, n.older = this.tail) : this.head = n, 
-        this.tail = n, this.size++), n.value = e, i;
-    }, Xi.shift = function() {
-        var t = this.head;
-        return t && (this.head = this.head.newer, this.head.older = void 0, t.newer = t.older = void 0, 
-        this._keymap[t.key] = void 0, this.size--), t;
-    }, Xi.get = function(t, e) {
-        var i = this._keymap[t];
-        if (void 0 !== i) return i === this.tail ? e ? i : i.value : (i.newer && (i === this.head && (this.head = i.newer), 
-        i.newer.older = i.older), i.older && (i.older.newer = i.newer), i.newer = void 0, 
-        i.older = this.tail, this.tail && (this.tail.newer = i), this.tail = i, e ? i : i.value);
-    };
-    var Ki, tn, en, nn, rn, sn, on, an, hn, ln, cn, un, fn = new $(1e3), pn = /[^\s'"]+|'[^']*'|"[^"]*"/g, dn = /^in$|^-?\d+/, vn = Object.freeze({
-        parseDirective: A
-    }), mn = /[-.*+?^${}()|[\]\/\\]/g, gn = void 0, _n = void 0, bn = void 0, yn = /[^|]\|[^|]/, wn = Object.freeze({
-        compileRegex: O,
-        parseText: N,
-        tokensToExp: j
-    }), Cn = [ "{{", "}}" ], $n = [ "{{{", "}}}" ], kn = Object.defineProperties({
-        debug: !1,
-        silent: !1,
-        async: !0,
-        warnExpressionErrors: !0,
-        devtools: !0,
-        _delimitersChanged: !0,
-        _assetTypes: [ "component", "directive", "elementDirective", "filter", "transition", "partial" ],
-        _propBindingModes: {
-            ONE_WAY: 0,
-            TWO_WAY: 1,
-            ONE_TIME: 2
-        },
-        _maxUpdateCount: 100
-    }, {
-        delimiters: {
-            get: function() {
-                return Cn;
-            },
-            set: function(t) {
-                Cn = t, O();
-            },
-            configurable: !0,
-            enumerable: !0
-        },
-        unsafeDelimiters: {
-            get: function() {
-                return $n;
-            },
-            set: function(t) {
-                $n = t, O();
-            },
-            configurable: !0,
-            enumerable: !0
-        }
-    }), xn = void 0, An = void 0;
-    !function() {
-        var t = "undefined" != typeof console;
-        xn = function(e, i) {
-            t && !kn.silent && console.error("[Vue warn]: " + e + (i ? An(i) : ""));
-        }, An = function(t) {
-            var e = t._isVue ? t.$options.name : t.name;
-            return e ? " (found in component: <" + u(e) + ">)" : "";
-        };
-    }();
-    var Tn = Object.freeze({
-        appendWithTransition: D,
-        beforeWithTransition: F,
-        removeWithTransition: P,
-        applyTransition: R
-    }), On = /^v-ref:/, Nn = /^(div|p|span|img|a|b|i|br|ul|ol|li|h1|h2|h3|h4|h5|h6|code|pre|table|th|td|tr|form|label|input|select|option|nav|article|section|header|footer)$/i, jn = /^(slot|partial|component)$/i, En = void 0;
-    En = function(t, e) {
-        return e.indexOf("-") > -1 ? t.constructor === window.HTMLUnknownElement || t.constructor === window.HTMLElement : /HTMLUnknownElement/.test(t.toString()) && !/^(data|time|rtc|rb)$/.test(e);
-    };
-    var Sn = kn.optionMergeStrategies = Object.create(null);
-    Sn.data = function(t, e, i) {
-        return i ? t || e ? function() {
-            var n = "function" == typeof e ? e.call(i) : e, r = "function" == typeof t ? t.call(i) : void 0;
-            return n ? ut(n, r) : r;
-        } : void 0 : e ? "function" != typeof e ? (xn('The "data" option should be a function that returns a per-instance value in component definitions.', i), 
-        t) : t ? function() {
-            return ut(e.call(this), t.call(this));
-        } : e : t;
-    }, Sn.el = function(t, e, i) {
-        if (!i && e && "function" != typeof e) return void xn('The "el" option should be a function that returns a per-instance value in component definitions.', i);
-        var n = e || t;
-        return i && "function" == typeof n ? n.call(i) : n;
-    }, Sn.init = Sn.created = Sn.ready = Sn.attached = Sn.detached = Sn.beforeCompile = Sn.compiled = Sn.beforeDestroy = Sn.destroyed = Sn.activate = function(t, e) {
-        return e ? t ? t.concat(e) : Pi(e) ? e : [ e ] : t;
-    }, kn._assetTypes.forEach(function(t) {
-        Sn[t + "s"] = ft;
-    }), Sn.watch = Sn.events = function(t, e) {
-        if (!e) return t;
-        if (!t) return e;
-        var i = {};
-        v(i, t);
-        for (var n in e) {
-            var r = i[n], s = e[n];
-            r && !Pi(r) && (r = [ r ]), i[n] = r ? r.concat(s) : [ s ];
-        }
-        return i;
-    }, Sn.props = Sn.methods = Sn.computed = function(t, e) {
-        if (!e) return t;
-        if (!t) return e;
-        var i = Object.create(null);
-        return v(i, t), v(i, e), i;
-    };
-    var Dn = function(t, e) {
-        return void 0 === e ? t : e;
-    }, Fn = 0;
-    _t.target = null, _t.prototype.addSub = function(t) {
-        this.subs.push(t);
-    }, _t.prototype.removeSub = function(t) {
-        this.subs.$remove(t);
-    }, _t.prototype.depend = function() {
-        _t.target.addDep(this);
-    }, _t.prototype.notify = function() {
-        for (var t = d(this.subs), e = 0, i = t.length; e < i; e++) t[e].update();
-    };
-    var Pn = Array.prototype, Rn = Object.create(Pn);
-    [ "push", "pop", "shift", "unshift", "splice", "sort", "reverse" ].forEach(function(t) {
-        var e = Pn[t];
-        _(Rn, t, function() {
-            for (var i = arguments.length, n = new Array(i); i--; ) n[i] = arguments[i];
-            var r, s = e.apply(this, n), o = this.__ob__;
-            switch (t) {
-              case "push":
-                r = n;
-                break;
-
-              case "unshift":
-                r = n;
-                break;
-
-              case "splice":
-                r = n.slice(2);
-            }
-            return r && o.observeArray(r), o.dep.notify(), s;
-        });
-    }), _(Pn, "$set", function(t, e) {
-        return t >= this.length && (this.length = Number(t) + 1), this.splice(t, 1, e)[0];
-    }), _(Pn, "$remove", function(t) {
-        if (this.length) {
-            var e = y(this, t);
-            return e > -1 ? this.splice(e, 1) : void 0;
-        }
-    });
-    var Ln = Object.getOwnPropertyNames(Rn), In = !0;
-    yt.prototype.walk = function(t) {
-        for (var e = Object.keys(t), i = 0, n = e.length; i < n; i++) this.convert(e[i], t[e[i]]);
-    }, yt.prototype.observeArray = function(t) {
-        for (var e = 0, i = t.length; e < i; e++) $t(t[e]);
-    }, yt.prototype.convert = function(t, e) {
-        kt(this.value, t, e);
-    }, yt.prototype.addVm = function(t) {
-        (this.vms || (this.vms = [])).push(t);
-    }, yt.prototype.removeVm = function(t) {
-        this.vms.$remove(t);
-    };
-    var Hn = Object.freeze({
-        defineReactive: kt,
-        set: t,
-        del: e,
-        hasOwn: i,
-        isLiteral: n,
-        isReserved: r,
-        _toString: s,
-        toNumber: o,
-        toBoolean: a,
-        stripQuotes: h,
-        camelize: l,
-        hyphenate: u,
-        classify: f,
-        bind: p,
-        toArray: d,
-        extend: v,
-        isObject: m,
-        isPlainObject: g,
-        def: _,
-        debounce: b,
-        indexOf: y,
-        cancellable: w,
-        looseEqual: C,
-        isArray: Pi,
-        hasProto: Ri,
-        inBrowser: Li,
-        devtools: Ii,
-        isIE9: Mi,
-        isAndroid: Wi,
-        isIos: Vi,
-        isWechat: Bi,
-        get transitionProp() {
-            return Ui;
-        },
-        get transitionEndEvent() {
-            return zi;
-        },
-        get animationProp() {
-            return qi;
-        },
-        get animationEndEvent() {
-            return Ji;
-        },
-        nextTick: Zi,
-        get _Set() {
-            return Gi;
-        },
-        query: L,
-        inDoc: I,
-        getAttr: H,
-        getBindAttr: M,
-        hasBindAttr: W,
-        before: V,
-        after: B,
-        remove: U,
-        prepend: z,
-        replace: q,
-        on: J,
-        off: Y,
-        setClass: Z,
-        addClass: G,
-        removeClass: X,
-        extractContent: K,
-        trimNode: tt,
-        isTemplate: it,
-        createAnchor: nt,
-        findRef: rt,
-        mapNodeRange: st,
-        removeNodeRange: ot,
-        isFragment: at,
-        getOuterHTML: ht,
-        mergeOptions: mt,
-        resolveAsset: gt,
-        checkComponentAttr: lt,
-        commonTagRE: Nn,
-        reservedTagRE: jn,
-        get warn() {
-            return xn;
-        }
-    }), Mn = 0, Wn = new $(1e3), Vn = 0, Bn = 1, Un = 2, zn = 3, qn = 0, Jn = 1, Yn = 2, Qn = 3, Zn = 4, Gn = 5, Xn = 6, Kn = 7, tr = 8, er = [];
-    er[qn] = {
-        ws: [ qn ],
-        ident: [ Qn, Vn ],
-        "[": [ Zn ],
-        eof: [ Kn ]
-    }, er[Jn] = {
-        ws: [ Jn ],
-        ".": [ Yn ],
-        "[": [ Zn ],
-        eof: [ Kn ]
-    }, er[Yn] = {
-        ws: [ Yn ],
-        ident: [ Qn, Vn ]
-    }, er[Qn] = {
-        ident: [ Qn, Vn ],
-        "0": [ Qn, Vn ],
-        number: [ Qn, Vn ],
-        ws: [ Jn, Bn ],
-        ".": [ Yn, Bn ],
-        "[": [ Zn, Bn ],
-        eof: [ Kn, Bn ]
-    }, er[Zn] = {
-        "'": [ Gn, Vn ],
-        '"': [ Xn, Vn ],
-        "[": [ Zn, Un ],
-        "]": [ Jn, zn ],
-        eof: tr,
-        "else": [ Zn, Vn ]
-    }, er[Gn] = {
-        "'": [ Zn, Vn ],
-        eof: tr,
-        "else": [ Gn, Vn ]
-    }, er[Xn] = {
-        '"': [ Zn, Vn ],
-        eof: tr,
-        "else": [ Xn, Vn ]
-    };
-    var ir;
-    ir = function(t, e) {
-        xn('You are setting a non-existent path "' + t.raw + '" on a vm instance. Consider pre-initializing the property with the "data" option for more reliable reactivity and better performance.', e);
-    };
-    var nr = Object.freeze({
-        parsePath: Nt,
-        getPath: jt,
-        setPath: Et
-    }), rr = new $(1e3), sr = "Math,Date,this,true,false,null,undefined,Infinity,NaN,isNaN,isFinite,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,parseInt,parseFloat", or = new RegExp("^(" + sr.replace(/,/g, "\\b|") + "\\b)"), ar = "break,case,class,catch,const,continue,debugger,default,delete,do,else,export,extends,finally,for,function,if,import,in,instanceof,let,return,super,switch,throw,try,var,while,with,yield,enum,await,implements,package,protected,static,interface,private,public", hr = new RegExp("^(" + ar.replace(/,/g, "\\b|") + "\\b)"), lr = /\s/g, cr = /\n/g, ur = /[\{,]\s*[\w\$_]+\s*:|('(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`)|new |typeof |void /g, fr = /"(\d+)"/g, pr = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\]|\[\d+\]|\[[A-Za-z_$][\w$]*\])*$/, dr = /[^\w$\.](?:[A-Za-z_$][\w$]*)/g, vr = /^(?:true|false)$/, mr = [], gr = Object.freeze({
-        parseExpression: It,
-        isSimplePath: Ht
-    }), _r = [], br = [], yr = {}, wr = {}, Cr = !1, $r = 0;
-    Ut.prototype.get = function() {
-        this.beforeGet();
-        var t, e = this.scope || this.vm;
-        try {
-            t = this.getter.call(e, e);
-        } catch (i) {
-            kn.warnExpressionErrors && xn('Error when evaluating expression "' + this.expression + '": ' + i.toString(), this.vm);
-        }
-        return this.deep && zt(t), this.preProcess && (t = this.preProcess(t)), this.filters && (t = e._applyFilters(t, null, this.filters, !1)), 
-        this.postProcess && (t = this.postProcess(t)), this.afterGet(), t;
-    }, Ut.prototype.set = function(t) {
-        var e = this.scope || this.vm;
-        this.filters && (t = e._applyFilters(t, this.value, this.filters, !0));
-        try {
-            this.setter.call(e, e, t);
-        } catch (i) {
-            kn.warnExpressionErrors && xn('Error when evaluating setter "' + this.expression + '": ' + i.toString(), this.vm);
-        }
-        var n = e.$forContext;
-        if (n && n.alias === this.expression) {
-            if (n.filters) return void xn("It seems you are using two-way binding on a v-for alias (" + this.expression + "), and the v-for has filters. This will not work properly. Either remove the filters or use an array of objects and bind to object properties instead.", this.vm);
-            n._withLock(function() {
-                e.$key ? n.rawValue[e.$key] = t : n.rawValue.$set(e.$index, t);
-            });
-        }
-    }, Ut.prototype.beforeGet = function() {
-        _t.target = this;
-    }, Ut.prototype.addDep = function(t) {
-        var e = t.id;
-        this.newDepIds.has(e) || (this.newDepIds.add(e), this.newDeps.push(t), this.depIds.has(e) || t.addSub(this));
-    }, Ut.prototype.afterGet = function() {
-        _t.target = null;
-        for (var t = this.deps.length; t--; ) {
-            var e = this.deps[t];
-            this.newDepIds.has(e.id) || e.removeSub(this);
-        }
-        var i = this.depIds;
-        this.depIds = this.newDepIds, this.newDepIds = i, this.newDepIds.clear(), i = this.deps, 
-        this.deps = this.newDeps, this.newDeps = i, this.newDeps.length = 0;
-    }, Ut.prototype.update = function(t) {
-        this.lazy ? this.dirty = !0 : this.sync || !kn.async ? this.run() : (this.shallow = this.queued ? !!t && this.shallow : !!t, 
-        this.queued = !0, kn.debug && (this.prevError = new Error("[vue] async stack trace")), 
-        Bt(this));
-    }, Ut.prototype.run = function() {
-        if (this.active) {
-            var t = this.get();
-            if (t !== this.value || (m(t) || this.deep) && !this.shallow) {
-                var e = this.value;
-                this.value = t;
-                var i = this.prevError;
-                if (kn.debug && i) {
-                    this.prevError = null;
-                    try {
-                        this.cb.call(this.vm, t, e);
-                    } catch (n) {
-                        throw Zi(function() {
-                            throw i;
-                        }, 0), n;
-                    }
-                } else this.cb.call(this.vm, t, e);
-            }
-            this.queued = this.shallow = !1;
-        }
-    }, Ut.prototype.evaluate = function() {
-        var t = _t.target;
-        this.value = this.get(), this.dirty = !1, _t.target = t;
-    }, Ut.prototype.depend = function() {
-        for (var t = this.deps.length; t--; ) this.deps[t].depend();
-    }, Ut.prototype.teardown = function() {
-        if (this.active) {
-            this.vm._isBeingDestroyed || this.vm._vForRemoving || this.vm._watchers.$remove(this);
-            for (var t = this.deps.length; t--; ) this.deps[t].removeSub(this);
-            this.active = !1, this.vm = this.cb = this.value = null;
-        }
-    };
-    var kr = new Gi(), xr = {
-        bind: function() {
-            this.attr = 3 === this.el.nodeType ? "data" : "textContent";
-        },
-        update: function(t) {
-            this.el[this.attr] = s(t);
-        }
-    }, Ar = new $(1e3), Tr = new $(1e3), Or = {
-        efault: [ 0, "", "" ],
-        legend: [ 1, "<fieldset>", "</fieldset>" ],
-        tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-        col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ]
-    };
-    Or.td = Or.th = [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], Or.option = Or.optgroup = [ 1, '<select multiple="multiple">', "</select>" ], 
-    Or.thead = Or.tbody = Or.colgroup = Or.caption = Or.tfoot = [ 1, "<table>", "</table>" ], 
-    Or.g = Or.defs = Or.symbol = Or.use = Or.image = Or.text = Or.circle = Or.ellipse = Or.line = Or.path = Or.polygon = Or.polyline = Or.rect = [ 1, '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"version="1.1">', "</svg>" ];
-    var Nr = /<([\w:-]+)/, jr = /&#?\w+?;/, Er = function() {
-        if (Li) {
-            var t = document.createElement("div");
-            return t.innerHTML = "<template>1</template>", !t.cloneNode(!0).firstChild.innerHTML;
-        }
-        return !1;
-    }(), Sr = function() {
-        if (Li) {
-            var t = document.createElement("textarea");
-            return t.placeholder = "t", "t" === t.cloneNode(!0).value;
-        }
-        return !1;
-    }(), Dr = Object.freeze({
-        cloneNode: Qt,
-        parseTemplate: Zt
-    }), Fr = {
-        bind: function() {
-            8 === this.el.nodeType && (this.nodes = [], this.anchor = nt("v-html"), q(this.el, this.anchor));
-        },
-        update: function(t) {
-            t = s(t), this.nodes ? this.swap(t) : this.el.innerHTML = t;
-        },
-        swap: function(t) {
-            for (var e = this.nodes.length; e--; ) U(this.nodes[e]);
-            var i = Zt(t, !0, !0);
-            this.nodes = d(i.childNodes), V(i, this.anchor);
-        }
-    };
-    Gt.prototype.callHook = function(t) {
-        var e, i;
-        for (e = 0, i = this.childFrags.length; e < i; e++) this.childFrags[e].callHook(t);
-        for (e = 0, i = this.children.length; e < i; e++) t(this.children[e]);
-    }, Gt.prototype.beforeRemove = function() {
-        var t, e;
-        for (t = 0, e = this.childFrags.length; t < e; t++) this.childFrags[t].beforeRemove(!1);
-        for (t = 0, e = this.children.length; t < e; t++) this.children[t].$destroy(!1, !0);
-        var i = this.unlink.dirs;
-        for (t = 0, e = i.length; t < e; t++) i[t]._watcher && i[t]._watcher.teardown();
-    }, Gt.prototype.destroy = function() {
-        this.parentFrag && this.parentFrag.childFrags.$remove(this), this.node.__v_frag = null, 
-        this.unlink();
-    };
-    var Pr = new $(5e3);
-    re.prototype.create = function(t, e, i) {
-        var n = Qt(this.template);
-        return new Gt(this.linker, this.vm, n, t, e, i);
-    };
-    var Rr = 700, Lr = 800, Ir = 850, Hr = 1100, Mr = 1500, Wr = 1500, Vr = 1750, Br = 2100, Ur = 2200, zr = 2300, qr = 0, Jr = {
-        priority: Ur,
-        terminal: !0,
-        params: [ "track-by", "stagger", "enter-stagger", "leave-stagger" ],
-        bind: function() {
-            var t = this.expression.match(/(.*) (?:in|of) (.*)/);
-            if (t) {
-                var e = t[1].match(/\((.*),(.*)\)/);
-                e ? (this.iterator = e[1].trim(), this.alias = e[2].trim()) : this.alias = t[1].trim(), 
-                this.expression = t[2];
-            }
-            if (!this.alias) return void xn('Invalid v-for expression "' + this.descriptor.raw + '": alias is required.', this.vm);
-            this.id = "__v-for__" + ++qr;
-            var i = this.el.tagName;
-            this.isOption = ("OPTION" === i || "OPTGROUP" === i) && "SELECT" === this.el.parentNode.tagName, 
-            this.start = nt("v-for-start"), this.end = nt("v-for-end"), q(this.el, this.end), 
-            V(this.start, this.end), this.cache = Object.create(null), this.factory = new re(this.vm, this.el);
-        },
-        update: function(t) {
-            this.diff(t), this.updateRef(), this.updateModel();
-        },
-        diff: function(t) {
-            var e, n, r, s, o, a, h = t[0], l = this.fromObject = m(h) && i(h, "$key") && i(h, "$value"), c = this.params.trackBy, u = this.frags, f = this.frags = new Array(t.length), p = this.alias, d = this.iterator, v = this.start, g = this.end, _ = I(v), b = !u;
-            for (e = 0, n = t.length; e < n; e++) h = t[e], s = l ? h.$key : null, o = l ? h.$value : h, 
-            a = !m(o), r = !b && this.getCachedFrag(o, e, s), r ? (r.reused = !0, r.scope.$index = e, 
-            s && (r.scope.$key = s), d && (r.scope[d] = null !== s ? s : e), (c || l || a) && bt(function() {
-                r.scope[p] = o;
-            })) : (r = this.create(o, p, e, s), r.fresh = !b), f[e] = r, b && r.before(g);
-            if (!b) {
-                var y = 0, w = u.length - f.length;
-                for (this.vm._vForRemoving = !0, e = 0, n = u.length; e < n; e++) r = u[e], r.reused || (this.deleteCachedFrag(r), 
-                this.remove(r, y++, w, _));
-                this.vm._vForRemoving = !1, y && (this.vm._watchers = this.vm._watchers.filter(function(t) {
-                    return t.active;
-                }));
-                var C, $, k, x = 0;
-                for (e = 0, n = f.length; e < n; e++) r = f[e], C = f[e - 1], $ = C ? C.staggerCb ? C.staggerAnchor : C.end || C.node : v, 
-                r.reused && !r.staggerCb ? (k = se(r, v, this.id), k === C || k && se(k, v, this.id) === C || this.move(r, $)) : this.insert(r, x++, $, _), 
-                r.reused = r.fresh = !1;
-            }
-        },
-        create: function(t, e, i, n) {
-            var r = this._host, s = this._scope || this.vm, o = Object.create(s);
-            o.$refs = Object.create(s.$refs), o.$els = Object.create(s.$els), o.$parent = s, 
-            o.$forContext = this, bt(function() {
-                kt(o, e, t);
-            }), kt(o, "$index", i), n ? kt(o, "$key", n) : o.$key && _(o, "$key", null), this.iterator && kt(o, this.iterator, null !== n ? n : i);
-            var a = this.factory.create(r, o, this._frag);
-            return a.forId = this.id, this.cacheFrag(t, a, i, n), a;
-        },
-        updateRef: function() {
-            var t = this.descriptor.ref;
-            if (t) {
-                var e, i = (this._scope || this.vm).$refs;
-                this.fromObject ? (e = {}, this.frags.forEach(function(t) {
-                    e[t.scope.$key] = oe(t);
-                })) : e = this.frags.map(oe), i[t] = e;
-            }
-        },
-        updateModel: function() {
-            if (this.isOption) {
-                var t = this.start.parentNode, e = t && t.__v_model;
-                e && e.forceUpdate();
-            }
-        },
-        insert: function(t, e, i, n) {
-            t.staggerCb && (t.staggerCb.cancel(), t.staggerCb = null);
-            var r = this.getStagger(t, e, null, "enter");
-            if (n && r) {
-                var s = t.staggerAnchor;
-                s || (s = t.staggerAnchor = nt("stagger-anchor"), s.__v_frag = t), B(s, i);
-                var o = t.staggerCb = w(function() {
-                    t.staggerCb = null, t.before(s), U(s);
-                });
-                setTimeout(o, r);
-            } else {
-                var a = i.nextSibling;
-                a || (B(this.end, i), a = this.end), t.before(a);
-            }
-        },
-        remove: function(t, e, i, n) {
-            if (t.staggerCb) return t.staggerCb.cancel(), void (t.staggerCb = null);
-            var r = this.getStagger(t, e, i, "leave");
-            if (n && r) {
-                var s = t.staggerCb = w(function() {
-                    t.staggerCb = null, t.remove();
-                });
-                setTimeout(s, r);
-            } else t.remove();
-        },
-        move: function(t, e) {
-            e.nextSibling || this.end.parentNode.appendChild(this.end), t.before(e.nextSibling, !1);
-        },
-        cacheFrag: function(t, e, n, r) {
-            var s, o = this.params.trackBy, a = this.cache, h = !m(t);
-            r || o || h ? (s = he(n, r, t, o), a[s] ? "$index" !== o && this.warnDuplicate(t) : a[s] = e) : (s = this.id, 
-            i(t, s) ? null === t[s] ? t[s] = e : this.warnDuplicate(t) : Object.isExtensible(t) ? _(t, s, e) : xn("Frozen v-for objects cannot be automatically tracked, make sure to provide a track-by key.")), 
-            e.raw = t;
-        },
-        getCachedFrag: function(t, e, i) {
-            var n, r = this.params.trackBy, s = !m(t);
-            if (i || r || s) {
-                var o = he(e, i, t, r);
-                n = this.cache[o];
-            } else n = t[this.id];
-            return n && (n.reused || n.fresh) && this.warnDuplicate(t), n;
-        },
-        deleteCachedFrag: function(t) {
-            var e = t.raw, n = this.params.trackBy, r = t.scope, s = r.$index, o = i(r, "$key") && r.$key, a = !m(e);
-            if (n || o || a) {
-                var h = he(s, o, e, n);
-                this.cache[h] = null;
-            } else e[this.id] = null, t.raw = null;
-        },
-        getStagger: function(t, e, i, n) {
-            n += "Stagger";
-            var r = t.node.__v_trans, s = r && r.hooks, o = s && (s[n] || s.stagger);
-            return o ? o.call(t, e, i) : e * parseInt(this.params[n] || this.params.stagger, 10);
-        },
-        _preProcess: function(t) {
-            return this.rawValue = t, t;
-        },
-        _postProcess: function(t) {
-            if (Pi(t)) return t;
-            if (g(t)) {
-                for (var e, i = Object.keys(t), n = i.length, r = new Array(n); n--; ) e = i[n], 
-                r[n] = {
-                    $key: e,
-                    $value: t[e]
-                };
-                return r;
-            }
-            return "number" != typeof t || isNaN(t) || (t = ae(t)), t || [];
-        },
-        unbind: function() {
-            if (this.descriptor.ref && ((this._scope || this.vm).$refs[this.descriptor.ref] = null), 
-            this.frags) for (var t, e = this.frags.length; e--; ) t = this.frags[e], this.deleteCachedFrag(t), 
-            t.destroy();
-        }
-    };
-    Jr.warnDuplicate = function(t) {
-        xn('Duplicate value found in v-for="' + this.descriptor.raw + '": ' + JSON.stringify(t) + '. Use track-by="$index" if you are expecting duplicate values.', this.vm);
-    };
-    var Yr = {
-        priority: Br,
-        terminal: !0,
-        bind: function() {
-            var t = this.el;
-            if (t.__vue__) xn('v-if="' + this.expression + '" cannot be used on an instance root element.', this.vm), 
-            this.invalid = !0; else {
-                var e = t.nextElementSibling;
-                e && null !== H(e, "v-else") && (U(e), this.elseEl = e), this.anchor = nt("v-if"), 
-                q(t, this.anchor);
-            }
-        },
-        update: function(t) {
-            this.invalid || (t ? this.frag || this.insert() : this.remove());
-        },
-        insert: function() {
-            this.elseFrag && (this.elseFrag.remove(), this.elseFrag = null), this.factory || (this.factory = new re(this.vm, this.el)), 
-            this.frag = this.factory.create(this._host, this._scope, this._frag), this.frag.before(this.anchor);
-        },
-        remove: function() {
-            this.frag && (this.frag.remove(), this.frag = null), this.elseEl && !this.elseFrag && (this.elseFactory || (this.elseFactory = new re(this.elseEl._context || this.vm, this.elseEl)), 
-            this.elseFrag = this.elseFactory.create(this._host, this._scope, this._frag), this.elseFrag.before(this.anchor));
-        },
-        unbind: function() {
-            this.frag && this.frag.destroy(), this.elseFrag && this.elseFrag.destroy();
-        }
-    }, Qr = {
-        bind: function() {
-            var t = this.el.nextElementSibling;
-            t && null !== H(t, "v-else") && (this.elseEl = t);
-        },
-        update: function(t) {
-            this.apply(this.el, t), this.elseEl && this.apply(this.elseEl, !t);
-        },
-        apply: function(t, e) {
-            function i() {
-                t.style.display = e ? "" : "none";
-            }
-            I(t) ? R(t, e ? 1 : -1, i, this.vm) : i();
-        }
-    }, Zr = {
-        bind: function() {
-            var t = this, e = this.el, i = "range" === e.type, n = this.params.lazy, r = this.params.number, s = this.params.debounce, a = !1;
-            if (Wi || i || (this.on("compositionstart", function() {
-                a = !0;
-            }), this.on("compositionend", function() {
-                a = !1, n || t.listener();
-            })), this.focused = !1, i || n || (this.on("focus", function() {
-                t.focused = !0;
-            }), this.on("blur", function() {
-                t.focused = !1, t._frag && !t._frag.inserted || t.rawListener();
-            })), this.listener = this.rawListener = function() {
-                if (!a && t._bound) {
-                    var n = r || i ? o(e.value) : e.value;
-                    t.set(n), Zi(function() {
-                        t._bound && !t.focused && t.update(t._watcher.value);
-                    });
-                }
-            }, s && (this.listener = b(this.listener, s)), this.hasjQuery = "function" == typeof jQuery, 
-            this.hasjQuery) {
-                var h = jQuery.fn.on ? "on" : "bind";
-                jQuery(e)[h]("change", this.rawListener), n || jQuery(e)[h]("input", this.listener);
-            } else this.on("change", this.rawListener), n || this.on("input", this.listener);
-            !n && Mi && (this.on("cut", function() {
-                Zi(t.listener);
-            }), this.on("keyup", function(e) {
-                46 !== e.keyCode && 8 !== e.keyCode || t.listener();
-            })), (e.hasAttribute("value") || "TEXTAREA" === e.tagName && e.value.trim()) && (this.afterBind = this.listener);
-        },
-        update: function(t) {
-            this.el.value = s(t);
-        },
-        unbind: function() {
-            var t = this.el;
-            if (this.hasjQuery) {
-                var e = jQuery.fn.off ? "off" : "unbind";
-                jQuery(t)[e]("change", this.listener), jQuery(t)[e]("input", this.listener);
-            }
-        }
-    }, Gr = {
-        bind: function() {
-            var t = this, e = this.el;
-            this.getValue = function() {
-                if (e.hasOwnProperty("_value")) return e._value;
-                var i = e.value;
-                return t.params.number && (i = o(i)), i;
-            }, this.listener = function() {
-                t.set(t.getValue());
-            }, this.on("change", this.listener), e.hasAttribute("checked") && (this.afterBind = this.listener);
-        },
-        update: function(t) {
-            this.el.checked = C(t, this.getValue());
-        }
-    }, Xr = {
-        bind: function() {
-            var t = this, e = this.el;
-            this.forceUpdate = function() {
-                t._watcher && t.update(t._watcher.get());
-            };
-            var i = this.multiple = e.hasAttribute("multiple");
-            this.listener = function() {
-                var n = le(e, i);
-                n = t.params.number ? Pi(n) ? n.map(o) : o(n) : n, t.set(n);
-            }, this.on("change", this.listener);
-            var n = le(e, i, !0);
-            (i && n.length || !i && null !== n) && (this.afterBind = this.listener), this.vm.$on("hook:attached", this.forceUpdate);
-        },
-        update: function(t) {
-            var e = this.el;
-            e.selectedIndex = -1;
-            for (var i, n, r = this.multiple && Pi(t), s = e.options, o = s.length; o--; ) i = s[o], 
-            n = i.hasOwnProperty("_value") ? i._value : i.value, i.selected = r ? ce(t, n) > -1 : C(t, n);
-        },
-        unbind: function() {
-            this.vm.$off("hook:attached", this.forceUpdate);
-        }
-    }, Kr = {
-        bind: function() {
-            function t() {
-                var t = i.checked;
-                return t && i.hasOwnProperty("_trueValue") ? i._trueValue : !t && i.hasOwnProperty("_falseValue") ? i._falseValue : t;
-            }
-            var e = this, i = this.el;
-            this.getValue = function() {
-                return i.hasOwnProperty("_value") ? i._value : e.params.number ? o(i.value) : i.value;
-            }, this.listener = function() {
-                var n = e._watcher.value;
-                if (Pi(n)) {
-                    var r = e.getValue();
-                    i.checked ? y(n, r) < 0 && n.push(r) : n.$remove(r);
-                } else e.set(t());
-            }, this.on("change", this.listener), i.hasAttribute("checked") && (this.afterBind = this.listener);
-        },
-        update: function(t) {
-            var e = this.el;
-            Pi(t) ? e.checked = y(t, this.getValue()) > -1 : e.hasOwnProperty("_trueValue") ? e.checked = C(t, e._trueValue) : e.checked = !!t;
-        }
-    }, ts = {
-        text: Zr,
-        radio: Gr,
-        select: Xr,
-        checkbox: Kr
-    }, es = {
-        priority: Lr,
-        twoWay: !0,
-        handlers: ts,
-        params: [ "lazy", "number", "debounce" ],
-        bind: function() {
-            this.checkFilters(), this.hasRead && !this.hasWrite && xn('It seems you are using a read-only filter with v-model="' + this.descriptor.raw + '". You might want to use a two-way filter to ensure correct behavior.', this.vm);
-            var t, e = this.el, i = e.tagName;
-            if ("INPUT" === i) t = ts[e.type] || ts.text; else if ("SELECT" === i) t = ts.select; else {
-                if ("TEXTAREA" !== i) return void xn("v-model does not support element type: " + i, this.vm);
-                t = ts.text;
-            }
-            e.__v_model = this, t.bind.call(this), this.update = t.update, this._unbind = t.unbind;
-        },
-        checkFilters: function() {
-            var t = this.filters;
-            if (t) for (var e = t.length; e--; ) {
-                var i = gt(this.vm.$options, "filters", t[e].name);
-                ("function" == typeof i || i.read) && (this.hasRead = !0), i.write && (this.hasWrite = !0);
-            }
-        },
-        unbind: function() {
-            this.el.__v_model = null, this._unbind && this._unbind();
-        }
-    }, is = {
-        esc: 27,
-        tab: 9,
-        enter: 13,
-        space: 32,
-        "delete": [ 8, 46 ],
-        up: 38,
-        left: 37,
-        right: 39,
-        down: 40
-    }, ns = {
-        priority: Rr,
-        acceptStatement: !0,
-        keyCodes: is,
-        bind: function() {
-            if ("IFRAME" === this.el.tagName && "load" !== this.arg) {
-                var t = this;
-                this.iframeBind = function() {
-                    J(t.el.contentWindow, t.arg, t.handler, t.modifiers.capture);
-                }, this.on("load", this.iframeBind);
-            }
-        },
-        update: function(t) {
-            if (this.descriptor.raw || (t = function() {}), "function" != typeof t) return void xn("v-on:" + this.arg + '="' + this.expression + '" expects a function value, got ' + t, this.vm);
-            this.modifiers.stop && (t = fe(t)), this.modifiers.prevent && (t = pe(t)), this.modifiers.self && (t = de(t));
-            var e = Object.keys(this.modifiers).filter(function(t) {
-                return "stop" !== t && "prevent" !== t && "self" !== t && "capture" !== t;
-            });
-            e.length && (t = ue(t, e)), this.reset(), this.handler = t, this.iframeBind ? this.iframeBind() : J(this.el, this.arg, this.handler, this.modifiers.capture);
-        },
-        reset: function() {
-            var t = this.iframeBind ? this.el.contentWindow : this.el;
-            this.handler && Y(t, this.arg, this.handler);
-        },
-        unbind: function() {
-            this.reset();
-        }
-    }, rs = [ "-webkit-", "-moz-", "-ms-" ], ss = [ "Webkit", "Moz", "ms" ], os = /!important;?$/, as = Object.create(null), hs = null, ls = {
-        deep: !0,
-        update: function(t) {
-            "string" == typeof t ? this.el.style.cssText = t : Pi(t) ? this.handleObject(t.reduce(v, {})) : this.handleObject(t || {});
-        },
-        handleObject: function(t) {
-            var e, i, n = this.cache || (this.cache = {});
-            for (e in n) e in t || (this.handleSingle(e, null), delete n[e]);
-            for (e in t) i = t[e], i !== n[e] && (n[e] = i, this.handleSingle(e, i));
-        },
-        handleSingle: function(t, e) {
-            if (t = ve(t)) if (null != e && (e += ""), e) {
-                var i = os.test(e) ? "important" : "";
-                i ? (xn("It's probably a bad idea to use !important with inline rules. This feature will be deprecated in a future version of Vue."), 
-                e = e.replace(os, "").trim(), this.el.style.setProperty(t.kebab, e, i)) : this.el.style[t.camel] = e;
-            } else this.el.style[t.camel] = "";
-        }
-    }, cs = "http://www.w3.org/1999/xlink", us = /^xlink:/, fs = /^v-|^:|^@|^(?:is|transition|transition-mode|debounce|track-by|stagger|enter-stagger|leave-stagger)$/, ps = /^(?:value|checked|selected|muted)$/, ds = /^(?:draggable|contenteditable|spellcheck)$/, vs = {
-        value: "_value",
-        "true-value": "_trueValue",
-        "false-value": "_falseValue"
-    }, ms = {
-        priority: Ir,
-        bind: function() {
-            var t = this.arg, e = this.el.tagName;
-            t || (this.deep = !0);
-            var i = this.descriptor, n = i.interp;
-            if (n) {
-                i.hasOneTime && (this.expression = j(n, this._scope || this.vm)), (fs.test(t) || "name" === t && ("PARTIAL" === e || "SLOT" === e)) && (xn(t + '="' + i.raw + '": attribute interpolation is not allowed in Vue.js directives and special attributes.', this.vm), 
-                this.el.removeAttribute(t), this.invalid = !0);
-                var r = t + '="' + i.raw + '": ';
-                "src" === t && xn(r + 'interpolation in "src" attribute will cause a 404 request. Use v-bind:src instead.', this.vm), 
-                "style" === t && xn(r + 'interpolation in "style" attribute will cause the attribute to be discarded in Internet Explorer. Use v-bind:style instead.', this.vm);
-            }
-        },
-        update: function(t) {
-            if (!this.invalid) {
-                var e = this.arg;
-                this.arg ? this.handleSingle(e, t) : this.handleObject(t || {});
-            }
-        },
-        handleObject: ls.handleObject,
-        handleSingle: function(t, e) {
-            var i = this.el, n = this.descriptor.interp;
-            if (this.modifiers.camel && (t = l(t)), !n && ps.test(t) && t in i) {
-                var r = "value" === t && null == e ? "" : e;
-                i[t] !== r && (i[t] = r);
-            }
-            var s = vs[t];
-            if (!n && s) {
-                i[s] = e;
-                var o = i.__v_model;
-                o && o.listener();
-            }
-            return "value" === t && "TEXTAREA" === i.tagName ? void i.removeAttribute(t) : void (ds.test(t) ? i.setAttribute(t, e ? "true" : "false") : null != e && e !== !1 ? "class" === t ? (i.__v_trans && (e += " " + i.__v_trans.id + "-transition"), 
-            Z(i, e)) : us.test(t) ? i.setAttributeNS(cs, t, e === !0 ? "" : e) : i.setAttribute(t, e === !0 ? "" : e) : i.removeAttribute(t));
-        }
-    }, gs = {
-        priority: Mr,
-        bind: function() {
-            if (this.arg) {
-                var t = this.id = l(this.arg), e = (this._scope || this.vm).$els;
-                i(e, t) ? e[t] = this.el : kt(e, t, this.el);
-            }
-        },
-        unbind: function() {
-            var t = (this._scope || this.vm).$els;
-            t[this.id] === this.el && (t[this.id] = null);
-        }
-    }, _s = {
-        bind: function() {
-            xn("v-ref:" + this.arg + " must be used on a child component. Found on <" + this.el.tagName.toLowerCase() + ">.", this.vm);
-        }
-    }, bs = {
-        bind: function() {
-            var t = this.el;
-            this.vm.$once("pre-hook:compiled", function() {
-                t.removeAttribute("v-cloak");
-            });
-        }
-    }, ys = {
-        text: xr,
-        html: Fr,
-        "for": Jr,
-        "if": Yr,
-        show: Qr,
-        model: es,
-        on: ns,
-        bind: ms,
-        el: gs,
-        ref: _s,
-        cloak: bs
-    }, ws = {
-        deep: !0,
-        update: function(t) {
-            t ? "string" == typeof t ? this.setClass(t.trim().split(/\s+/)) : this.setClass(ge(t)) : this.cleanup();
-        },
-        setClass: function(t) {
-            this.cleanup(t);
-            for (var e = 0, i = t.length; e < i; e++) {
-                var n = t[e];
-                n && _e(this.el, n, G);
-            }
-            this.prevKeys = t;
-        },
-        cleanup: function(t) {
-            var e = this.prevKeys;
-            if (e) for (var i = e.length; i--; ) {
-                var n = e[i];
-                (!t || t.indexOf(n) < 0) && _e(this.el, n, X);
-            }
-        }
-    }, Cs = {
-        priority: Wr,
-        params: [ "keep-alive", "transition-mode", "inline-template" ],
-        bind: function() {
-            this.el.__vue__ ? xn('cannot mount component "' + this.expression + '" on already mounted element: ' + this.el) : (this.keepAlive = this.params.keepAlive, 
-            this.keepAlive && (this.cache = {}), this.params.inlineTemplate && (this.inlineTemplate = K(this.el, !0)), 
-            this.pendingComponentCb = this.Component = null, this.pendingRemovals = 0, this.pendingRemovalCb = null, 
-            this.anchor = nt("v-component"), q(this.el, this.anchor), this.el.removeAttribute("is"), 
-            this.el.removeAttribute(":is"), this.descriptor.ref && this.el.removeAttribute("v-ref:" + u(this.descriptor.ref)), 
-            this.literal && this.setComponent(this.expression));
-        },
-        update: function(t) {
-            this.literal || this.setComponent(t);
-        },
-        setComponent: function(t, e) {
-            if (this.invalidatePending(), t) {
-                var i = this;
-                this.resolveComponent(t, function() {
-                    i.mountComponent(e);
-                });
-            } else this.unbuild(!0), this.remove(this.childVM, e), this.childVM = null;
-        },
-        resolveComponent: function(t, e) {
-            var i = this;
-            this.pendingComponentCb = w(function(n) {
-                i.ComponentName = n.options.name || ("string" == typeof t ? t : null), i.Component = n, 
-                e();
-            }), this.vm._resolveComponent(t, this.pendingComponentCb);
-        },
-        mountComponent: function(t) {
-            this.unbuild(!0);
-            var e = this, i = this.Component.options.activate, n = this.getCached(), r = this.build();
-            i && !n ? (this.waitingFor = r, be(i, r, function() {
-                e.waitingFor === r && (e.waitingFor = null, e.transition(r, t));
-            })) : (n && r._updateRef(), this.transition(r, t));
-        },
-        invalidatePending: function() {
-            this.pendingComponentCb && (this.pendingComponentCb.cancel(), this.pendingComponentCb = null);
-        },
-        build: function(t) {
-            var e = this.getCached();
-            if (e) return e;
-            if (this.Component) {
-                var i = {
-                    name: this.ComponentName,
-                    el: Qt(this.el),
-                    template: this.inlineTemplate,
-                    parent: this._host || this.vm,
-                    _linkerCachable: !this.inlineTemplate,
-                    _ref: this.descriptor.ref,
-                    _asComponent: !0,
-                    _isRouterView: this._isRouterView,
-                    _context: this.vm,
-                    _scope: this._scope,
-                    _frag: this._frag
-                };
-                t && v(i, t);
-                var n = new this.Component(i);
-                return this.keepAlive && (this.cache[this.Component.cid] = n), this.el.hasAttribute("transition") && n._isFragment && xn("Transitions will not work on a fragment instance. Template: " + n.$options.template, n), 
-                n;
-            }
-        },
-        getCached: function() {
-            return this.keepAlive && this.cache[this.Component.cid];
-        },
-        unbuild: function(t) {
-            this.waitingFor && (this.keepAlive || this.waitingFor.$destroy(), this.waitingFor = null);
-            var e = this.childVM;
-            return !e || this.keepAlive ? void (e && (e._inactive = !0, e._updateRef(!0))) : void e.$destroy(!1, t);
-        },
-        remove: function(t, e) {
-            var i = this.keepAlive;
-            if (t) {
-                this.pendingRemovals++, this.pendingRemovalCb = e;
-                var n = this;
-                t.$remove(function() {
-                    n.pendingRemovals--, i || t._cleanup(), !n.pendingRemovals && n.pendingRemovalCb && (n.pendingRemovalCb(), 
-                    n.pendingRemovalCb = null);
-                });
-            } else e && e();
-        },
-        transition: function(t, e) {
-            var i = this, n = this.childVM;
-            switch (n && (n._inactive = !0), t._inactive = !1, this.childVM = t, i.params.transitionMode) {
-              case "in-out":
-                t.$before(i.anchor, function() {
-                    i.remove(n, e);
-                });
-                break;
-
-              case "out-in":
-                i.remove(n, function() {
-                    t.$before(i.anchor, e);
-                });
-                break;
-
-              default:
-                i.remove(n), t.$before(i.anchor, e);
-            }
-        },
-        unbind: function() {
-            if (this.invalidatePending(), this.unbuild(), this.cache) {
-                for (var t in this.cache) this.cache[t].$destroy();
-                this.cache = null;
-            }
-        }
-    }, $s = kn._propBindingModes, ks = {}, xs = /^[$_a-zA-Z]+[\w$]*$/, As = /^[A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*|\[[^\[\]]+\])*$/, Ts = kn._propBindingModes, Os = {
-        bind: function() {
-            var t = this.vm, e = t._context, i = this.descriptor.prop, n = i.path, r = i.parentPath, s = i.mode === Ts.TWO_WAY, o = this.parentWatcher = new Ut(e, r, function(e) {
-                ke(t, i, e);
-            }, {
-                twoWay: s,
-                filters: i.filters,
-                scope: this._scope
-            });
-            if ($e(t, i, o.value), s) {
-                var a = this;
-                t.$once("pre-hook:created", function() {
-                    a.childWatcher = new Ut(t, n, function(t) {
-                        o.set(t);
-                    }, {
-                        sync: !0
-                    });
-                });
-            }
-        },
-        unbind: function() {
-            this.parentWatcher.teardown(), this.childWatcher && this.childWatcher.teardown();
-        }
-    }, Ns = [], js = !1, Es = "transition", Ss = "animation", Ds = Ui + "Duration", Fs = qi + "Duration", Ps = Li && window.requestAnimationFrame, Rs = Ps ? function(t) {
-        Ps(function() {
-            Ps(t);
-        });
-    } : function(t) {
-        setTimeout(t, 50);
-    }, Ls = De.prototype;
-    Ls.enter = function(t, e) {
-        this.cancelPending(), this.callHook("beforeEnter"), this.cb = e, G(this.el, this.enterClass), 
-        t(), this.entered = !1, this.callHookWithCb("enter"), this.entered || (this.cancel = this.hooks && this.hooks.enterCancelled, 
-        Ee(this.enterNextTick));
-    }, Ls.enterNextTick = function() {
-        var t = this;
-        this.justEntered = !0, Rs(function() {
-            t.justEntered = !1;
-        });
-        var e = this.enterDone, i = this.getCssTransitionType(this.enterClass);
-        this.pendingJsCb ? i === Es && X(this.el, this.enterClass) : i === Es ? (X(this.el, this.enterClass), 
-        this.setupCssCb(zi, e)) : i === Ss ? this.setupCssCb(Ji, e) : e();
-    }, Ls.enterDone = function() {
-        this.entered = !0, this.cancel = this.pendingJsCb = null, X(this.el, this.enterClass), 
-        this.callHook("afterEnter"), this.cb && this.cb();
-    }, Ls.leave = function(t, e) {
-        this.cancelPending(), this.callHook("beforeLeave"), this.op = t, this.cb = e, G(this.el, this.leaveClass), 
-        this.left = !1, this.callHookWithCb("leave"), this.left || (this.cancel = this.hooks && this.hooks.leaveCancelled, 
-        this.op && !this.pendingJsCb && (this.justEntered ? this.leaveDone() : Ee(this.leaveNextTick)));
-    }, Ls.leaveNextTick = function() {
-        var t = this.getCssTransitionType(this.leaveClass);
-        if (t) {
-            var e = t === Es ? zi : Ji;
-            this.setupCssCb(e, this.leaveDone);
-        } else this.leaveDone();
-    }, Ls.leaveDone = function() {
-        this.left = !0, this.cancel = this.pendingJsCb = null, this.op(), X(this.el, this.leaveClass), 
-        this.callHook("afterLeave"), this.cb && this.cb(), this.op = null;
-    }, Ls.cancelPending = function() {
-        this.op = this.cb = null;
-        var t = !1;
-        this.pendingCssCb && (t = !0, Y(this.el, this.pendingCssEvent, this.pendingCssCb), 
-        this.pendingCssEvent = this.pendingCssCb = null), this.pendingJsCb && (t = !0, this.pendingJsCb.cancel(), 
-        this.pendingJsCb = null), t && (X(this.el, this.enterClass), X(this.el, this.leaveClass)), 
-        this.cancel && (this.cancel.call(this.vm, this.el), this.cancel = null);
-    }, Ls.callHook = function(t) {
-        this.hooks && this.hooks[t] && this.hooks[t].call(this.vm, this.el);
-    }, Ls.callHookWithCb = function(t) {
-        var e = this.hooks && this.hooks[t];
-        e && (e.length > 1 && (this.pendingJsCb = w(this[t + "Done"])), e.call(this.vm, this.el, this.pendingJsCb));
-    }, Ls.getCssTransitionType = function(t) {
-        if (!(!zi || document.hidden || this.hooks && this.hooks.css === !1 || Fe(this.el))) {
-            var e = this.type || this.typeCache[t];
-            if (e) return e;
-            var i = this.el.style, n = window.getComputedStyle(this.el), r = i[Ds] || n[Ds];
-            if (r && "0s" !== r) e = Es; else {
-                var s = i[Fs] || n[Fs];
-                s && "0s" !== s && (e = Ss);
-            }
-            return e && (this.typeCache[t] = e), e;
-        }
-    }, Ls.setupCssCb = function(t, e) {
-        this.pendingCssEvent = t;
-        var i = this, n = this.el, r = this.pendingCssCb = function(s) {
-            s.target === n && (Y(n, t, r), i.pendingCssEvent = i.pendingCssCb = null, !i.pendingJsCb && e && e());
-        };
-        J(n, t, r);
-    };
-    var Is = {
-        priority: Hr,
-        update: function(t, e) {
-            var i = this.el, n = gt(this.vm.$options, "transitions", t);
-            t = t || "v", i.__v_trans = new De(i, t, n, this.vm), e && X(i, e + "-transition"), 
-            G(i, t + "-transition");
-        }
-    }, Hs = {
-        style: ls,
-        "class": ws,
-        component: Cs,
-        prop: Os,
-        transition: Is
-    }, Ms = /^v-bind:|^:/, Ws = /^v-on:|^@/, Vs = /^v-([^:]+)(?:$|:(.*)$)/, Bs = /\.[^\.]+/g, Us = /^(v-bind:|:)?transition$/, zs = 1e3, qs = 2e3;
-    Ke.terminal = !0;
-    var Js = /[^\w\-:\.]/, Ys = Object.freeze({
-        compile: Pe,
-        compileAndLinkProps: Me,
-        compileRoot: We,
-        transclude: oi,
-        resolveSlots: ci
-    }), Qs = /^v-on:|^@/;
-    vi.prototype._bind = function() {
-        var t = this.name, e = this.descriptor;
-        if (("cloak" !== t || this.vm._isCompiled) && this.el && this.el.removeAttribute) {
-            var i = e.attr || "v-" + t;
-            this.el.removeAttribute(i);
-        }
-        var n = e.def;
-        if ("function" == typeof n ? this.update = n : v(this, n), this._setupParams(), 
-        this.bind && this.bind(), this._bound = !0, this.literal) this.update && this.update(e.raw); else if ((this.expression || this.modifiers) && (this.update || this.twoWay) && !this._checkStatement()) {
-            var r = this;
-            this.update ? this._update = function(t, e) {
-                r._locked || r.update(t, e);
-            } : this._update = di;
-            var s = this._preProcess ? p(this._preProcess, this) : null, o = this._postProcess ? p(this._postProcess, this) : null, a = this._watcher = new Ut(this.vm, this.expression, this._update, {
-                filters: this.filters,
-                twoWay: this.twoWay,
-                deep: this.deep,
-                preProcess: s,
-                postProcess: o,
-                scope: this._scope
-            });
-            this.afterBind ? this.afterBind() : this.update && this.update(a.value);
-        }
-    }, vi.prototype._setupParams = function() {
-        if (this.params) {
-            var t = this.params;
-            this.params = Object.create(null);
-            for (var e, i, n, r = t.length; r--; ) e = u(t[r]), n = l(e), i = M(this.el, e), 
-            null != i ? this._setupParamWatcher(n, i) : (i = H(this.el, e), null != i && (this.params[n] = "" === i || i));
-        }
-    }, vi.prototype._setupParamWatcher = function(t, e) {
-        var i = this, n = !1, r = (this._scope || this.vm).$watch(e, function(e, r) {
-            if (i.params[t] = e, n) {
-                var s = i.paramWatchers && i.paramWatchers[t];
-                s && s.call(i, e, r);
-            } else n = !0;
-        }, {
-            immediate: !0,
-            user: !1
-        });
-        (this._paramUnwatchFns || (this._paramUnwatchFns = [])).push(r);
-    }, vi.prototype._checkStatement = function() {
-        var t = this.expression;
-        if (t && this.acceptStatement && !Ht(t)) {
-            var e = It(t).get, i = this._scope || this.vm, n = function(t) {
-                i.$event = t, e.call(i, i), i.$event = null;
-            };
-            return this.filters && (n = i._applyFilters(n, null, this.filters)), this.update(n), 
-            !0;
-        }
-    }, vi.prototype.set = function(t) {
-        this.twoWay ? this._withLock(function() {
-            this._watcher.set(t);
-        }) : xn("Directive.set() can only be used inside twoWaydirectives.");
-    }, vi.prototype._withLock = function(t) {
-        var e = this;
-        e._locked = !0, t.call(e), Zi(function() {
-            e._locked = !1;
-        });
-    }, vi.prototype.on = function(t, e, i) {
-        J(this.el, t, e, i), (this._listeners || (this._listeners = [])).push([ t, e ]);
-    }, vi.prototype._teardown = function() {
-        if (this._bound) {
-            this._bound = !1, this.unbind && this.unbind(), this._watcher && this._watcher.teardown();
-            var t, e = this._listeners;
-            if (e) for (t = e.length; t--; ) Y(this.el, e[t][0], e[t][1]);
-            var i = this._paramUnwatchFns;
-            if (i) for (t = i.length; t--; ) i[t]();
-            this.el && this.el._vue_directives.$remove(this), this.vm = this.el = this._watcher = this._listeners = null;
-        }
-    };
-    var Zs = /[^|]\|[^|]/;
-    xt(Ci), fi(Ci), pi(Ci), mi(Ci), gi(Ci), _i(Ci), bi(Ci), yi(Ci), wi(Ci);
-    var Gs = {
-        priority: zr,
-        params: [ "name" ],
-        bind: function() {
-            var t = this.params.name || "default", e = this.vm._slotContents && this.vm._slotContents[t];
-            e && e.hasChildNodes() ? this.compile(e.cloneNode(!0), this.vm._context, this.vm) : this.fallback();
-        },
-        compile: function(t, e, i) {
-            if (t && e) {
-                if (this.el.hasChildNodes() && 1 === t.childNodes.length && 1 === t.childNodes[0].nodeType && t.childNodes[0].hasAttribute("v-if")) {
-                    var n = document.createElement("template");
-                    n.setAttribute("v-else", ""), n.innerHTML = this.el.innerHTML, n._context = this.vm, 
-                    t.appendChild(n);
-                }
-                var r = i ? i._scope : this._scope;
-                this.unlink = e.$compile(t, i, r, this._frag);
-            }
-            t ? q(this.el, t) : U(this.el);
-        },
-        fallback: function() {
-            this.compile(K(this.el, !0), this.vm);
-        },
-        unbind: function() {
-            this.unlink && this.unlink();
-        }
-    }, Xs = {
-        priority: Vr,
-        params: [ "name" ],
-        paramWatchers: {
-            name: function(t) {
-                Yr.remove.call(this), t && this.insert(t);
-            }
-        },
-        bind: function() {
-            this.anchor = nt("v-partial"), q(this.el, this.anchor), this.insert(this.params.name);
-        },
-        insert: function(t) {
-            var e = gt(this.vm.$options, "partials", t, !0);
-            e && (this.factory = new re(this.vm, e), Yr.insert.call(this));
-        },
-        unbind: function() {
-            this.frag && this.frag.destroy();
-        }
-    }, Ks = {
-        slot: Gs,
-        partial: Xs
-    }, to = Jr._postProcess, eo = /(\d{3})(?=\d)/g, io = {
-        orderBy: xi,
-        filterBy: ki,
-        limitBy: $i,
-        json: {
-            read: function(t, e) {
-                return "string" == typeof t ? t : JSON.stringify(t, null, Number(e) || 2);
-            },
-            write: function(t) {
-                try {
-                    return JSON.parse(t);
-                } catch (e) {
-                    return t;
-                }
-            }
-        },
-        capitalize: function(t) {
-            return t || 0 === t ? (t = t.toString(), t.charAt(0).toUpperCase() + t.slice(1)) : "";
-        },
-        uppercase: function(t) {
-            return t || 0 === t ? t.toString().toUpperCase() : "";
-        },
-        lowercase: function(t) {
-            return t || 0 === t ? t.toString().toLowerCase() : "";
-        },
-        currency: function(t, e, i) {
-            if (t = parseFloat(t), !isFinite(t) || !t && 0 !== t) return "";
-            e = null != e ? e : "$", i = null != i ? i : 2;
-            var n = Math.abs(t).toFixed(i), r = i ? n.slice(0, -1 - i) : n, s = r.length % 3, o = s > 0 ? r.slice(0, s) + (r.length > 3 ? "," : "") : "", a = i ? n.slice(-1 - i) : "", h = t < 0 ? "-" : "";
-            return h + e + o + r.slice(s).replace(eo, "$1,") + a;
-        },
-        pluralize: function(t) {
-            var e = d(arguments, 1);
-            return e.length > 1 ? e[t % 10 - 1] || e[e.length - 1] : e[0] + (1 === t ? "" : "s");
-        },
-        debounce: function(t, e) {
-            if (t) return e || (e = 300), b(t, e);
-        }
-    };
-    return Ti(Ci), Ci.version = "1.0.24", setTimeout(function() {
-        kn.devtools && (Ii ? Ii.emit("init", Ci) : Li && /Chrome\/\d+/.test(window.navigator.userAgent) && console.log("Download the Vue Devtools for a better development experience:\nhttps://github.com/vuejs/vue-devtools"));
-    }, 0), Ci;
-});
-(function(e) {
-    function t(e, t, n) {
-        switch (arguments.length) {
-          case 2:
-            return null != e ? e : t;
-
-          case 3:
-            return null != e ? e : null != t ? t : n;
-
-          default:
-            throw new Error("Implement me");
-        }
-    }
-    function n() {
-        return {
-            empty: !1,
-            unusedTokens: [],
-            unusedInput: [],
-            overflow: -2,
-            charsLeftOver: 0,
-            nullInput: !1,
-            invalidMonth: null,
-            invalidFormat: !1,
-            userInvalidated: !1,
-            iso: !1
-        };
-    }
-    function r(e, t) {
-        function n() {
-            he.suppressDeprecationWarnings === !1 && "undefined" != typeof console && console.warn && console.warn("Deprecation warning: " + e);
-        }
-        var r = !0;
-        return d(function() {
-            return r && (n(), r = !1), t.apply(this, arguments);
-        }, t);
-    }
-    function s(e, t) {
-        return function(n) {
-            return h(e.call(this, n), t);
-        };
-    }
-    function a(e, t) {
-        return function(n) {
-            return this.lang().ordinal(e.call(this, n), t);
-        };
-    }
-    function i() {}
-    function o(e) {
-        b(e), d(this, e);
-    }
-    function u(e) {
-        var t = g(e), n = t.year || 0, r = t.quarter || 0, s = t.month || 0, a = t.week || 0, i = t.day || 0, o = t.hour || 0, u = t.minute || 0, d = t.second || 0, c = t.millisecond || 0;
-        this._milliseconds = +c + 1e3 * d + 6e4 * u + 36e5 * o, this._days = +i + 7 * a, 
-        this._months = +s + 3 * r + 12 * n, this._data = {}, this._bubble();
-    }
-    function d(e, t) {
-        for (var n in t) t.hasOwnProperty(n) && (e[n] = t[n]);
-        return t.hasOwnProperty("toString") && (e.toString = t.toString), t.hasOwnProperty("valueOf") && (e.valueOf = t.valueOf), 
-        e;
-    }
-    function c(e) {
-        var t, n = {};
-        for (t in e) e.hasOwnProperty(t) && Se.hasOwnProperty(t) && (n[t] = e[t]);
-        return n;
-    }
-    function f(e) {
-        return e < 0 ? Math.ceil(e) : Math.floor(e);
-    }
-    function h(e, t, n) {
-        for (var r = "" + Math.abs(e), s = e >= 0; r.length < t; ) r = "0" + r;
-        return (s ? n ? "+" : "" : "-") + r;
-    }
-    function l(e, t, n, r) {
-        var s = t._milliseconds, a = t._days, i = t._months;
-        r = null == r || r, s && e._d.setTime(+e._d + s * n), a && oe(e, "Date", ie(e, "Date") + a * n), 
-        i && ae(e, ie(e, "Month") + i * n), r && he.updateOffset(e, a || i);
-    }
-    function _(e) {
-        return "[object Array]" === Object.prototype.toString.call(e);
-    }
-    function m(e) {
-        return "[object Date]" === Object.prototype.toString.call(e) || e instanceof Date;
-    }
-    function y(e, t, n) {
-        var r, s = Math.min(e.length, t.length), a = Math.abs(e.length - t.length), i = 0;
-        for (r = 0; r < s; r++) (n && e[r] !== t[r] || !n && w(e[r]) !== w(t[r])) && i++;
-        return i + a;
-    }
-    function p(e) {
-        if (e) {
-            var t = e.toLowerCase().replace(/(.)s$/, "$1");
-            e = tt[e] || nt[t] || t;
-        }
-        return e;
-    }
-    function g(e) {
-        var t, n, r = {};
-        for (n in e) e.hasOwnProperty(n) && (t = p(n), t && (r[t] = e[n]));
-        return r;
-    }
-    function Y(t) {
-        var n, r;
-        if (0 === t.indexOf("week")) n = 7, r = "day"; else {
-            if (0 !== t.indexOf("month")) return;
-            n = 12, r = "month";
-        }
-        he[t] = function(s, a) {
-            var i, o, u = he.fn._lang[t], d = [];
-            if ("number" == typeof s && (a = s, s = e), o = function(e) {
-                var t = he().utc().set(r, e);
-                return u.call(he.fn._lang, t, s || "");
-            }, null != a) return o(a);
-            for (i = 0; i < n; i++) d.push(o(i));
-            return d;
-        };
-    }
-    function w(e) {
-        var t = +e, n = 0;
-        return 0 !== t && isFinite(t) && (n = t >= 0 ? Math.floor(t) : Math.ceil(t)), n;
-    }
-    function M(e, t) {
-        return new Date(Date.UTC(e, t + 1, 0)).getUTCDate();
-    }
-    function D(e, t, n) {
-        return te(he([ e, 11, 31 + t - n ]), t, n).week;
-    }
-    function v(e) {
-        return k(e) ? 366 : 365;
-    }
-    function k(e) {
-        return e % 4 === 0 && e % 100 !== 0 || e % 400 === 0;
-    }
-    function b(e) {
-        var t;
-        e._a && e._pf.overflow === -2 && (t = e._a[Ye] < 0 || e._a[Ye] > 11 ? Ye : e._a[we] < 1 || e._a[we] > M(e._a[ge], e._a[Ye]) ? we : e._a[Me] < 0 || e._a[Me] > 23 ? Me : e._a[De] < 0 || e._a[De] > 59 ? De : e._a[ve] < 0 || e._a[ve] > 59 ? ve : e._a[ke] < 0 || e._a[ke] > 999 ? ke : -1, 
-        e._pf._overflowDayOfYear && (t < ge || t > we) && (t = we), e._pf.overflow = t);
-    }
-    function S(e) {
-        return null == e._isValid && (e._isValid = !isNaN(e._d.getTime()) && e._pf.overflow < 0 && !e._pf.empty && !e._pf.invalidMonth && !e._pf.nullInput && !e._pf.invalidFormat && !e._pf.userInvalidated, 
-        e._strict && (e._isValid = e._isValid && 0 === e._pf.charsLeftOver && 0 === e._pf.unusedTokens.length)), 
-        e._isValid;
-    }
-    function T(e) {
-        return e ? e.toLowerCase().replace("_", "-") : e;
-    }
-    function O(e, t) {
-        return t._isUTC ? he(e).zone(t._offset || 0) : he(e).local();
-    }
-    function W(e, t) {
-        return t.abbr = e, be[e] || (be[e] = new i()), be[e].set(t), be[e];
-    }
-    function G(e) {
-        delete be[e];
-    }
-    function F(e) {
-        var t, n, r, s, a = 0, i = function(e) {
-            if (!be[e] && Te) try {
-                require("./lang/" + e);
-            } catch (t) {}
-            return be[e];
-        };
-        if (!e) return he.fn._lang;
-        if (!_(e)) {
-            if (n = i(e)) return n;
-            e = [ e ];
-        }
-        for (;a < e.length; ) {
-            for (s = T(e[a]).split("-"), t = s.length, r = T(e[a + 1]), r = r ? r.split("-") : null; t > 0; ) {
-                if (n = i(s.slice(0, t).join("-"))) return n;
-                if (r && r.length >= t && y(s, r, !0) >= t - 1) break;
-                t--;
-            }
-            a++;
-        }
-        return he.fn._lang;
-    }
-    function C(e) {
-        return e.match(/\[[\s\S]/) ? e.replace(/^\[|\]$/g, "") : e.replace(/\\/g, "");
-    }
-    function P(e) {
-        var t, n, r = e.match(Fe);
-        for (t = 0, n = r.length; t < n; t++) ot[r[t]] ? r[t] = ot[r[t]] : r[t] = C(r[t]);
-        return function(s) {
-            var a = "";
-            for (t = 0; t < n; t++) a += r[t] instanceof Function ? r[t].call(s, e) : r[t];
-            return a;
-        };
-    }
-    function U(e, t) {
-        return e.isValid() ? (t = z(t, e.lang()), rt[t] || (rt[t] = P(t)), rt[t](e)) : e.lang().invalidDate();
-    }
-    function z(e, t) {
-        function n(e) {
-            return t.longDateFormat(e) || e;
-        }
-        var r = 5;
-        for (Ce.lastIndex = 0; r >= 0 && Ce.test(e); ) e = e.replace(Ce, n), Ce.lastIndex = 0, 
-        r -= 1;
-        return e;
-    }
-    function L(e, t) {
-        var n, r = t._strict;
-        switch (e) {
-          case "Q":
-            return Ee;
-
-          case "DDDD":
-            return Ve;
-
-          case "YYYY":
-          case "GGGG":
-          case "gggg":
-            return r ? qe : ze;
-
-          case "Y":
-          case "G":
-          case "g":
-            return Je;
-
-          case "YYYYYY":
-          case "YYYYY":
-          case "GGGGG":
-          case "ggggg":
-            return r ? $e : Le;
-
-          case "S":
-            if (r) return Ee;
-
-          case "SS":
-            if (r) return je;
-
-          case "SSS":
-            if (r) return Ve;
-
-          case "DDD":
-            return Ue;
-
-          case "MMM":
-          case "MMMM":
-          case "dd":
-          case "ddd":
-          case "dddd":
-            return Ie;
-
-          case "a":
-          case "A":
-            return F(t._l)._meridiemParse;
-
-          case "X":
-            return Ne;
-
-          case "Z":
-          case "ZZ":
-            return xe;
-
-          case "T":
-            return Ae;
-
-          case "SSSS":
-            return He;
-
-          case "MM":
-          case "DD":
-          case "YY":
-          case "GG":
-          case "gg":
-          case "HH":
-          case "hh":
-          case "mm":
-          case "ss":
-          case "ww":
-          case "WW":
-            return r ? je : Pe;
-
-          case "M":
-          case "D":
-          case "d":
-          case "H":
-          case "h":
-          case "m":
-          case "s":
-          case "w":
-          case "W":
-          case "e":
-          case "E":
-            return Pe;
-
-          case "Do":
-            return Ze;
-
-          default:
-            return n = new RegExp(V(j(e.replace("\\", "")), "i"));
-        }
-    }
-    function H(e) {
-        e = e || "";
-        var t = e.match(xe) || [], n = t[t.length - 1] || [], r = (n + "").match(Ke) || [ "-", 0, 0 ], s = +(60 * r[1]) + w(r[2]);
-        return "+" === r[0] ? -s : s;
-    }
-    function I(e, t, n) {
-        var r, s = n._a;
-        switch (e) {
-          case "Q":
-            null != t && (s[Ye] = 3 * (w(t) - 1));
-            break;
-
-          case "M":
-          case "MM":
-            null != t && (s[Ye] = w(t) - 1);
-            break;
-
-          case "MMM":
-          case "MMMM":
-            r = F(n._l).monthsParse(t), null != r ? s[Ye] = r : n._pf.invalidMonth = t;
-            break;
-
-          case "D":
-          case "DD":
-            null != t && (s[we] = w(t));
-            break;
-
-          case "Do":
-            null != t && (s[we] = w(parseInt(t, 10)));
-            break;
-
-          case "DDD":
-          case "DDDD":
-            null != t && (n._dayOfYear = w(t));
-            break;
-
-          case "YY":
-            s[ge] = he.parseTwoDigitYear(t);
-            break;
-
-          case "YYYY":
-          case "YYYYY":
-          case "YYYYYY":
-            s[ge] = w(t);
-            break;
-
-          case "a":
-          case "A":
-            n._isPm = F(n._l).isPM(t);
-            break;
-
-          case "H":
-          case "HH":
-          case "h":
-          case "hh":
-            s[Me] = w(t);
-            break;
-
-          case "m":
-          case "mm":
-            s[De] = w(t);
-            break;
-
-          case "s":
-          case "ss":
-            s[ve] = w(t);
-            break;
-
-          case "S":
-          case "SS":
-          case "SSS":
-          case "SSSS":
-            s[ke] = w(1e3 * ("0." + t));
-            break;
-
-          case "X":
-            n._d = new Date(1e3 * parseFloat(t));
-            break;
-
-          case "Z":
-          case "ZZ":
-            n._useUTC = !0, n._tzm = H(t);
-            break;
-
-          case "dd":
-          case "ddd":
-          case "dddd":
-            r = F(n._l).weekdaysParse(t), null != r ? (n._w = n._w || {}, n._w.d = r) : n._pf.invalidWeekday = t;
-            break;
-
-          case "w":
-          case "ww":
-          case "W":
-          case "WW":
-          case "d":
-          case "e":
-          case "E":
-            e = e.substr(0, 1);
-
-          case "gggg":
-          case "GGGG":
-          case "GGGGG":
-            e = e.substr(0, 2), t && (n._w = n._w || {}, n._w[e] = w(t));
-            break;
-
-          case "gg":
-          case "GG":
-            n._w = n._w || {}, n._w[e] = he.parseTwoDigitYear(t);
-        }
-    }
-    function x(e) {
-        var n, r, s, a, i, o, u, d;
-        n = e._w, null != n.GG || null != n.W || null != n.E ? (i = 1, o = 4, r = t(n.GG, e._a[ge], te(he(), 1, 4).year), 
-        s = t(n.W, 1), a = t(n.E, 1)) : (d = F(e._l), i = d._week.dow, o = d._week.doy, 
-        r = t(n.gg, e._a[ge], te(he(), i, o).year), s = t(n.w, 1), null != n.d ? (a = n.d, 
-        a < i && ++s) : a = null != n.e ? n.e + i : i), u = ne(r, s, a, o, i), e._a[ge] = u.year, 
-        e._dayOfYear = u.dayOfYear;
-    }
-    function A(e) {
-        var n, r, s, a, i = [];
-        if (!e._d) {
-            for (s = Z(e), e._w && null == e._a[we] && null == e._a[Ye] && x(e), e._dayOfYear && (a = t(e._a[ge], s[ge]), 
-            e._dayOfYear > v(a) && (e._pf._overflowDayOfYear = !0), r = R(a, 0, e._dayOfYear), 
-            e._a[Ye] = r.getUTCMonth(), e._a[we] = r.getUTCDate()), n = 0; n < 3 && null == e._a[n]; ++n) e._a[n] = i[n] = s[n];
-            for (;n < 7; n++) e._a[n] = i[n] = null == e._a[n] ? 2 === n ? 1 : 0 : e._a[n];
-            e._d = (e._useUTC ? R : X).apply(null, i), null != e._tzm && e._d.setUTCMinutes(e._d.getUTCMinutes() + e._tzm);
-        }
-    }
-    function N(e) {
-        var t;
-        e._d || (t = g(e._i), e._a = [ t.year, t.month, t.day, t.hour, t.minute, t.second, t.millisecond ], 
-        A(e));
-    }
-    function Z(e) {
-        var t = new Date();
-        return e._useUTC ? [ t.getUTCFullYear(), t.getUTCMonth(), t.getUTCDate() ] : [ t.getFullYear(), t.getMonth(), t.getDate() ];
-    }
-    function E(e) {
-        if (e._f === he.ISO_8601) return void $(e);
-        e._a = [], e._pf.empty = !0;
-        var t, n, r, s, a, i = F(e._l), o = "" + e._i, u = o.length, d = 0;
-        for (r = z(e._f, i).match(Fe) || [], t = 0; t < r.length; t++) s = r[t], n = (o.match(L(s, e)) || [])[0], 
-        n && (a = o.substr(0, o.indexOf(n)), a.length > 0 && e._pf.unusedInput.push(a), 
-        o = o.slice(o.indexOf(n) + n.length), d += n.length), ot[s] ? (n ? e._pf.empty = !1 : e._pf.unusedTokens.push(s), 
-        I(s, n, e)) : e._strict && !n && e._pf.unusedTokens.push(s);
-        e._pf.charsLeftOver = u - d, o.length > 0 && e._pf.unusedInput.push(o), e._isPm && e._a[Me] < 12 && (e._a[Me] += 12), 
-        e._isPm === !1 && 12 === e._a[Me] && (e._a[Me] = 0), A(e), b(e);
-    }
-    function j(e) {
-        return e.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function(e, t, n, r, s) {
-            return t || n || r || s;
-        });
-    }
-    function V(e) {
-        return e.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
-    }
-    function q(e) {
-        var t, r, s, a, i;
-        if (0 === e._f.length) return e._pf.invalidFormat = !0, void (e._d = new Date(NaN));
-        for (a = 0; a < e._f.length; a++) i = 0, t = d({}, e), t._pf = n(), t._f = e._f[a], 
-        E(t), S(t) && (i += t._pf.charsLeftOver, i += 10 * t._pf.unusedTokens.length, t._pf.score = i, 
-        (null == s || i < s) && (s = i, r = t));
-        d(e, r || t);
-    }
-    function $(e) {
-        var t, n, r = e._i, s = Qe.exec(r);
-        if (s) {
-            for (e._pf.iso = !0, t = 0, n = Re.length; t < n; t++) if (Re[t][1].exec(r)) {
-                e._f = Re[t][0] + (s[6] || " ");
-                break;
-            }
-            for (t = 0, n = Be.length; t < n; t++) if (Be[t][1].exec(r)) {
-                e._f += Be[t][0];
-                break;
-            }
-            r.match(xe) && (e._f += "Z"), E(e);
-        } else e._isValid = !1;
-    }
-    function J(e) {
-        $(e), e._isValid === !1 && (delete e._isValid, he.createFromInputFallback(e));
-    }
-    function Q(t) {
-        var n = t._i, r = Oe.exec(n);
-        n === e ? t._d = new Date() : r ? t._d = new Date((+r[1])) : "string" == typeof n ? J(t) : _(n) ? (t._a = n.slice(0), 
-        A(t)) : m(n) ? t._d = new Date((+n)) : "object" == typeof n ? N(t) : "number" == typeof n ? t._d = new Date(n) : he.createFromInputFallback(t);
-    }
-    function X(e, t, n, r, s, a, i) {
-        var o = new Date(e, t, n, r, s, a, i);
-        return e < 1970 && o.setFullYear(e), o;
-    }
-    function R(e) {
-        var t = new Date(Date.UTC.apply(null, arguments));
-        return e < 1970 && t.setUTCFullYear(e), t;
-    }
-    function B(e, t) {
-        if ("string" == typeof e) if (isNaN(e)) {
-            if (e = t.weekdaysParse(e), "number" != typeof e) return null;
-        } else e = parseInt(e, 10);
-        return e;
-    }
-    function K(e, t, n, r, s) {
-        return s.relativeTime(t || 1, !!n, e, r);
-    }
-    function ee(e, t, n) {
-        var r = pe(Math.abs(e) / 1e3), s = pe(r / 60), a = pe(s / 60), i = pe(a / 24), o = pe(i / 365), u = r < st.s && [ "s", r ] || 1 === s && [ "m" ] || s < st.m && [ "mm", s ] || 1 === a && [ "h" ] || a < st.h && [ "hh", a ] || 1 === i && [ "d" ] || i <= st.dd && [ "dd", i ] || i <= st.dm && [ "M" ] || i < st.dy && [ "MM", pe(i / 30) ] || 1 === o && [ "y" ] || [ "yy", o ];
-        return u[2] = t, u[3] = e > 0, u[4] = n, K.apply({}, u);
-    }
-    function te(e, t, n) {
-        var r, s = n - t, a = n - e.day();
-        return a > s && (a -= 7), a < s - 7 && (a += 7), r = he(e).add("d", a), {
-            week: Math.ceil(r.dayOfYear() / 7),
-            year: r.year()
-        };
-    }
-    function ne(e, t, n, r, s) {
-        var a, i, o = R(e, 0, 1).getUTCDay();
-        return o = 0 === o ? 7 : o, n = null != n ? n : s, a = s - o + (o > r ? 7 : 0) - (o < s ? 7 : 0), 
-        i = 7 * (t - 1) + (n - s) + a + 1, {
-            year: i > 0 ? e : e - 1,
-            dayOfYear: i > 0 ? i : v(e - 1) + i
-        };
-    }
-    function re(t) {
-        var n = t._i, r = t._f;
-        return null === n || r === e && "" === n ? he.invalid({
-            nullInput: !0
-        }) : ("string" == typeof n && (t._i = n = F().preparse(n)), he.isMoment(n) ? (t = c(n), 
-        t._d = new Date((+n._d))) : r ? _(r) ? q(t) : E(t) : Q(t), new o(t));
-    }
-    function se(e, t) {
-        var n, r;
-        if (1 === t.length && _(t[0]) && (t = t[0]), !t.length) return he();
-        for (n = t[0], r = 1; r < t.length; ++r) t[r][e](n) && (n = t[r]);
-        return n;
-    }
-    function ae(e, t) {
-        var n;
-        return "string" == typeof t && (t = e.lang().monthsParse(t), "number" != typeof t) ? e : (n = Math.min(e.date(), M(e.year(), t)), 
-        e._d["set" + (e._isUTC ? "UTC" : "") + "Month"](t, n), e);
-    }
-    function ie(e, t) {
-        return e._d["get" + (e._isUTC ? "UTC" : "") + t]();
-    }
-    function oe(e, t, n) {
-        return "Month" === t ? ae(e, n) : e._d["set" + (e._isUTC ? "UTC" : "") + t](n);
-    }
-    function ue(e, t) {
-        return function(n) {
-            return null != n ? (oe(this, e, n), he.updateOffset(this, t), this) : ie(this, e);
-        };
-    }
-    function de(e) {
-        he.duration.fn[e] = function() {
-            return this._data[e];
-        };
-    }
-    function ce(e, t) {
-        he.duration.fn["as" + e] = function() {
-            return +this / t;
-        };
-    }
-    function fe(e) {
-        "undefined" == typeof ender && (le = ye.moment, e ? ye.moment = r("Accessing Moment through the global scope is deprecated, and will be removed in an upcoming release.", he) : ye.moment = he);
-    }
-    for (var he, le, _e, me = "2.7.0", ye = "undefined" != typeof global ? global : this, pe = Math.round, ge = 0, Ye = 1, we = 2, Me = 3, De = 4, ve = 5, ke = 6, be = {}, Se = {
-        _isAMomentObject: null,
-        _i: null,
-        _f: null,
-        _l: null,
-        _strict: null,
-        _tzm: null,
-        _isUTC: null,
-        _offset: null,
-        _pf: null,
-        _lang: null
-    }, Te = "undefined" != typeof module && module.exports, Oe = /^\/?Date\((\-?\d+)/i, We = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/, Ge = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, Fe = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g, Ce = /(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g, Pe = /\d\d?/, Ue = /\d{1,3}/, ze = /\d{1,4}/, Le = /[+\-]?\d{1,6}/, He = /\d+/, Ie = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, xe = /Z|[\+\-]\d\d:?\d\d/gi, Ae = /T/i, Ne = /[\+\-]?\d+(\.\d{1,3})?/, Ze = /\d{1,2}/, Ee = /\d/, je = /\d\d/, Ve = /\d{3}/, qe = /\d{4}/, $e = /[+-]?\d{6}/, Je = /[+-]?\d+/, Qe = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/, Xe = "YYYY-MM-DDTHH:mm:ssZ", Re = [ [ "YYYYYY-MM-DD", /[+-]\d{6}-\d{2}-\d{2}/ ], [ "YYYY-MM-DD", /\d{4}-\d{2}-\d{2}/ ], [ "GGGG-[W]WW-E", /\d{4}-W\d{2}-\d/ ], [ "GGGG-[W]WW", /\d{4}-W\d{2}/ ], [ "YYYY-DDD", /\d{4}-\d{3}/ ] ], Be = [ [ "HH:mm:ss.SSSS", /(T| )\d\d:\d\d:\d\d\.\d+/ ], [ "HH:mm:ss", /(T| )\d\d:\d\d:\d\d/ ], [ "HH:mm", /(T| )\d\d:\d\d/ ], [ "HH", /(T| )\d\d/ ] ], Ke = /([\+\-]|\d\d)/gi, et = ("Date|Hours|Minutes|Seconds|Milliseconds".split("|"), 
-    {
-        Milliseconds: 1,
-        Seconds: 1e3,
-        Minutes: 6e4,
-        Hours: 36e5,
-        Days: 864e5,
-        Months: 2592e6,
-        Years: 31536e6
-    }), tt = {
-        ms: "millisecond",
-        s: "second",
-        m: "minute",
-        h: "hour",
-        d: "day",
-        D: "date",
-        w: "week",
-        W: "isoWeek",
-        M: "month",
-        Q: "quarter",
-        y: "year",
-        DDD: "dayOfYear",
-        e: "weekday",
-        E: "isoWeekday",
-        gg: "weekYear",
-        GG: "isoWeekYear"
-    }, nt = {
-        dayofyear: "dayOfYear",
-        isoweekday: "isoWeekday",
-        isoweek: "isoWeek",
-        weekyear: "weekYear",
-        isoweekyear: "isoWeekYear"
-    }, rt = {}, st = {
-        s: 45,
-        m: 45,
-        h: 22,
-        dd: 25,
-        dm: 45,
-        dy: 345
-    }, at = "DDD w W M D d".split(" "), it = "M D H h m s w W".split(" "), ot = {
-        M: function() {
-            return this.month() + 1;
-        },
-        MMM: function(e) {
-            return this.lang().monthsShort(this, e);
-        },
-        MMMM: function(e) {
-            return this.lang().months(this, e);
-        },
-        D: function() {
-            return this.date();
-        },
-        DDD: function() {
-            return this.dayOfYear();
-        },
-        d: function() {
-            return this.day();
-        },
-        dd: function(e) {
-            return this.lang().weekdaysMin(this, e);
-        },
-        ddd: function(e) {
-            return this.lang().weekdaysShort(this, e);
-        },
-        dddd: function(e) {
-            return this.lang().weekdays(this, e);
-        },
-        w: function() {
-            return this.week();
-        },
-        W: function() {
-            return this.isoWeek();
-        },
-        YY: function() {
-            return h(this.year() % 100, 2);
-        },
-        YYYY: function() {
-            return h(this.year(), 4);
-        },
-        YYYYY: function() {
-            return h(this.year(), 5);
-        },
-        YYYYYY: function() {
-            var e = this.year(), t = e >= 0 ? "+" : "-";
-            return t + h(Math.abs(e), 6);
-        },
-        gg: function() {
-            return h(this.weekYear() % 100, 2);
-        },
-        gggg: function() {
-            return h(this.weekYear(), 4);
-        },
-        ggggg: function() {
-            return h(this.weekYear(), 5);
-        },
-        GG: function() {
-            return h(this.isoWeekYear() % 100, 2);
-        },
-        GGGG: function() {
-            return h(this.isoWeekYear(), 4);
-        },
-        GGGGG: function() {
-            return h(this.isoWeekYear(), 5);
-        },
-        e: function() {
-            return this.weekday();
-        },
-        E: function() {
-            return this.isoWeekday();
-        },
-        a: function() {
-            return this.lang().meridiem(this.hours(), this.minutes(), !0);
-        },
-        A: function() {
-            return this.lang().meridiem(this.hours(), this.minutes(), !1);
-        },
-        H: function() {
-            return this.hours();
-        },
-        h: function() {
-            return this.hours() % 12 || 12;
-        },
-        m: function() {
-            return this.minutes();
-        },
-        s: function() {
-            return this.seconds();
-        },
-        S: function() {
-            return w(this.milliseconds() / 100);
-        },
-        SS: function() {
-            return h(w(this.milliseconds() / 10), 2);
-        },
-        SSS: function() {
-            return h(this.milliseconds(), 3);
-        },
-        SSSS: function() {
-            return h(this.milliseconds(), 3);
-        },
-        Z: function() {
-            var e = -this.zone(), t = "+";
-            return e < 0 && (e = -e, t = "-"), t + h(w(e / 60), 2) + ":" + h(w(e) % 60, 2);
-        },
-        ZZ: function() {
-            var e = -this.zone(), t = "+";
-            return e < 0 && (e = -e, t = "-"), t + h(w(e / 60), 2) + h(w(e) % 60, 2);
-        },
-        z: function() {
-            return this.zoneAbbr();
-        },
-        zz: function() {
-            return this.zoneName();
-        },
-        X: function() {
-            return this.unix();
-        },
-        Q: function() {
-            return this.quarter();
-        }
-    }, ut = [ "months", "monthsShort", "weekdays", "weekdaysShort", "weekdaysMin" ]; at.length; ) _e = at.pop(), 
-    ot[_e + "o"] = a(ot[_e], _e);
-    for (;it.length; ) _e = it.pop(), ot[_e + _e] = s(ot[_e], 2);
-    for (ot.DDDD = s(ot.DDD, 3), d(i.prototype, {
-        set: function(e) {
-            var t, n;
-            for (n in e) t = e[n], "function" == typeof t ? this[n] = t : this["_" + n] = t;
-        },
-        _months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
-        months: function(e) {
-            return this._months[e.month()];
-        },
-        _monthsShort: "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
-        monthsShort: function(e) {
-            return this._monthsShort[e.month()];
-        },
-        monthsParse: function(e) {
-            var t, n, r;
-            for (this._monthsParse || (this._monthsParse = []), t = 0; t < 12; t++) if (this._monthsParse[t] || (n = he.utc([ 2e3, t ]), 
-            r = "^" + this.months(n, "") + "|^" + this.monthsShort(n, ""), this._monthsParse[t] = new RegExp(r.replace(".", ""), "i")), 
-            this._monthsParse[t].test(e)) return t;
-        },
-        _weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
-        weekdays: function(e) {
-            return this._weekdays[e.day()];
-        },
-        _weekdaysShort: "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
-        weekdaysShort: function(e) {
-            return this._weekdaysShort[e.day()];
-        },
-        _weekdaysMin: "Su_Mo_Tu_We_Th_Fr_Sa".split("_"),
-        weekdaysMin: function(e) {
-            return this._weekdaysMin[e.day()];
-        },
-        weekdaysParse: function(e) {
-            var t, n, r;
-            for (this._weekdaysParse || (this._weekdaysParse = []), t = 0; t < 7; t++) if (this._weekdaysParse[t] || (n = he([ 2e3, 1 ]).day(t), 
-            r = "^" + this.weekdays(n, "") + "|^" + this.weekdaysShort(n, "") + "|^" + this.weekdaysMin(n, ""), 
-            this._weekdaysParse[t] = new RegExp(r.replace(".", ""), "i")), this._weekdaysParse[t].test(e)) return t;
-        },
-        _longDateFormat: {
-            LT: "h:mm A",
-            L: "MM/DD/YYYY",
-            LL: "MMMM D YYYY",
-            LLL: "MMMM D YYYY LT",
-            LLLL: "dddd, MMMM D YYYY LT"
-        },
-        longDateFormat: function(e) {
-            var t = this._longDateFormat[e];
-            return !t && this._longDateFormat[e.toUpperCase()] && (t = this._longDateFormat[e.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function(e) {
-                return e.slice(1);
-            }), this._longDateFormat[e] = t), t;
-        },
-        isPM: function(e) {
-            return "p" === (e + "").toLowerCase().charAt(0);
-        },
-        _meridiemParse: /[ap]\.?m?\.?/i,
-        meridiem: function(e, t, n) {
-            return e > 11 ? n ? "pm" : "PM" : n ? "am" : "AM";
-        },
-        _calendar: {
-            sameDay: "[Today at] LT",
-            nextDay: "[Tomorrow at] LT",
-            nextWeek: "dddd [at] LT",
-            lastDay: "[Yesterday at] LT",
-            lastWeek: "[Last] dddd [at] LT",
-            sameElse: "L"
-        },
-        calendar: function(e, t) {
-            var n = this._calendar[e];
-            return "function" == typeof n ? n.apply(t) : n;
-        },
-        _relativeTime: {
-            future: "in %s",
-            past: "%s ago",
-            s: "a few seconds",
-            m: "a minute",
-            mm: "%d minutes",
-            h: "an hour",
-            hh: "%d hours",
-            d: "a day",
-            dd: "%d days",
-            M: "a month",
-            MM: "%d months",
-            y: "a year",
-            yy: "%d years"
-        },
-        relativeTime: function(e, t, n, r) {
-            var s = this._relativeTime[n];
-            return "function" == typeof s ? s(e, t, n, r) : s.replace(/%d/i, e);
-        },
-        pastFuture: function(e, t) {
-            var n = this._relativeTime[e > 0 ? "future" : "past"];
-            return "function" == typeof n ? n(t) : n.replace(/%s/i, t);
-        },
-        ordinal: function(e) {
-            return this._ordinal.replace("%d", e);
-        },
-        _ordinal: "%d",
-        preparse: function(e) {
-            return e;
-        },
-        postformat: function(e) {
-            return e;
-        },
-        week: function(e) {
-            return te(e, this._week.dow, this._week.doy).week;
-        },
-        _week: {
-            dow: 0,
-            doy: 6
-        },
-        _invalidDate: "Invalid date",
-        invalidDate: function() {
-            return this._invalidDate;
-        }
-    }), he = function(t, r, s, a) {
-        var i;
-        return "boolean" == typeof s && (a = s, s = e), i = {}, i._isAMomentObject = !0, 
-        i._i = t, i._f = r, i._l = s, i._strict = a, i._isUTC = !1, i._pf = n(), re(i);
-    }, he.suppressDeprecationWarnings = !1, he.createFromInputFallback = r("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.", function(e) {
-        e._d = new Date(e._i);
-    }), he.min = function() {
-        var e = [].slice.call(arguments, 0);
-        return se("isBefore", e);
-    }, he.max = function() {
-        var e = [].slice.call(arguments, 0);
-        return se("isAfter", e);
-    }, he.utc = function(t, r, s, a) {
-        var i;
-        return "boolean" == typeof s && (a = s, s = e), i = {}, i._isAMomentObject = !0, 
-        i._useUTC = !0, i._isUTC = !0, i._l = s, i._i = t, i._f = r, i._strict = a, i._pf = n(), 
-        re(i).utc();
-    }, he.unix = function(e) {
-        return he(1e3 * e);
-    }, he.duration = function(e, t) {
-        var n, r, s, a = e, i = null;
-        return he.isDuration(e) ? a = {
-            ms: e._milliseconds,
-            d: e._days,
-            M: e._months
-        } : "number" == typeof e ? (a = {}, t ? a[t] = e : a.milliseconds = e) : (i = We.exec(e)) ? (n = "-" === i[1] ? -1 : 1, 
-        a = {
-            y: 0,
-            d: w(i[we]) * n,
-            h: w(i[Me]) * n,
-            m: w(i[De]) * n,
-            s: w(i[ve]) * n,
-            ms: w(i[ke]) * n
-        }) : (i = Ge.exec(e)) && (n = "-" === i[1] ? -1 : 1, s = function(e) {
-            var t = e && parseFloat(e.replace(",", "."));
-            return (isNaN(t) ? 0 : t) * n;
-        }, a = {
-            y: s(i[2]),
-            M: s(i[3]),
-            d: s(i[4]),
-            h: s(i[5]),
-            m: s(i[6]),
-            s: s(i[7]),
-            w: s(i[8])
-        }), r = new u(a), he.isDuration(e) && e.hasOwnProperty("_lang") && (r._lang = e._lang), 
-        r;
-    }, he.version = me, he.defaultFormat = Xe, he.ISO_8601 = function() {}, he.momentProperties = Se, 
-    he.updateOffset = function() {}, he.relativeTimeThreshold = function(t, n) {
-        return st[t] !== e && (st[t] = n, !0);
-    }, he.lang = function(e, t) {
-        var n;
-        return e ? (t ? W(T(e), t) : null === t ? (G(e), e = "en") : be[e] || F(e), n = he.duration.fn._lang = he.fn._lang = F(e), 
-        n._abbr) : he.fn._lang._abbr;
-    }, he.langData = function(e) {
-        return e && e._lang && e._lang._abbr && (e = e._lang._abbr), F(e);
-    }, he.isMoment = function(e) {
-        return e instanceof o || null != e && e.hasOwnProperty("_isAMomentObject");
-    }, he.isDuration = function(e) {
-        return e instanceof u;
-    }, _e = ut.length - 1; _e >= 0; --_e) Y(ut[_e]);
-    he.normalizeUnits = function(e) {
-        return p(e);
-    }, he.invalid = function(e) {
-        var t = he.utc(NaN);
-        return null != e ? d(t._pf, e) : t._pf.userInvalidated = !0, t;
-    }, he.parseZone = function() {
-        return he.apply(null, arguments).parseZone();
-    }, he.parseTwoDigitYear = function(e) {
-        return w(e) + (w(e) > 68 ? 1900 : 2e3);
-    }, d(he.fn = o.prototype, {
-        clone: function() {
-            return he(this);
-        },
-        valueOf: function() {
-            return +this._d + 6e4 * (this._offset || 0);
-        },
-        unix: function() {
-            return Math.floor(+this / 1e3);
-        },
-        toString: function() {
-            return this.clone().lang("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ");
-        },
-        toDate: function() {
-            return this._offset ? new Date((+this)) : this._d;
-        },
-        toISOString: function() {
-            var e = he(this).utc();
-            return 0 < e.year() && e.year() <= 9999 ? U(e, "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]") : U(e, "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]");
-        },
-        toArray: function() {
-            var e = this;
-            return [ e.year(), e.month(), e.date(), e.hours(), e.minutes(), e.seconds(), e.milliseconds() ];
-        },
-        isValid: function() {
-            return S(this);
-        },
-        isDSTShifted: function() {
-            return !!this._a && (this.isValid() && y(this._a, (this._isUTC ? he.utc(this._a) : he(this._a)).toArray()) > 0);
-        },
-        parsingFlags: function() {
-            return d({}, this._pf);
-        },
-        invalidAt: function() {
-            return this._pf.overflow;
-        },
-        utc: function() {
-            return this.zone(0);
-        },
-        local: function() {
-            return this.zone(0), this._isUTC = !1, this;
-        },
-        format: function(e) {
-            var t = U(this, e || he.defaultFormat);
-            return this.lang().postformat(t);
-        },
-        add: function(e, t) {
-            var n;
-            return n = "string" == typeof e && "string" == typeof t ? he.duration(isNaN(+t) ? +e : +t, isNaN(+t) ? t : e) : "string" == typeof e ? he.duration(+t, e) : he.duration(e, t), 
-            l(this, n, 1), this;
-        },
-        subtract: function(e, t) {
-            var n;
-            return n = "string" == typeof e && "string" == typeof t ? he.duration(isNaN(+t) ? +e : +t, isNaN(+t) ? t : e) : "string" == typeof e ? he.duration(+t, e) : he.duration(e, t), 
-            l(this, n, -1), this;
-        },
-        diff: function(e, t, n) {
-            var r, s, a = O(e, this), i = 6e4 * (this.zone() - a.zone());
-            return t = p(t), "year" === t || "month" === t ? (r = 432e5 * (this.daysInMonth() + a.daysInMonth()), 
-            s = 12 * (this.year() - a.year()) + (this.month() - a.month()), s += (this - he(this).startOf("month") - (a - he(a).startOf("month"))) / r, 
-            s -= 6e4 * (this.zone() - he(this).startOf("month").zone() - (a.zone() - he(a).startOf("month").zone())) / r, 
-            "year" === t && (s /= 12)) : (r = this - a, s = "second" === t ? r / 1e3 : "minute" === t ? r / 6e4 : "hour" === t ? r / 36e5 : "day" === t ? (r - i) / 864e5 : "week" === t ? (r - i) / 6048e5 : r), 
-            n ? s : f(s);
-        },
-        from: function(e, t) {
-            return he.duration(this.diff(e)).lang(this.lang()._abbr).humanize(!t);
-        },
-        fromNow: function(e) {
-            return this.from(he(), e);
-        },
-        calendar: function(e) {
-            var t = e || he(), n = O(t, this).startOf("day"), r = this.diff(n, "days", !0), s = r < -6 ? "sameElse" : r < -1 ? "lastWeek" : r < 0 ? "lastDay" : r < 1 ? "sameDay" : r < 2 ? "nextDay" : r < 7 ? "nextWeek" : "sameElse";
-            return this.format(this.lang().calendar(s, this));
-        },
-        isLeapYear: function() {
-            return k(this.year());
-        },
-        isDST: function() {
-            return this.zone() < this.clone().month(0).zone() || this.zone() < this.clone().month(5).zone();
-        },
-        day: function(e) {
-            var t = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
-            return null != e ? (e = B(e, this.lang()), this.add({
-                d: e - t
-            })) : t;
-        },
-        month: ue("Month", !0),
-        startOf: function(e) {
-            switch (e = p(e)) {
-              case "year":
-                this.month(0);
-
-              case "quarter":
-              case "month":
-                this.date(1);
-
-              case "week":
-              case "isoWeek":
-              case "day":
-                this.hours(0);
-
-              case "hour":
-                this.minutes(0);
-
-              case "minute":
-                this.seconds(0);
-
-              case "second":
-                this.milliseconds(0);
-            }
-            return "week" === e ? this.weekday(0) : "isoWeek" === e && this.isoWeekday(1), "quarter" === e && this.month(3 * Math.floor(this.month() / 3)), 
-            this;
-        },
-        endOf: function(e) {
-            return e = p(e), this.startOf(e).add("isoWeek" === e ? "week" : e, 1).subtract("ms", 1);
-        },
-        isAfter: function(e, t) {
-            return t = "undefined" != typeof t ? t : "millisecond", +this.clone().startOf(t) > +he(e).startOf(t);
-        },
-        isBefore: function(e, t) {
-            return t = "undefined" != typeof t ? t : "millisecond", +this.clone().startOf(t) < +he(e).startOf(t);
-        },
-        isSame: function(e, t) {
-            return t = t || "ms", +this.clone().startOf(t) === +O(e, this).startOf(t);
-        },
-        min: r("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548", function(e) {
-            return e = he.apply(null, arguments), e < this ? this : e;
-        }),
-        max: r("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548", function(e) {
-            return e = he.apply(null, arguments), e > this ? this : e;
-        }),
-        zone: function(e, t) {
-            var n = this._offset || 0;
-            return null == e ? this._isUTC ? n : this._d.getTimezoneOffset() : ("string" == typeof e && (e = H(e)), 
-            Math.abs(e) < 16 && (e = 60 * e), this._offset = e, this._isUTC = !0, n !== e && (!t || this._changeInProgress ? l(this, he.duration(n - e, "m"), 1, !1) : this._changeInProgress || (this._changeInProgress = !0, 
-            he.updateOffset(this, !0), this._changeInProgress = null)), this);
-        },
-        zoneAbbr: function() {
-            return this._isUTC ? "UTC" : "";
-        },
-        zoneName: function() {
-            return this._isUTC ? "Coordinated Universal Time" : "";
-        },
-        parseZone: function() {
-            return this._tzm ? this.zone(this._tzm) : "string" == typeof this._i && this.zone(this._i), 
-            this;
-        },
-        hasAlignedHourOffset: function(e) {
-            return e = e ? he(e).zone() : 0, (this.zone() - e) % 60 === 0;
-        },
-        daysInMonth: function() {
-            return M(this.year(), this.month());
-        },
-        dayOfYear: function(e) {
-            var t = pe((he(this).startOf("day") - he(this).startOf("year")) / 864e5) + 1;
-            return null == e ? t : this.add("d", e - t);
-        },
-        quarter: function(e) {
-            return null == e ? Math.ceil((this.month() + 1) / 3) : this.month(3 * (e - 1) + this.month() % 3);
-        },
-        weekYear: function(e) {
-            var t = te(this, this.lang()._week.dow, this.lang()._week.doy).year;
-            return null == e ? t : this.add("y", e - t);
-        },
-        isoWeekYear: function(e) {
-            var t = te(this, 1, 4).year;
-            return null == e ? t : this.add("y", e - t);
-        },
-        week: function(e) {
-            var t = this.lang().week(this);
-            return null == e ? t : this.add("d", 7 * (e - t));
-        },
-        isoWeek: function(e) {
-            var t = te(this, 1, 4).week;
-            return null == e ? t : this.add("d", 7 * (e - t));
-        },
-        weekday: function(e) {
-            var t = (this.day() + 7 - this.lang()._week.dow) % 7;
-            return null == e ? t : this.add("d", e - t);
-        },
-        isoWeekday: function(e) {
-            return null == e ? this.day() || 7 : this.day(this.day() % 7 ? e : e - 7);
-        },
-        isoWeeksInYear: function() {
-            return D(this.year(), 1, 4);
-        },
-        weeksInYear: function() {
-            var e = this._lang._week;
-            return D(this.year(), e.dow, e.doy);
-        },
-        get: function(e) {
-            return e = p(e), this[e]();
-        },
-        set: function(e, t) {
-            return e = p(e), "function" == typeof this[e] && this[e](t), this;
-        },
-        lang: function(t) {
-            return t === e ? this._lang : (this._lang = F(t), this);
-        }
-    }), he.fn.millisecond = he.fn.milliseconds = ue("Milliseconds", !1), he.fn.second = he.fn.seconds = ue("Seconds", !1), 
-    he.fn.minute = he.fn.minutes = ue("Minutes", !1), he.fn.hour = he.fn.hours = ue("Hours", !0), 
-    he.fn.date = ue("Date", !0), he.fn.dates = r("dates accessor is deprecated. Use date instead.", ue("Date", !0)), 
-    he.fn.year = ue("FullYear", !0), he.fn.years = r("years accessor is deprecated. Use year instead.", ue("FullYear", !0)), 
-    he.fn.days = he.fn.day, he.fn.months = he.fn.month, he.fn.weeks = he.fn.week, he.fn.isoWeeks = he.fn.isoWeek, 
-    he.fn.quarters = he.fn.quarter, he.fn.toJSON = he.fn.toISOString, d(he.duration.fn = u.prototype, {
-        _bubble: function() {
-            var e, t, n, r, s = this._milliseconds, a = this._days, i = this._months, o = this._data;
-            o.milliseconds = s % 1e3, e = f(s / 1e3), o.seconds = e % 60, t = f(e / 60), o.minutes = t % 60, 
-            n = f(t / 60), o.hours = n % 24, a += f(n / 24), o.days = a % 30, i += f(a / 30), 
-            o.months = i % 12, r = f(i / 12), o.years = r;
-        },
-        weeks: function() {
-            return f(this.days() / 7);
-        },
-        valueOf: function() {
-            return this._milliseconds + 864e5 * this._days + this._months % 12 * 2592e6 + 31536e6 * w(this._months / 12);
-        },
-        humanize: function(e) {
-            var t = +this, n = ee(t, !e, this.lang());
-            return e && (n = this.lang().pastFuture(t, n)), this.lang().postformat(n);
-        },
-        add: function(e, t) {
-            var n = he.duration(e, t);
-            return this._milliseconds += n._milliseconds, this._days += n._days, this._months += n._months, 
-            this._bubble(), this;
-        },
-        subtract: function(e, t) {
-            var n = he.duration(e, t);
-            return this._milliseconds -= n._milliseconds, this._days -= n._days, this._months -= n._months, 
-            this._bubble(), this;
-        },
-        get: function(e) {
-            return e = p(e), this[e.toLowerCase() + "s"]();
-        },
-        as: function(e) {
-            return e = p(e), this["as" + e.charAt(0).toUpperCase() + e.slice(1) + "s"]();
-        },
-        lang: he.fn.lang,
-        toIsoString: function() {
-            var e = Math.abs(this.years()), t = Math.abs(this.months()), n = Math.abs(this.days()), r = Math.abs(this.hours()), s = Math.abs(this.minutes()), a = Math.abs(this.seconds() + this.milliseconds() / 1e3);
-            return this.asSeconds() ? (this.asSeconds() < 0 ? "-" : "") + "P" + (e ? e + "Y" : "") + (t ? t + "M" : "") + (n ? n + "D" : "") + (r || s || a ? "T" : "") + (r ? r + "H" : "") + (s ? s + "M" : "") + (a ? a + "S" : "") : "P0D";
-        }
-    });
-    for (_e in et) et.hasOwnProperty(_e) && (ce(_e, et[_e]), de(_e.toLowerCase()));
-    ce("Weeks", 6048e5), he.duration.fn.asMonths = function() {
-        return (+this - 31536e6 * this.years()) / 2592e6 + 12 * this.years();
-    }, he.lang("en", {
-        ordinal: function(e) {
-            var t = e % 10, n = 1 === w(e % 100 / 10) ? "th" : 1 === t ? "st" : 2 === t ? "nd" : 3 === t ? "rd" : "th";
-            return e + n;
-        }
-    }), Te ? module.exports = he : "function" == typeof define && define.amd ? (define("moment", function(e, t, n) {
-        return n.config && n.config() && n.config().noGlobal === !0 && (ye.moment = le), 
-        he;
-    }), fe(!0)) : fe();
-}).call(this);
-(function(e, t) {
-    "use strict";
-    var n = function() {
-        var n = function(e) {
-            return e.replace(/^\s+|\s+$/g, "");
-        }, i = function(e, t) {
-            for (var n = e.length; n--; ) if (e[n] === t) return !0;
-            return !1;
-        }, r = e.rangy || null, o = e.Undo || null, a = !r || !o, l = e.Key = {
-            backspace: 8,
-            tab: 9,
-            enter: 13,
-            shift: 16,
-            ctrl: 17,
-            alt: 18,
-            pause: 19,
-            capsLock: 20,
-            escape: 27,
-            pageUp: 33,
-            pageDown: 34,
-            end: 35,
-            home: 36,
-            leftArrow: 37,
-            upArrow: 38,
-            rightArrow: 39,
-            downArrow: 40,
-            insert: 45,
-            "delete": 46,
-            "0": 48,
-            "1": 49,
-            "2": 50,
-            "3": 51,
-            "4": 52,
-            "5": 53,
-            "6": 54,
-            "7": 55,
-            "8": 56,
-            "9": 57,
-            a: 65,
-            b: 66,
-            c: 67,
-            d: 68,
-            e: 69,
-            f: 70,
-            g: 71,
-            h: 72,
-            i: 73,
-            j: 74,
-            k: 75,
-            l: 76,
-            m: 77,
-            n: 78,
-            o: 79,
-            p: 80,
-            q: 81,
-            r: 82,
-            s: 83,
-            t: 84,
-            u: 85,
-            v: 86,
-            w: 87,
-            x: 88,
-            y: 89,
-            z: 90,
-            leftWindow: 91,
-            rightWindowKey: 92,
-            select: 93,
-            numpad0: 96,
-            numpad1: 97,
-            numpad2: 98,
-            numpad3: 99,
-            numpad4: 100,
-            numpad5: 101,
-            numpad6: 102,
-            numpad7: 103,
-            numpad8: 104,
-            numpad9: 105,
-            multiply: 106,
-            add: 107,
-            subtract: 109,
-            decimalPoint: 110,
-            divide: 111,
-            f1: 112,
-            f2: 113,
-            f3: 114,
-            f4: 115,
-            f5: 116,
-            f6: 117,
-            f7: 118,
-            f8: 119,
-            f9: 120,
-            f10: 121,
-            f11: 122,
-            f12: 123,
-            numLock: 144,
-            scrollLock: 145,
-            semiColon: 186,
-            equalSign: 187,
-            comma: 188,
-            dash: 189,
-            period: 190,
-            forwardSlash: 191,
-            graveAccent: 192,
-            openBracket: 219,
-            backSlash: 220,
-            closeBraket: 221,
-            singleQuote: 222
-        }, s = function(t) {
-            var n, i, r, o = this, c = new s.Action(), d = new s.Cache(), u = new s.Cursor(), h = new s.HtmlAssistant(), m = new s.Utilities(), f = new s.Selection(), p = {
-                focus: function(t) {
-                    t = t || e.event, s.activeElement = n;
-                },
-                blur: function(t) {
-                    t = t || e.event, s.activeElement === n && (s.activeElement = null), h.placeholders();
-                },
-                down: function(t) {
-                    t = t || e.event;
-                    var n = !0;
-                    if (229 !== t.keyCode) {
-                        if (m.isCommand(t, function() {
-                            d.cmd = !0;
-                        }, function() {
-                            d.cmd = !1;
-                        }), m.isShift(t, function() {
-                            d.shift = !0;
-                        }, function() {
-                            d.shift = !1;
-                        }), m.isModifier(t, function(e) {
-                            if (d.cmd) {
-                                if ((v.mode === s.inlineMode || v.mode === s.partialMode) && "paste" !== e) return void m.preventDefaultEvent(t);
-                                var i = typeof e, r = null;
-                                r = "function" === i ? e : p.command[e], n = r.call(o, t), n === !1 && (m.preventDefaultEvent(t), 
-                                m.stopPropagation(t));
-                            }
-                        }), v.maxLength !== -1) {
-                            var i = h.text().length, r = !1, a = e.getSelection();
-                            if (a && (r = !a.isCollapsed), i >= v.maxLength && !m.isSpecial(t) && !m.isNavigational(t) && !r) return m.preventDefaultEvent(t);
-                        }
-                        switch (t.keyCode) {
-                          case l.enter:
-                            p.enterKey(t);
-                            break;
-
-                          case l.backspace:
-                          case l["delete"]:
-                            p.backspaceOrDeleteKey(t);
-                        }
-                        return n;
-                    }
-                },
-                up: function(t) {
-                    t = t || e.event, m.isCommand(t, function() {
-                        d.cmd = !1;
-                    }, function() {
-                        d.cmd = !0;
-                    }), h.clean(), h.placeholders();
-                    var n;
-                    if (null !== v.keyContext && (n = v.keyContext[t.keyCode])) {
-                        var i = u.parent();
-                        i && n.call(o, t, i);
-                    }
-                    c.preserveElementFocus();
-                },
-                command: {
-                    bold: function(e) {
-                        m.preventDefaultEvent(e), new s.Element(o, "bold").setClean(!1).invoke(v.beforeInvokeElement);
-                    },
-                    underline: function(e) {
-                        m.preventDefaultEvent(e), new s.Element(o, "underline").setClean(!1).invoke(v.beforeInvokeElement);
-                    },
-                    italicize: function(e) {
-                        m.preventDefaultEvent(e), new s.Element(o, "italic").setClean(!1).invoke(v.beforeInvokeElement);
-                    },
-                    quote: function(e) {},
-                    paste: function(e) {
-                        if (o.makeUndoable(), v.pasteAsText) {
-                            var t = m.selection.saveSelection();
-                            m.pasteHook(function(e) {
-                                m.selection.restoreSelection(t), e = e.replace(/\n/g, "<br>"), new s.Html(o, e).setClean(!1).insert(v.beforeInsertHtml, !0), 
-                                h.clean(), h.placeholders();
-                            });
-                        } else h.clean(), h.placeholders();
-                    }
-                },
-                enterKey: function(e) {
-                    if (v.mode === s.inlineMode) return m.preventDefaultEvent(e);
-                    if (!d.shift) {
-                        var t, i, r, o = h.atCaret() || {}, a = n.children, l = o === n.lastChild ? n.lastChild : null;
-                        l && l !== n.firstChild && v.autoHR && "partial" !== v.mode && v.tags.horizontalRule && (m.preventDefaultEvent(e), 
-                        t = "" === h.text(l) && l.nodeName.toLowerCase() === v.tags.paragraph, t && a.length >= 2 && (i = a[a.length - 2], 
-                        i.nodeName.toLowerCase() === v.tags.horizontalRule && (t = !1)), t && (h.addTag(v.tags.horizontalRule, !1, !0, o), 
-                        o = o.nextSibling), null !== (r = h.addTag(v.tags.paragraph, !0, null, o)) && (r.innerHTML = "", 
-                        u.set(0, r)));
-                    }
-                    return !0;
-                },
-                backspaceOrDeleteKey: function(e) {
-                    if (null !== n.lastChild) {
-                        var t = n.lastChild, i = t.previousSibling;
-                        t && v.tags.horizontalRule && t.nodeName.toLocaleLowerCase() === v.tags.horizontalRule ? n.removeChild(t) : t && i && m.html.text(t).length < 1 && i.nodeName.toLowerCase() === v.tags.horizontalRule && t.nodeName.toLowerCase() === v.tags.paragraph && (n.removeChild(t), 
-                        n.removeChild(i));
-                    }
-                }
-            }, g = {
-                element: null,
-                modifier: "auto",
-                placeholder: "",
-                autofocus: !1,
-                autoHR: !0,
-                mode: s.richMode,
-                maxLength: -1,
-                modifiers: {
-                    b: "bold",
-                    i: "italicize",
-                    u: "underline",
-                    v: "paste"
-                },
-                tags: {
-                    "break": "br",
-                    horizontalRule: "hr",
-                    paragraph: "p",
-                    outerLevel: [ "pre", "blockquote", "figure" ],
-                    innerLevel: [ "a", "b", "u", "i", "img", "strong" ]
-                },
-                cssClasses: {
-                    editor: "Medium",
-                    pasteHook: "Medium-paste-hook",
-                    placeholder: "Medium-placeholder",
-                    clear: "Medium-clear"
-                },
-                attributes: {
-                    remove: [ "style", "class" ]
-                },
-                pasteAsText: !0,
-                beforeInvokeElement: function() {},
-                beforeInsertHtml: function() {},
-                beforeAddTag: function(e, t, n, i) {},
-                keyContext: null,
-                pasteEventHandler: function(t) {
-                    t = t || e.event, o.makeUndoable();
-                    var i, r = o.value().length;
-                    if (v.pasteAsText) {
-                        m.preventDefaultEvent(t);
-                        var a = m.selection.saveSelection(), l = prompt(s.Messages.pastHere) || "";
-                        if (l.length > 0) return n.focus(), s.activeElement = n, m.selection.restoreSelection(a), 
-                        l = h.encodeHtml(l), i = l.length + r, v.maxLength > 0 && i > v.maxLength && (l = l.substring(0, v.maxLength - r)), 
-                        v.mode !== s.inlineMode && (l = l.replace(/\n/g, "<br>")), new s.Html(o, l).setClean(!1).insert(v.beforeInsertHtml, !0), 
-                        h.clean(), h.placeholders(), !1;
-                    } else setTimeout(function() {
-                        h.clean(), h.placeholders();
-                    }, 20);
-                }
-            }, v = m.deepExtend(g, t), b = {};
-            for (r in g) "object" != typeof g[r] && g.hasOwnProperty(r) && v.element.getAttribute("data-medium-" + l) && (i = v.element.getAttribute("data-medium-" + l), 
-            "false" !== i.toLowerCase() && "true" !== i.toLowerCase() || (i = "true" === i.toLowerCase()), 
-            v[r] = i);
-            if (v.modifiers) for (r in v.modifiers) "undefined" != typeof l[r] && (v.modifiers[l[r]] = v.modifiers[r]);
-            if (v.keyContext) for (r in v.keyContext) "undefined" != typeof l[r] && (v.keyContext[l[r]] = v.keyContext[r]);
-            n = v.element, n.contentEditable = !0, n.className += " " + v.cssClasses.editor + (" " + v.cssClasses.editor + "-" + v.mode), 
-            v.tags = v.tags || {}, v.tags.outerLevel && (v.tags.outerLevel = v.tags.outerLevel.concat([ v.tags.paragraph, v.tags.horizontalRule ])), 
-            this.settings = v, this.element = n, this.intercept = p, this.action = c, this.cache = d, 
-            this.cursor = u, this.html = h, this.utils = m, this.selection = f, b.element = n, 
-            b.medium = this, b.settings = v, b.action = c, b.cache = d, b.cursor = u, b.html = h, 
-            b.intercept = p, b.utils = m, b.selection = f, c.setBridge(b), d.setBridge(b), u.setBridge(b), 
-            h.setBridge(b), m.setBridge(b), f.setBridge(b), h.clean(), h.placeholders(), c.preserveElementFocus(), 
-            c.listen(), a ? this.makeUndoable = function() {} : (this.dirty = !1, this.undoable = new s.Undoable(this), 
-            this.undo = this.undoable.undo, this.redo = this.undoable.redo, this.makeUndoable = this.undoable.makeUndoable), 
-            n.medium = this, d.initialized = !0;
-        };
-        return s.prototype = {
-            insertHtml: function(e, t) {
-                var n = new s.Html(this, e).insert(this.settings.beforeInsertHtml);
-                return this.utils.triggerEvent(this.element, "change"), t && t.apply(n), this;
-            },
-            invokeElement: function(e, t) {
-                var n = this.settings, t = t || {}, r = t.remove || [];
-                switch (n.mode) {
-                  case s.inlineMode:
-                  case s.partialMode:
-                    return this;
-                }
-                return r.length > 0 && (i(n, "class") || r.push("class")), new s.Element(this, e, t).invoke(this.settings.beforeInvokeElement), 
-                this.utils.triggerEvent(this.element, "change"), this;
-            },
-            behavior: function() {
-                return a ? "wild" : "domesticated";
-            },
-            value: function(e) {
-                return "undefined" == typeof e ? this.element.innerHTML : (this.element.innerHTML = e, 
-                this.html.clean(), this.html.placeholders(), this);
-            },
-            focus: function() {
-                var e = this.element;
-                return e.focus(), this;
-            },
-            select: function() {
-                var n, i, r = this.element;
-                return r.focus(), t.body.createTextRange ? (n = t.body.createTextRange(), n.moveToElementText(r), 
-                n.select()) : e.getSelection && (i = e.getSelection(), n = t.createRange(), n.selectNodeContents(r), 
-                i.removeAllRanges(), i.addRange(n)), this;
-            },
-            isActive: function() {
-                return s.activeElement === this.element;
-            },
-            destroy: function() {
-                var e = this.element, t = this.intercept, i = this.settings, r = this.placeholder || null;
-                null !== r && r.setup && (r.parentNode.removeChild(r), delete e.placeHolderActive), 
-                e.removeAttribute("contenteditable"), e.className = n(e.className.replace(i.cssClasses.editor, "").replace(i.cssClasses.clear, "").replace(i.cssClasses.editor + "-" + i.mode, "")), 
-                this.utils.removeEvent(e, "keyup", t.up).removeEvent(e, "keydown", t.down).removeEvent(e, "focus", t.focus).removeEvent(e, "blur", t.focus).removeEvent(e, "paste", i.pasteEventHandler);
-            },
-            clear: function() {
-                this.element.innerHTML = "", this.html.placeholders();
-            }
-        }, s.Element = function(e, t, n) {
-            if (this.medium = e, this.element = e.settings.element, a) this.tagName = t; else switch (t.toLowerCase()) {
-              case "bold":
-                this.tagName = "b";
-                break;
-
-              case "italic":
-                this.tagName = "i";
-                break;
-
-              case "underline":
-                this.tagName = "u";
-                break;
-
-              default:
-                this.tagName = t;
-            }
-            this.attributes = n || {}, this.clean = !0;
-        }, s.Html = function(e, t) {
-            this.medium = e, this.element = e.settings.element, this.html = t, this.clean = !0;
-        }, s.Injector = function() {}, a ? (s.Element.prototype = {
-            invoke: function(e) {
-                s.activeElement === this.element && (e && e.apply(this), t.execCommand(this.tagName, !1));
-            },
-            setClean: function() {
-                return this;
-            }
-        }, s.Injector.prototype = {
-            inject: function(e, t) {
-                return this.insertHTML(e, t), null;
-            }
-        }, s.Undoable = function() {}) : (r.rangePrototype.insertNodeAtEnd = function(e) {
-            var t = this.cloneRange();
-            t.collapse(!1), t.insertNode(e), t.detach(), this.setEndAfter(e);
-        }, s.Element.prototype = {
-            invoke: function(t) {
-                if (s.activeElement === this.element) {
-                    t && t.apply(this);
-                    var n, i, o = this.attributes, a = this.tagName.toLowerCase();
-                    void 0 !== o.className ? (i = (o.className.split[" "] || [ o.className ]).shift(), 
-                    delete o.className) : i = "medium-" + a, n = r.createClassApplier(i, {
-                        elementTagName: a,
-                        elementAttributes: this.attributes
-                    }), this.medium.makeUndoable(), n.toggleSelection(e), this.clean && (this.medium.html.clean(), 
-                    this.medium.html.placeholders());
-                }
-            },
-            setClean: function(e) {
-                return this.clean = e, this;
-            }
-        }, s.Injector.prototype = {
-            inject: function(e) {
-                var n, i = !1;
-                if ("string" == typeof e) {
-                    var r = t.createElement("div");
-                    r.innerHTML = e, n = r.childNodes, i = !0;
-                } else n = e;
-                this.insertHTML('<span id="wedge"></span>');
-                var o = t.getElementById("wedge"), a = o.parentNode, l = 0;
-                if (o.removeAttribute("id"), i) for (;l < n.length; ) a.insertBefore(n[l], o); else a.insertBefore(n, o);
-                return a.removeChild(o), o = null, n;
-            }
-        }, s.Undoable = function(e) {
-            var t, n = this, i = e.settings.element, r = e.utils, o = r.addEvent, a = i.innerHTML, s = new Undo.Stack(), c = Undo.Command.extend({
-                constructor: function(e, t) {
-                    this.oldValue = e, this.newValue = t;
-                },
-                execute: function() {},
-                undo: function() {
-                    i.innerHTML = this.oldValue, e.canUndo = s.canUndo(), e.canRedo = s.canRedo(), e.dirty = s.dirty();
-                },
-                redo: function() {
-                    i.innerHTML = this.newValue, e.canUndo = s.canUndo(), e.canRedo = s.canRedo(), e.dirty = s.dirty();
-                }
-            }), d = function() {
-                var t = i.innerHTML;
-                t != a && (n.movingThroughStack || (s.execute(new c(a, t)), a = t, e.dirty = s.dirty()), 
-                r.triggerEvent(e.settings.element, "change"));
-            };
-            this.medium = e, this.timer = t, this.stack = s, this.makeUndoable = d, this.EditCommand = c, 
-            this.movingThroughStack = !1, o(i, "keyup", function(e) {
-                return e.ctrlKey || e.keyCode === l.z ? void r.preventDefaultEvent(e) : (clearTimeout(t), 
-                void (t = setTimeout(function() {
-                    d();
-                }, 250)));
-            }), o(i, "keydown", function(e) {
-                return e.ctrlKey && e.keyCode === l.z ? (r.preventDefaultEvent(e), n.movingThroughStack = !0, 
-                void (e.shiftKey ? s.canRedo() && s.redo() : s.canUndo() && s.undo())) : (n.movingThroughStack = !1, 
-                !0);
-            });
-        }), s.Injector.prototype.insertHTML = function(n, i) {
-            var r, o;
-            if (e.getSelection) {
-                if (r = e.getSelection(), r.getRangeAt && r.rangeCount) {
-                    o = r.getRangeAt(0), o.deleteContents();
-                    var a = t.createElement("div");
-                    a.innerHTML = n;
-                    for (var l, s, c = t.createDocumentFragment(); l = a.firstChild; ) s = c.appendChild(l);
-                    var d = c.firstChild;
-                    o.insertNode(c), s && (o = o.cloneRange(), o.setStartAfter(s), i ? o.setStartBefore(d) : o.collapse(!0), 
-                    r.removeAllRanges(), r.addRange(o));
-                }
-            } else if ((r = t.selection) && "Control" != r.type) {
-                var u = r.createRange();
-                u.collapse(!0), r.createRange().pasteHTML(n), i && (o = r.createRange(), o.setEndPoint("StartToStart", u), 
-                o.select());
-            }
-        }, s.Html.prototype = {
-            setBridge: function(e) {
-                for (var t in e) this[t] = e[t];
-            },
-            insert: function(e, t) {
-                if (s.activeElement === this.element) {
-                    e && e.apply(this);
-                    var n = this.injector.inject(this.html, t);
-                    return this.clean && (this.medium.html.clean(), this.medium.html.placeholders()), 
-                    this.medium.makeUndoable(), n;
-                }
-                return null;
-            },
-            injector: new s.Injector(),
-            setClean: function(e) {
-                return this.clean = e, this;
-            }
-        }, s.Utilities = function() {}, s.Utilities.prototype = {
-            setBridge: function(e) {
-                for (var t in e) this[t] = e[t];
-            },
-            isCommand: function(e, t, n) {
-                var i = this.settings;
-                return "ctrl" === i.modifier && e.ctrlKey || "cmd" === i.modifier && e.metaKey || "auto" === i.modifier && (e.ctrlKey || e.metaKey) ? t.call() : n.call();
-            },
-            isShift: function(e, t, n) {
-                return e.shiftKey ? t.call() : n.call();
-            },
-            isModifier: function(e, t) {
-                var n = this.settings.modifiers[e.keyCode];
-                return !!n && t.call(null, n);
-            },
-            special: function() {
-                var e = {};
-                return e[l.backspace] = !0, e[l.shift] = !0, e[l.ctrl] = !0, e[l.alt] = !0, e[l["delete"]] = !0, 
-                e[l.cmd] = !0, e;
-            }(),
-            isSpecial: function(e) {
-                return !!this.cache.cmd || "undefined" != typeof this.special[e.keyCode];
-            },
-            navigational: function() {
-                var e = {};
-                return e[l.upArrow] = !0, e[l.downArrow] = !0, e[l.leftArrow] = !0, e[l.rightArrow] = !0, 
-                e;
-            }(),
-            isNavigational: function(e) {
-                return "undefined" != typeof this.navigational[e.keyCode];
-            },
-            addEvent: function(e, t, n) {
-                return e.addEventListener ? e.addEventListener(t, n, !1) : e.attachEvent ? e.attachEvent("on" + t, n) : e["on" + t] = n, 
-                this;
-            },
-            removeEvent: function(e, t, n) {
-                return e.removeEventListener ? e.removeEventListener(t, n, !1) : e.detachEvent ? e.detachEvent("on" + t, n) : e["on" + t] = null, 
-                this;
-            },
-            preventDefaultEvent: function(e) {
-                return e.preventDefault ? e.preventDefault() : e.returnValue = !1, this;
-            },
-            stopPropagation: function(e) {
-                e = e || window.event, e.cancelBubble = !0, void 0 !== e.stopPropagation && e.stopPropagation();
-            },
-            triggerEvent: function(e, n) {
-                var i;
-                return t.createEvent ? (i = t.createEvent("HTMLEvents"), i.initEvent(n, !0, !0), 
-                i.eventName = n, e.dispatchEvent(i)) : (i = t.createEventObject(), e.fireEvent("on" + n, i)), 
-                this;
-            },
-            deepExtend: function(e, t) {
-                for (var n in t) t[n] && t[n].constructor && t[n].constructor === Object ? (e[n] = e[n] || {}, 
-                this.deepExtend(e[n], t[n])) : e[n] = t[n];
-                return e;
-            },
-            pasteHook: function(e) {
-                var n, i, r, o = t.createElement("textarea"), l = this.element, s = this.settings, c = this.medium, d = this.html;
-                o.className = s.cssClasses.pasteHook, l.parentNode.appendChild(o), o.focus(), a || c.makeUndoable(), 
-                setTimeout(function() {
-                    l.focus(), s.maxLength > 0 && (n = d.text(l), i = n.length, r = i + o.value.length, 
-                    r > i && (o.value = o.value.substring(0, s.maxLength - i))), e(o.value), d.deleteNode(o);
-                }, 2);
-            },
-            setupContents: function() {
-                var e, n = this.element, i = n.children, r = n.childNodes;
-                !this.settings.tags.paragraph || i.length > 0 || this.settings.mode === s.inlineMode || (r.length > 0 ? (e = t.createElement(this.settings.tags.paragraph), 
-                n.innerHTML.match("^[&]nbsp[;]") && (n.innerHTML = n.innerHTML.substring(6, n.innerHTML.length - 1)), 
-                e.innerHTML = n.innerHTML, n.innerHTML = "", n.appendChild(e), this.cursor.set(e.innerHTML.length, e)) : (e = t.createElement(this.settings.tags.paragraph), 
-                e.innerHTML = "&nbsp;", n.appendChild(e)));
-            },
-            traverseAll: function(e, t, n) {
-                var i, r = e.childNodes, o = r.length, a = 0, n = n || 1;
-                if (t = t || {}, o > 0) for (;a < o; a++) {
-                    switch (i = r[a], i.nodeType) {
-                      case 1:
-                        this.traverseAll(i, t, n + 1), void 0 !== t.element && t.element(i, a, n, e);
-                        break;
-
-                      case 3:
-                        void 0 !== t.fragment && t.fragment(i, a, n, e);
-                    }
-                    o = r.length, i === e.lastChild && (a = o);
-                }
-            }
-        }, s.Selection = function() {}, s.Selection.prototype = {
-            setBridge: function(e) {
-                for (var t in e) this[t] = e[t];
-            },
-            saveSelection: function() {
-                if (e.getSelection) {
-                    var n = e.getSelection();
-                    if (n.rangeCount > 0) return n.getRangeAt(0);
-                } else if (t.selection && t.selection.createRange) return t.selection.createRange();
-                return null;
-            },
-            restoreSelection: function(n) {
-                if (n) if (e.getSelection) {
-                    var i = e.getSelection();
-                    i.removeAllRanges(), i.addRange(n);
-                } else t.selection && n.select && n.select();
-            }
-        }, s.Cursor = function() {}, s.Cursor.prototype = {
-            setBridge: function(e) {
-                for (var t in e) this[t] = e[t];
-            },
-            set: function(n, i) {
-                var r, o = this.html;
-                if (t.createRange) {
-                    var a = e.getSelection(), l = o.lastChild(), s = o.text(l).length - 1, c = i ? i : l, d = "undefined" != typeof n && null !== n ? n : s;
-                    r = t.createRange();
-                    try {
-                        r.setStart(c, d);
-                    } catch (u) {}
-                    r.collapse(!0), a.removeAllRanges(), a.addRange(r);
-                } else r = t.body.createTextRange(), r.moveToElementText(i), r.collapse(!1), r.select();
-            },
-            parent: function() {
-                var n, i = null;
-                return e.getSelection ? (n = e.getSelection().getRangeAt(0), i = n.commonAncestorContainer, 
-                i = 1 === i.nodeType ? i : i.parentNode) : t.selection && (i = t.selection.createRange().parentElement()), 
-                "SPAN" == i.tagName && (i = i.parentNode), i;
-            },
-            caretToBeginning: function(e) {
-                this.set(0, e);
-            },
-            caretToEnd: function(e) {
-                this.set(this.html.text(e).length, e);
-            }
-        }, s.HtmlAssistant = function() {}, s.HtmlAssistant.prototype = {
-            setBridge: function(e) {
-                for (var t in e) this[t] = e[t];
-            },
-            encodeHtml: function(e) {
-                return t.createElement("a").appendChild(t.createTextNode(e)).parentNode.innerHTML;
-            },
-            text: function(e, t) {
-                if (e = e || this.settings.element, t) e.textContent && "undefined" != typeof e.textContent ? e.textContent = t : e.innerText = t; else {
-                    if (e.innerText) return n(e.innerText);
-                    if (e.textContent) return n(e.textContent);
-                    if (e.data) return n(e.data);
-                }
-                return "";
-            },
-            changeTag: function(e, n) {
-                var i, r, o = t.createElement(n);
-                for (i = e.firstChild; i; ) r = i.nextSibling, o.appendChild(i), i = r;
-                return e.parentNode.insertBefore(o, e), e.parentNode.removeChild(e), o;
-            },
-            deleteNode: function(e) {
-                e.parentNode.removeChild(e);
-            },
-            placeholders: function() {
-                if (e.getComputedStyle) {
-                    var i = this.settings, r = this.medium.placeholder || (this.medium.placeholder = t.createElement("div")), o = i.element, a = r.style, l = e.getComputedStyle(o, null), c = function(e) {
-                        return l.getPropertyValue(e);
-                    }, d = this.utils, u = d.html.text(o), h = this.cursor, m = o.children.length;
-                    if (o.placeholder = r, u.length < 1 && m < 2) {
-                        if (o.placeHolderActive) return;
-                        o.innerHTML.match("<" + i.tags.paragraph) || (o.innerHTML = ""), i.placeholder.length > 0 && (r.setup || (r.setup = !0, 
-                        a.background = c("background"), a.backgroundColor = c("background-color"), a.fontSize = c("font-size"), 
-                        a.color = l.color, a.marginTop = c("margin-top"), a.marginBottom = c("margin-bottom"), 
-                        a.marginLeft = c("margin-left"), a.marginRight = c("margin-right"), a.paddingTop = c("padding-top"), 
-                        a.paddingBottom = c("padding-bottom"), a.paddingLeft = c("padding-left"), a.paddingRight = c("padding-right"), 
-                        a.borderTopWidth = c("border-top-width"), a.borderTopColor = c("border-top-color"), 
-                        a.borderTopStyle = c("border-top-style"), a.borderBottomWidth = c("border-bottom-width"), 
-                        a.borderBottomColor = c("border-bottom-color"), a.borderBottomStyle = c("border-bottom-style"), 
-                        a.borderLeftWidth = c("border-left-width"), a.borderLeftColor = c("border-left-color"), 
-                        a.borderLeftStyle = c("border-left-style"), a.borderRightWidth = c("border-right-width"), 
-                        a.borderRightColor = c("border-right-color"), a.borderRightStyle = c("border-right-style"), 
-                        r.className = i.cssClasses.placeholder + " " + i.cssClasses.placeholder + "-" + i.mode, 
-                        r.innerHTML = "<div>" + i.placeholder + "</div>", o.parentNode.insertBefore(r, o)), 
-                        o.className += " " + i.cssClasses.clear, a.display = "", a.minHeight = o.clientHeight + "px", 
-                        a.minWidth = o.clientWidth + "px", i.mode !== s.inlineMode && (d.setupContents(), 
-                        0 === m && o.firstChild && h.set(0, o.firstChild))), o.placeHolderActive = !0;
-                    } else o.placeHolderActive && (o.placeHolderActive = !1, a.display = "none", o.className = n(o.className.replace(i.cssClasses.clear, "")), 
-                    d.setupContents());
-                }
-            },
-            clean: function(t) {
-                var n, i, r, o = this.settings, a = o.cssClasses.placeholder, l = (o.attributes || {}).remove || [], s = o.tags || {}, c = s.outerLevel || null, d = s.innerLevel || null, u = {}, h = {}, m = (s.paragraph || "").toUpperCase(), f = this.html;
-                if (t = t || o.element, null !== c) for (r = 0; r < c.length; r++) u[c[r].toUpperCase()] = !0;
-                if (null !== d) for (r = 0; r < d.length; r++) h[d[r].toUpperCase()] = !0;
-                this.utils.traverseAll(t, {
-                    element: function(t, o, s, p) {
-                        var g = t.nodeName, v = !0;
-                        for (r = 0; r < l.length; r++) n = l[r], t.hasAttribute(n) && t.getAttribute(n) !== a && t.removeAttribute(n);
-                        if ((null !== c || null !== d) && (1 === s && void 0 !== u[g] ? v = !1 : s > 1 && void 0 !== h[g] && (v = !1), 
-                        v)) if ("block" === e.getComputedStyle(t, null).getPropertyValue("display")) {
-                            if (m.length > 0 && m !== g && f.changeTag(t, m), s > 1) for (;p.childNodes.length > o; ) p.parentNode.insertBefore(p.lastChild, p.nextSibling);
-                        } else switch (g) {
-                          case "BR":
-                            if (t === t.parentNode.lastChild) {
-                                if (t === t.parentNode.firstChild) break;
-                                i = document.createTextNode(""), i.innerHTML = "&nbsp", p.insertBefore(i, t);
-                                break;
-                            }
-
-                          default:
-                            for (;null !== t.firstChild; ) p.insertBefore(t.firstChild, t);
-                            f.deleteNode(t);
-                        }
-                    }
-                });
-            },
-            lastChild: function() {
-                return this.element.lastChild;
-            },
-            addTag: function(e, n, i, r) {
-                if (!this.settings.beforeAddTag(e, n, i, r)) {
-                    var o, a = t.createElement(e);
-                    return "undefined" != typeof i && i === !1 && (a.contentEditable = !1), 0 == a.innerHTML.length && (a.innerHTML = " "), 
-                    r && r.nextSibling ? (r.parentNode.insertBefore(a, r.nextSibling), o = r.nextSibling) : (this.settings.element.appendChild(a), 
-                    o = this.html.lastChild()), n && (this.cache.focusedElement = o, this.cursor.set(0, o)), 
-                    a;
-                }
-                return null;
-            },
-            baseAtCaret: function() {
-                if (!this.medium.isActive()) return null;
-                var t = e.getSelection ? e.getSelection() : document.selection;
-                if (t.rangeCount) {
-                    var n = t.getRangeAt(0), i = n.endContainer;
-                    switch (i.nodeType) {
-                      case 3:
-                        if (i.data && i.data.length != n.endOffset) return !1;
-                    }
-                    return i;
-                }
-                return null;
-            },
-            atCaret: function() {
-                var e = this.baseAtCaret() || {}, t = this.element;
-                if (e === !1) return null;
-                for (;e && e.parentNode !== t; ) e = e.parentNode;
-                return e && 1 == e.nodeType ? e : null;
-            }
-        }, s.Action = function() {}, s.Action.prototype = {
-            setBridge: function(e) {
-                for (var t in e) this[t] = e[t];
-            },
-            listen: function() {
-                var e = this.element, t = this.intercept;
-                this.utils.addEvent(e, "keyup", t.up).addEvent(e, "keydown", t.down).addEvent(e, "focus", t.focus).addEvent(e, "blur", t.blur).addEvent(e, "paste", this.settings.pasteEventHandler);
-            },
-            preserveElementFocus: function() {
-                var n = e.getSelection ? e.getSelection().anchorNode : t.activeElement;
-                if (n) {
-                    var i, r = this.medium.cache, o = this.settings, a = n.parentNode, l = o.element.children, s = a !== r.focusedElement, c = 0;
-                    for (a === o.element && (a = n), i = 0; i < l.length; i++) if (a === l[i]) {
-                        c = i;
-                        break;
-                    }
-                    s && (r.focusedElement = a, r.focusedElementIndex = c);
-                }
-            }
-        }, s.Cache = function() {
-            this.initialized = !1, this.cmd = !1, this.focusedElement = null;
-        }, s.Cache.prototype = {
-            setBridge: function(e) {
-                for (var t in e) this[t] = e[t];
-            }
-        }, s.inlineMode = "inline", s.partialMode = "partial", s.richMode = "rich", s.Messages = {
-            pastHere: "Paste Here"
-        }, s;
-    }();
-    "function" == typeof define && define.amd ? define(function() {
-        return n;
-    }) : "undefined" != typeof module && module.exports ? module.exports = n : "undefined" != typeof this && (this.Medium = n);
-}).call(this, window, document);
-!function(t) {
-    "use strict";
-    function e(t) {
-        return "[object Array]" === Object.prototype.toString.call(t);
-    }
-    function r(t) {
-        this.string = t;
-    }
-    function n(t) {
-        this.name = t;
-    }
-    function a(t) {
-        this.name = t;
-    }
-    function s() {}
-    function i(t, e, i) {
-        "/" === t.charAt(0) && (t = t.substr(1));
-        for (var h = t.split("/"), o = [], u = 0, c = h.length; u < c; u++) {
-            var p, f = h[u];
-            (p = f.match(/^:([^\/]+)$/)) ? (o.push(new n(p[1])), e.push(p[1]), i.dynamics++) : (p = f.match(/^\*([^\/]+)$/)) ? (o.push(new a(p[1])), 
-            e.push(p[1]), i.stars++) : "" === f ? o.push(new s()) : (o.push(new r(f)), i.statics++);
-        }
-        return o;
-    }
-    function h(t) {
-        this.charSpec = t, this.nextStates = [];
-    }
-    function o(t) {
-        return t.sort(function(t, e) {
-            if (t.types.stars !== e.types.stars) return t.types.stars - e.types.stars;
-            if (t.types.stars) {
-                if (t.types.statics !== e.types.statics) return e.types.statics - t.types.statics;
-                if (t.types.dynamics !== e.types.dynamics) return e.types.dynamics - t.types.dynamics;
-            }
-            return t.types.dynamics !== e.types.dynamics ? t.types.dynamics - e.types.dynamics : t.types.statics !== e.types.statics ? e.types.statics - t.types.statics : 0;
-        });
-    }
-    function u(t, e) {
-        for (var r = [], n = 0, a = t.length; n < a; n++) {
-            var s = t[n];
-            r = r.concat(s.match(e));
-        }
-        return r;
-    }
-    function c(t) {
-        this.queryParams = t || {};
-    }
-    function p(t, e, r) {
-        for (var n = t.handlers, a = t.regex, s = e.match(a), i = 1, h = new c(r), o = 0, u = n.length; o < u; o++) {
-            for (var p = n[o], f = p.names, l = {}, d = 0, g = f.length; d < g; d++) l[f[d]] = s[i++];
-            h.push({
-                handler: p.handler,
-                params: l,
-                isDynamic: !!f.length
-            });
-        }
-        return h;
-    }
-    function f(t, e) {
-        return e.eachChar(function(e) {
-            t = t.put(e);
-        }), t;
-    }
-    function l(t, e, r) {
-        this.path = t, this.matcher = e, this.delegate = r;
-    }
-    function d(t) {
-        this.routes = {}, this.children = {}, this.target = t;
-    }
-    function g(t, e, r) {
-        return function(n, a) {
-            var s = t + n;
-            return a ? void a(g(s, e, r)) : new l(t + n, e, r);
-        };
-    }
-    function y(t, e, r) {
-        for (var n = 0, a = 0, s = t.length; a < s; a++) n += t[a].path.length;
-        e = e.substr(n);
-        var i = {
-            path: e,
-            handler: r
-        };
-        t.push(i);
-    }
-    function v(t, e, r, n) {
-        var a = e.routes;
-        for (var s in a) if (a.hasOwnProperty(s)) {
-            var i = t.slice();
-            y(i, s, a[s]), e.children[s] ? v(i, e.children[s], r, n) : r.call(n, i);
-        }
-    }
-    var m = [ "/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\" ], w = new RegExp("(\\" + m.join("|\\") + ")", "g");
-    r.prototype = {
-        eachChar: function(t) {
-            for (var e, r = this.string, n = 0, a = r.length; n < a; n++) e = r.charAt(n), t({
-                validChars: e
-            });
-        },
-        regex: function() {
-            return this.string.replace(w, "\\$1");
-        },
-        generate: function() {
-            return this.string;
-        }
-    }, n.prototype = {
-        eachChar: function(t) {
-            t({
-                invalidChars: "/",
-                repeat: !0
-            });
-        },
-        regex: function() {
-            return "([^/]+)";
-        },
-        generate: function(t) {
-            return t[this.name];
-        }
-    }, a.prototype = {
-        eachChar: function(t) {
-            t({
-                invalidChars: "",
-                repeat: !0
-            });
-        },
-        regex: function() {
-            return "(.+)";
-        },
-        generate: function(t) {
-            return t[this.name];
-        }
-    }, s.prototype = {
-        eachChar: function() {},
-        regex: function() {
-            return "";
-        },
-        generate: function() {
-            return "";
-        }
-    }, h.prototype = {
-        get: function(t) {
-            for (var e = this.nextStates, r = 0, n = e.length; r < n; r++) {
-                var a = e[r], s = a.charSpec.validChars === t.validChars;
-                if (s = s && a.charSpec.invalidChars === t.invalidChars) return a;
-            }
-        },
-        put: function(t) {
-            var e;
-            return (e = this.get(t)) ? e : (e = new h(t), this.nextStates.push(e), t.repeat && e.nextStates.push(e), 
-            e);
-        },
-        match: function(t) {
-            for (var e, r, n, a = this.nextStates, s = [], i = 0, h = a.length; i < h; i++) e = a[i], 
-            r = e.charSpec, "undefined" != typeof (n = r.validChars) ? n.indexOf(t) !== -1 && s.push(e) : "undefined" != typeof (n = r.invalidChars) && n.indexOf(t) === -1 && s.push(e);
-            return s;
-        }
-    };
-    var C = Object.create || function(t) {
-        function e() {}
-        return e.prototype = t, new e();
-    };
-    c.prototype = C({
-        splice: Array.prototype.splice,
-        slice: Array.prototype.slice,
-        push: Array.prototype.push,
-        length: 0,
-        queryParams: null
-    });
-    var x = function() {
-        this.rootState = new h(), this.names = {};
-    };
-    x.prototype = {
-        add: function(t, e) {
-            for (var r, n = this.rootState, a = "^", h = {
-                statics: 0,
-                dynamics: 0,
-                stars: 0
-            }, o = [], u = [], c = !0, p = 0, l = t.length; p < l; p++) {
-                var d = t[p], g = [], y = i(d.path, g, h);
-                u = u.concat(y);
-                for (var v = 0, m = y.length; v < m; v++) {
-                    var w = y[v];
-                    w instanceof s || (c = !1, n = n.put({
-                        validChars: "/"
-                    }), a += "/", n = f(n, w), a += w.regex());
-                }
-                var C = {
-                    handler: d.handler,
-                    names: g
-                };
-                o.push(C);
-            }
-            c && (n = n.put({
-                validChars: "/"
-            }), a += "/"), n.handlers = o, n.regex = new RegExp(a + "$"), n.types = h, (r = e && e.as) && (this.names[r] = {
-                segments: u,
-                handlers: o
-            });
-        },
-        handlersFor: function(t) {
-            var e = this.names[t], r = [];
-            if (!e) throw new Error("There is no route named " + t);
-            for (var n = 0, a = e.handlers.length; n < a; n++) r.push(e.handlers[n]);
-            return r;
-        },
-        hasRoute: function(t) {
-            return !!this.names[t];
-        },
-        generate: function(t, e) {
-            var r = this.names[t], n = "";
-            if (!r) throw new Error("There is no route named " + t);
-            for (var a = r.segments, i = 0, h = a.length; i < h; i++) {
-                var o = a[i];
-                o instanceof s || (n += "/", n += o.generate(e));
-            }
-            return "/" !== n.charAt(0) && (n = "/" + n), e && e.queryParams && (n += this.generateQueryString(e.queryParams, r.handlers)), 
-            n;
-        },
-        generateQueryString: function(t, r) {
-            var n = [], a = [];
-            for (var s in t) t.hasOwnProperty(s) && a.push(s);
-            a.sort();
-            for (var i = 0, h = a.length; i < h; i++) {
-                s = a[i];
-                var o = t[s];
-                if (null != o) {
-                    var u = s;
-                    if (e(o)) for (var c = 0, p = o.length; c < p; c++) {
-                        var f = s + "[]=" + encodeURIComponent(o[c]);
-                        n.push(f);
-                    } else u += "=" + encodeURIComponent(o), n.push(u);
-                }
-            }
-            return 0 === n.length ? "" : "?" + n.join("&");
-        },
-        parseQueryString: function(t) {
-            for (var e = t.split("&"), r = {}, n = 0; n < e.length; n++) {
-                var a, s = e[n].split("="), i = decodeURIComponent(s[0]), h = i.length, o = !1;
-                1 === s.length ? a = "true" : (h > 2 && "[]" === i.slice(h - 2) && (o = !0, i = i.slice(0, h - 2), 
-                r[i] || (r[i] = [])), a = s[1] ? decodeURIComponent(s[1]) : ""), o ? r[i].push(a) : r[i] = decodeURIComponent(a);
-            }
-            return r;
-        },
-        recognize: function(t) {
-            var e, r, n, a, s = [ this.rootState ], i = {}, h = !1;
-            if (t = decodeURI(t), a = t.indexOf("?"), a !== -1) {
-                var c = t.substr(a + 1, t.length);
-                t = t.substr(0, a), i = this.parseQueryString(c);
-            }
-            for ("/" !== t.charAt(0) && (t = "/" + t), e = t.length, e > 1 && "/" === t.charAt(e - 1) && (t = t.substr(0, e - 1), 
-            h = !0), r = 0, n = t.length; r < n && (s = u(s, t.charAt(r)), s.length); r++) ;
-            var f = [];
-            for (r = 0, n = s.length; r < n; r++) s[r].handlers && f.push(s[r]);
-            s = o(f);
-            var l = f[0];
-            if (l && l.handlers) return h && "(.+)$" === l.regex.source.slice(-5) && (t += "/"), 
-            p(l, t, i);
-        }
-    }, t.RouteRecognizer = x, l.prototype = {
-        to: function(t, e) {
-            var r = this.delegate;
-            if (r && r.willAddRoute && (t = r.willAddRoute(this.matcher.target, t)), this.matcher.add(this.path, t), 
-            e) {
-                if (0 === e.length) throw new Error("You must have an argument in the function passed to `to`");
-                this.matcher.addChild(this.path, t, e, this.delegate);
-            }
-            return this;
-        }
-    }, d.prototype = {
-        add: function(t, e) {
-            this.routes[t] = e;
-        },
-        addChild: function(t, e, r, n) {
-            var a = new d(e);
-            this.children[t] = a;
-            var s = g(t, a, n);
-            n && n.contextEntered && n.contextEntered(e, s), r(s);
-        }
-    }, x.prototype.map = function(t, e) {
-        var r = new d();
-        t(g("", r, this.delegate)), v([], r, function(t) {
-            e ? e(this, t) : this.add(t);
-        }, this);
-    };
-}(window);
-function load_resource(e, s, o, a, t, n) {
-    var c = new XMLHttpRequest();
-    c.onload = function(e, s, n) {
-        if (c.status >= 200 && c.status <= 299) {
-            var r = null;
-            try {
-                var r = JSON.parse(c.response);
-            } catch (i) {}
-            o && r && r._id && (o._id = r._id), a && a(r, c);
-        } else t && t(c);
-    }, c.onerror = function(e) {
-        console.log(e, e.target), window._spacedeck_location_change || (window.spacedeck && window.spacedeck.active_space ? window.spacedeck.offline = !0 : alert("Could not connect to Spacedeck. Please reconnect and try again.")), 
-        t && t(c);
-    }, c.withCredentials = !0, c.open(e, api_endpoint + "/api" + s, !0), api_token && c.setRequestHeader("X-Spacedeck-Auth", api_token), 
-    space_auth && (console.log("set space auth", space_auth), c.setRequestHeader("X-Spacedeck-Space-Auth", space_auth)), 
-    channel_id && c.setRequestHeader("X-Spacedeck-Channel", channel_id), csrf_token && c.setRequestHeader("X-csrf-token", csrf_token);
-    try {
-        o ? "[object File]" == o.toString() ? (c.setRequestHeader("Content-type", o.type), 
-        c.setRequestHeader("Accepts", "application/json"), c.upload.onprogress = function(e) {
-            console.log("upload progress: ", e.loaded, e.total), n && n(e);
-        }, c.send(o)) : (c.setRequestHeader("Content-type", "application/json"), c.send(JSON.stringify(o))) : c.send();
-    } catch (r) {
-        if (!t) throw r;
-        t(c, r);
-    }
-}
-
-function get_resource(e, s, o, a) {
-    load_resource("get", e, null, s, o, a);
-}
-
-function load_profile(e, s, o) {
-    load_resource("get", "/users/slug?slug=" + e, null, s, o);
-}
-
-function load_current_user(e, s) {
-    load_resource("get", "/users/current", null, e, s);
-}
-
-function load_space(e, s, o) {
-    if (!e || "undefined" == e) return void console.error("load_space id:", e);
-    var a = "/spaces/" + e;
-    load_resource("get", a, null, function(e, o) {
-        var a = o.getResponseHeader("x-spacedeck-space-role");
-        s(e, a);
-    }, o);
-}
-
-function load_space_path(e, s, o) {
-    var a = "/spaces/" + e + "/path";
-    load_resource("get", a, null, function(e, o) {
-        s(e);
-    }, o);
-}
-
-function load_spaces(e, s, o, a) {
-    if (!e || "undefined" == e) return void console.error("load_spaces id:", e);
-    var t = "?parent_space_id=" + e;
-    load_resource("get", "/spaces" + t, null, function(e) {
-        o(e);
-    }, a);
-}
-
-function load_writable_folders(e, s) {
-    load_resource("get", "/spaces?writablefolders=true", null, e, s);
-}
-
-function load_history(e, s, o) {
-    load_resource("get", "/spaces/" + e._id + "/digest", null, s, o);
-}
-
-function load_filtered_spaces(e, s, o) {
-    load_resource("get", "/spaces?filter=" + e, null, s, o);
-}
-
-function load_spaces_search(e, s, o) {
-    load_resource("get", "/spaces?search=" + e, null, s, o);
-}
-
-function load_artifacts(e, s, o) {
-    load_resource("get", "/spaces/" + e + "/artifacts", null, s, o);
-}
-
-function save_artifact(e, s, o) {
-    e._id ? load_resource("put", "/spaces/" + e.space_id + "/artifacts/" + e._id, e, s, o) : load_resource("post", "/spaces/" + e.space_id + "/artifacts", e, s, o);
-}
-
-function save_pdf_file(e, s, o, a, t, n, c) {
-    load_resource("post", "/spaces/" + e._id + "/artifacts-pdf?filename=" + o.name + "&x=" + s.x + "&y=" + s.y + "&zones=" + a, o, t, n, c);
-}
-
-function save_artifact_file(e, s, o, a, t, n) {
-    load_resource("post", "/spaces/" + e.space_id + "/artifacts/" + e._id + "/payload?filename=" + o, s, a, t, n);
-}
-
-function save_space(e, s, o) {
-    e._id ? (delete e.artifacts, load_resource("put", "/spaces/" + e._id, e, s, o)) : load_resource("post", "/spaces", e, s, o);
-}
-
-function delete_space(e, s, o) {
-    load_resource("delete", "/spaces/" + e._id, null, s, o);
-}
-
-function delete_artifact(e, s, o) {
-    load_resource("delete", "/spaces/" + e.space_id + "/artifacts/" + e._id);
-}
-
-function duplicate_space(e, s, o, a) {
-    var t = "/spaces/" + e._id + "/duplicate";
-    s && (t += "?parent_space_id=" + s), load_resource("post", t, null, o, a);
-}
-
-function load_members(e, s, o) {
-    load_resource("get", "/spaces/" + e._id + "/memberships", null, s, o);
-}
-
-function create_membership(e, s, o, a) {
-    load_resource("post", "/spaces/" + e._id + "/memberships", s, o, a);
-}
-
-function save_membership(e, s, o, a) {
-    load_resource("put", "/spaces/" + e._id + "/memberships/" + s._id, s, o, a);
-}
-
-function delete_membership(e, s, o, a) {
-    load_resource("delete", "/spaces/" + e._id + "/memberships/" + s._id, s, o, a);
-}
-
-function accept_invitation(e, s, o, a) {
-    load_resource("get", "/memberships/" + e + "/accept?code=" + s, null, o, a);
-}
-
-function get_join_link(e, s, o) {
-    load_resource("get", "/invitation_codes?space_id=" + e, null, s, o);
-}
-
-function create_join_link(e, s, o, a) {
-    load_resource("post", "/invitation_codes", {
-        join_role: s,
-        sticky: !0,
-        space_id: e
-    }, o, a);
-}
-
-function delete_join_link(e, s, o) {
-    load_resource("delete", "/invitation_codes/" + e, null, s, o);
-}
-
-function load_team_members(e, s, o) {
-    load_resource("get", "/teams/" + e + "/memberships", null, function(e) {
-        s(e);
-    }, o);
-}
-
-function save_avatar_file(e, s, o, a, t) {
-    load_resource("post", "/" + e + "s/" + s._id + "/avatar", o, a, t);
-}
-
-function remove_avatar_file(e, s, o, a) {
-    load_resource("delete", "/" + e + "s/" + s._id + "/avatar", null, o, a);
-}
-
-function save_space_background_file(e, s, o, a) {
-    load_resource("post", "/spaces/" + e._id + "/background?filename=" + s.name, s, o, a);
-}
-
-function save_user_background_file(e, s, o, a) {
-    load_resource("post", "/users/" + e._id + "/background", s, o, a);
-}
-
-function save_user_password(e, s, o, a, t) {
-    load_resource("post", "/users/" + e._id + "/password", {
-        old_password: s,
-        new_password: o
-    }, a, t);
-}
-
-function get_featured_users(e, s) {
-    load_resource("get", "/users/featured", null, e, s);
-}
-
-function save_user(e, s, o) {
-    load_resource("put", "/users/" + e._id, e, s, o);
-}
-
-function delete_user(e, s, o, a) {
-    load_resource("delete", "/users/" + e._id + "?password=" + s, null, o, a);
-}
-
-function create_user(e, s, o, a, t, n) {
-    load_resource("post", "/users", {
-        email: s,
-        nickname: e,
-        password: o,
-        password_confirmation: a
-    }, t, n);
-}
-
-function create_session(e, s, o, a) {
-    load_resource("post", "/sessions", {
-        email: e,
-        password: s
-    }, o, a);
-}
-
-function delete_session(e, s) {
-    load_resource("delete", "/sessions/current", null, e, s);
-}
-
-function create_oauthtoken(e, s) {
-    load_resource("get", "/users/oauth2callback/url", null, e, s);
-}
-
-function create_session_for_oauthtoken(e, s, o) {
-    load_resource("get", "/users/loginorsignupviagoogle?code=" + e, null, s, o);
-}
-
-function create_password_reset(e, s, o) {
-    load_resource("post", "/users/password_reset_requests?email=" + encodeURIComponent(e), null, s, o);
-}
-
-function confirm_password_reset(e, s, o, a) {
-    load_resource("post", "/users/password_reset_requests/" + s + "/confirm", {
-        password: e
-    }, o, a);
-}
-
-function confirm_user(e, s, o, a) {
-    load_resource("put", "/users/" + e._id + "/confirm", {
-        token: s
-    }, o, a);
-}
-
-function resent_confirm_mail(e, s, o) {
-    load_resource("post", "/users/" + e._id + "/confirm", {}, s, o);
-}
-
-function create_feedback(e, s, o, a) {
-    load_resource("post", "/users/feedback", {
-        text: s
-    }, o, a);
-}
-
-function save_team(e, s, o) {
-    load_resource("put", "/teams/" + e._id, e, s, o);
-}
-
-function load_comments(e, s, o) {
-    load_resource("get", "/spaces/" + e + "/messages", null, s, o);
-}
-
-function save_comment(e, s, o, a) {
-    load_resource("post", "/spaces/" + e + "/messages", s, o, a);
-}
-
-function delete_comment(e, s, o, a) {
-    load_resource("delete", "/spaces/" + e + "/messages/" + s, null, o, a);
-}
-
-function update_comment(e, s, o, a) {
-    load_resource("post", "/spaces/" + e + "/messages/" + s._id, s, o, a);
-}
-
-function load_notifications(e, s, o) {
-    load_resource("get", "/notifications", null, s, o);
-}
-
-var api_endpoint = ENV.apiEndpoint, api_socket_endpoint = ENV.websocketsEndpoint, api_token = null, websocket = null, channel_id = null, space_auth = null;
-function parse_link(e) {
-    if (null == e) return "";
-    var o = e, r = 400, a = 300, t = "", i = null, l = !1, s = /embed\:(https?\:\/\/[^ <]+)/, d = /(https?\:\/\/[^ <]+)/, c = "unknown", n = "unknown";
-    if (isDataFileUrl = function(e) {
-        var o, r;
-        try {
-            if (e.split("/").length < 4) return !1;
-            if (o = _.last(e.split("/")), o.indexOf(".") < 0) return !1;
-            if (r = _.last(o.split(".")), !r) return !1;
-            if (_.include([ "png", "jpg", "jpeg", "gif", "zip", "rar", "7z", "tar", "tgz", "gz", "xls", "xlsx", "doc", "docx", "ppt", "pptx", "mp3", "ogg", "oga", "ogv", "pdf", "dmg", "exe", "iso", "dxf", "ipa", "mov", "wmv", "wma", "wav", "aiff", "mp4", "m4a", "prg", "bin", "dat", "psd", "ai", "eps", "key" ], r)) return !0;
-        } catch (a) {}
-        return !1;
-    }, m = e.match(s)) embedUri = m[1], o = "<iframe width='100%' height='100%' src=\"" + embedUri + '" seamless="1" allowfullscreen="1"></iframe>', 
-    r = 320, a = 195, i = embedUri, t = "external-embed"; else if (e.match(/http/) && e.replace(/[^<]/g, "").length < 3) if (youtubeMatcher = /youtube\.com\/.*v=([^&<]+)/, 
-    youtubeMatcher2 = /youtu\.be\/([^&<]+)/, soundcloudMatcher = /soundcloud\.com\/([^<]+)/, 
-    vimeoMatcher = /vimeo.com\/([^<]*)/, dailyMotionMatcher = /dailymotion.com\/video\/([^<]*)/, 
-    googleMapsMatcher = /google.com\/maps\?([^<]*)/, spacedeckMatcher = new RegExp(location.host + "/(spaces|folders)/([0-9a-f]{24})"), 
-    m = e.match(youtubeMatcher) || (m = e.match(youtubeMatcher2))) videoId = m[1], o = '<iframe src="https://www.youtube.com/embed/' + videoId + '?html5=1&rel=0&showinfo=0&autohide=1" frameborder="0" allowfullscreen="1"></iframe>', 
-    r = 320, a = 195, n = "youtube", c = "video"; else if (m = e.match(dailyMotionMatcher)) videoId = m[1], 
-    o = '<iframe src="https://www.dailymotion.com/embed/video/' + videoId + '" frameborder="0"></iframe>', 
-    r = 268, a = 151, n = "dailymotion", c = "video"; else if (m = e.match(vimeoMatcher)) videoId = m[1], 
-    o = '<iframe src="https://player.vimeo.com/video/' + videoId + '" frameborder="0"></iframe>', 
-    r = 268, a = 151, n = "vimeo", c = "video"; else if (m = e.match(soundcloudMatcher)) {
-        var u, p = "https://" + m[0];
-        u = m[0].indexOf("soundcloud.com/player") >= 0 ? "https://w." + m[0] : "https://w.soundcloud.com/player/?url=" + encodeURI(p), 
-        o = '<iframe scrolling="no" frameborder="no" src="' + u + '"></iframe>', r = 360, 
-        a = 184, i = p, n = "soundcloud", c = "audio";
-    } else (m = e.match(googleMapsMatcher)) ? (mapsParams = m[1], o = '<iframe src="https://maps-api-ssl.google.com/maps?' + mapsParams + '" seamless="1" allowfullscreen="1"></iframe>', 
-    r = 320, a = 195, n = "google", c = "map") : (m = e.match(d)) && !isDataFileUrl(m[1]) ? (uri = m[1], 
-    grabUri = uri, endPoint = "/api/webgrabber/" + encodeURIComponent(btoa(grabUri)), 
-    o = e.replace(uri, ' <img src="' + endPoint + '" title="' + uri + '"/> '), r = 300, 
-    a = 300, i = uri) : l = !0; else l = !0;
-    return l ? null : (result = {
-        html: o,
-        thumbnail_width: r,
-        thumbnail_height: a,
-        type: c,
-        provider_name: n,
-        url: i
-    }, result);
-}
-function vec2_add(r, e) {
-    return {
-        dx: r.dx + e.dx,
-        dy: r.dy + e.dy
-    };
-}
-
-function vec2_sub(r, e) {
-    return {
-        dx: r.dx - e.dx,
-        dy: r.dy - e.dy
-    };
-}
-
-function vec2_mul(r, e) {
-    return {
-        dx: r.dx * e,
-        dy: r.dy * e
-    };
-}
-
-function vec2_magn(r) {
-    return Math.sqrt(r.dx * r.dx + r.dy * r.dy);
-}
-
-function vec2_unit(r) {
-    var e = vec2_magn(r);
-    return 0 == e ? {
-        dx: 0,
-        dy: 0
-    } : {
-        dx: r.dx / e,
-        dy: r.dy / e
-    };
-}
-
-function vec2_angle(r) {
-    return 0 == r.dx ? Math.atan2(r.dx + .01, r.dy) : Math.atan2(r.dx, r.dy);
-}
-
-function render_vector_drawing(r, e) {
-    var t = r.style.shape || "", n = [], o = r.control_points[0];
-    if (!o) return "";
-    if (n.push("M" + (o.dx + e) + "," + (o.dy + e) + " "), t.match("arrow")) {
-        var c = r.control_points[0], a = r.control_points[1], d = r.control_points[2];
-        d || (d = a);
-        var u = r._id, _ = c, v = a, s = vec2_sub(v, _), i = vec2_magn(s), l = vec2_mul(vec2_unit(s), i / 2), h = vec2_add(_, l), f = vec2_sub(d, h), p = vec2_add(vec2_mul(f, 2), h), g = "M" + (c.dx + e) + "," + (c.dy + e) + " Q" + (p.dx + e) + "," + (p.dy + e) + " " + (a.dx + e) + "," + (a.dy + e), y = "<defs><marker id='ae" + u + '\' refX="0.1" refY="3" markerWidth="3" markerHeight="6" orient="auto">';
-        y += '<path d="M-3,0 V6 L3,3 Z" fill="' + r.style.stroke_color + '" stroke-width="0"/></marker></defs>';
-        var x = y + "<path d='" + g + "' style='stroke-width:" + r.style.stroke + ";' marker-end='url(#ae" + u + ")'/>";
-        return x;
-    }
-    for (var b, o, o, b = 0; b < r.control_points.length; b++) {
-        var o = r.control_points[b], m = 0 == b ? "M" : "L";
-        n.push(m + (o.dx + e) + "," + (o.dy + e));
-    }
-    return "<path d='" + n.join(" ") + "'>";
-}
-
-function render_vector_star(r, e, t, n) {
-    r *= 2;
-    for (var o = [], c = 360 / r, a = 0; a < r; a++) {
-        var d = a * c - 90, u = e, _ = t;
-        a % 2 && (20 == r ? (u /= 1.5, _ /= 1.5) : (u /= 2.8, _ /= 2.8));
-        var v = n + e + u * Math.cos(d * Math.PI / 180), s = n + t + _ * Math.sin(d * Math.PI / 180);
-        o.push(v + "," + s);
-    }
-    return "<polygon points='" + o.join(" ") + "'/>";
-}
-
-function transform_vector_template(r, e, t, n) {
-    for (var o = "", c = 0; c < r.length; c += 2) {
-        for (var a = r[c + 1], d = 0; d < a.length; d += 2) a[d] *= 2 * e / 100, a[d + 1] *= 2 * t / 100;
-        o += r[c] + r[c + 1].join(",") + " ";
-    }
-    return o;
-}
-
-function render_vector_heart(r, e, t) {
-    var n = [ "M", [ 50.141, 98.5 ], "c", [ 0, 0, -49, -38.334, -49, -67.982 ], "C", [ 1.141, 15.333, 14.356, 1, 30.659, 1 ], "c", [ 7.437, 0, 14.244, 2.791, 19.435, 7.33 ], "l", [ 0, 0 ], "C", [ 55.296, 3.742, 62.141, 1, 69.622, 1 ], "c", [ 16.303, 0, 29.519, 14.166, 29.519, 29.518 ], "C", [ 99.141, 60.334, 50.141, 98.5, 50.141, 98.5 ], "z", [] ];
-    return svg = "<path d='" + transform_vector_template(n, r, e, t) + "'/>", svg;
-}
-
-function render_vector_cloud(r, e, t) {
-    var n = [ "M", [ 17.544, 99.729 ], "c", [ 0, 0, -17.544, 6.929, -17.544, -36.699 ], "c", [ 0, -18.698, 19.298, -28.047, 19.298, -9.35 ], "c", [ 0, 0, -3.508, -54.46, 26.316, -53.672 ], "C", [ 71.93, .704, 68.421, 34.983, 68.421, 34.983 ], "S", [ 100, 25.634, 100, 72.379 ], "c", [ 0, 28.047, -21.053, 27.351, -21.053, 27.351 ], "z", [] ];
-    return svg = "<path d='" + transform_vector_template(n, r, e, t) + "'/>", svg;
-}
-
-function render_vector_ellipse(r, e, t) {
-    return svg = "<ellipse cx=" + (r + t) + " cy=" + (e + t) + " rx=" + r + " ry=" + e + ">", 
-    svg;
-}
-
-function render_vector_speechbubble(r, e, t) {
-    var n = [ "M", [ 100, 50 ], "c", [ 0, 9.5, -2.7, 18, -7.4, 26 ], "C", [ 90, 80, 100, 100, 100, 100 ], "s", [ -23.194, -6.417, -28, -4.162 ], "c", [ -6.375, 3, -13.5, 4.7, -21, 4.7 ], "C", [ 23, 100, .5, 77, .5, 50 ], "C", [ .5, 23, 23, .5, 50, .5 ], "C", [ 77, .5, 100, 23, 100, 50 ], "z", [] ];
-    return svg = "<path d='" + transform_vector_template(n, r, e, t) + "'/>", svg;
-}
-
-function render_vector_ngon(r, e, t, n) {
-    for (var o = [], c = 360 / r, a = 0; a < r; a++) {
-        var d = a * c - 90, u = n + e + e * Math.cos(d * Math.PI / 180), _ = n + t + t * Math.sin(d * Math.PI / 180);
-        o.push(u + "," + _);
-    }
-    return "<polygon points='" + o.join(" ") + "'/>";
-}
-
-function render_vector_rect(r, e, t) {
-    return "<rect x='0' y='0' width='" + 2 * r + "' height='" + 2 * r + "'/>";
-}
-
-function render_vector_shape(r) {
-    var e = parseInt(r.style.stroke) + 4, t = e / 2, n = (r.board.w - e) / 2, o = (r.board.h - e) / 2, c = {
-        ellipse: function() {
-            return render_vector_ellipse(n, o, t);
-        },
-        pentagon: function() {
-            return render_vector_ngon(5, n, o, t);
-        },
-        hexagon: function() {
-            return render_vector_ngon(6, n, o, t);
-        },
-        octagon: function() {
-            return render_vector_ngon(8, n, o, t);
-        },
-        diamond: function() {
-            return render_vector_ngon(4, n, o, t);
-        },
-        square: function() {
-            return "";
-        },
-        triangle: function() {
-            return render_vector_ngon(3, n, o, t);
-        },
-        star: function() {
-            return render_vector_star(5, n, o, t);
-        },
-        burst: function() {
-            return render_vector_star(10, n, o, t);
-        },
-        speechbubble: function() {
-            return render_vector_speechbubble(n, o, t);
-        },
-        heart: function() {
-            return render_vector_heart(n, o, t);
-        },
-        cloud: function() {
-            return render_vector_cloud(n, o, t);
-        }
-    }, a = c[r.style.shape];
-    return a ? a() : "";
-}
-
-function simplify_scribble_points(r) {
-    for (var e = [], t = 2, n = 0; n < r.length; n++) {
-        var o = r[n], c = r[n + 1];
-        if (n > 0) var a = r[n - 1];
-        c && a ? (dprev = vec2_sub(o, a), dnext = vec2_sub(c, o), aprev = vec2_angle(dprev), 
-        anext = vec2_angle(dnext), delta = Math.abs(Math.abs(aprev) - Math.abs(anext)), 
-        delta2 = vec2_magn(vec2_sub(o, a)), delta2 > t && delta > .1 && e.push(o)) : e.push(o);
-    }
-    return e;
-}
-
-"undefined" == typeof window && (exports.render_vector_shape = render_vector_shape, 
-exports.render_vector_drawing = render_vector_drawing);
-!function(e, t, n) {
-    function r(e, t, n) {
-        return e.addEventListener ? void e.addEventListener(t, n, !1) : void e.attachEvent("on" + t, n);
-    }
-    function o(e) {
-        if ("keypress" == e.type) {
-            var t = String.fromCharCode(e.which);
-            return e.shiftKey || (t = t.toLowerCase()), t;
-        }
-        return q[e.which] ? q[e.which] : P[e.which] ? P[e.which] : String.fromCharCode(e.which).toLowerCase();
-    }
-    function i(e, t) {
-        return e.sort().join(",") === t.sort().join(",");
-    }
-    function a(e) {
-        e = e || {};
-        var t, n = !1;
-        for (t in M) e[t] ? n = !0 : M[t] = 0;
-        n || (x = !1);
-    }
-    function c(e, t, n, r, o, a) {
-        var c, u, s = [], f = n.type;
-        if (!N[e]) return [];
-        for ("keyup" == f && d(e) && (t = [ e ]), c = 0; c < N[e].length; ++c) if (u = N[e][c], 
-        (r || !u.seq || M[u.seq] == u.level) && f == u.action && ("keypress" == f && !n.metaKey && !n.ctrlKey || i(t, u.modifiers))) {
-            var l = !r && u.combo == o, p = r && u.seq == r && u.level == a;
-            (l || p) && N[e].splice(c, 1), s.push(u);
-        }
-        return s;
-    }
-    function u(e) {
-        var t = [];
-        return e.shiftKey && t.push("shift"), e.altKey && t.push("alt"), e.ctrlKey && t.push("ctrl"), 
-        e.metaKey && t.push("meta"), t;
-    }
-    function s(e) {
-        return e.preventDefault ? void e.preventDefault() : void (e.returnValue = !1);
-    }
-    function f(e) {
-        return e.stopPropagation ? void e.stopPropagation() : void (e.cancelBubble = !0);
-    }
-    function l(e, t, n, r) {
-        O.stopCallback(t, t.target || t.srcElement, n, r) || e(t, n) === !1 && (s(t), f(t));
-    }
-    function p(e, t, n) {
-        var r, o = c(e, t, n), i = {}, u = 0, s = !1;
-        for (r = 0; r < o.length; ++r) o[r].seq && (u = Math.max(u, o[r].level));
-        for (r = 0; r < o.length; ++r) if (o[r].seq) {
-            if (o[r].level != u) continue;
-            s = !0, i[o[r].seq] = 1, l(o[r].callback, n, o[r].combo, o[r].seq);
-        } else s || l(o[r].callback, n, o[r].combo);
-        var f = "keypress" == n.type && j;
-        n.type != x || d(e) || f || a(i), j = s && "keydown" == n.type;
-    }
-    function h(e) {
-        "number" != typeof e.which && (e.which = e.keyCode);
-        var t = o(e);
-        if (t) return "keyup" == e.type && S === t ? void (S = !1) : void O.handleKey(t, u(e), e);
-    }
-    function d(e) {
-        return "shift" == e || "ctrl" == e || "alt" == e || "meta" == e;
-    }
-    function y() {
-        clearTimeout(K), K = setTimeout(a, 1e3);
-    }
-    function v() {
-        if (!E) {
-            E = {};
-            for (var e in q) e > 95 && e < 112 || q.hasOwnProperty(e) && (E[q[e]] = e);
-        }
-        return E;
-    }
-    function m(e, t, n) {
-        return n || (n = v()[e] ? "keydown" : "keypress"), "keypress" == n && t.length && (n = "keydown"), 
-        n;
-    }
-    function k(e, t, n, r) {
-        function i(t) {
-            return function() {
-                x = t, ++M[e], y();
-            };
-        }
-        function c(t) {
-            l(n, t, e), "keyup" !== r && (S = o(t)), setTimeout(a, 10);
-        }
-        M[e] = 0;
-        for (var u = 0; u < t.length; ++u) {
-            var s = u + 1 === t.length, f = s ? c : i(r || w(t[u + 1]).action);
-            b(t[u], f, r, e, u);
-        }
-    }
-    function g(e) {
-        var t = e.split("+");
-        return "+" === e[e.length - 1] && (t.pop(), t.length && t.pop(), t.push("+")), t;
-    }
-    function w(e, t) {
-        var n, r, o, i = [];
-        for (n = g(e), o = 0; o < n.length; ++o) r = n[o], L[r] && (r = L[r]), t && "keypress" != t && T[r] && (r = T[r], 
-        i.push("shift")), d(r) && i.push(r);
-        return t = m(r, i, t), {
-            key: r,
-            modifiers: i,
-            action: t
-        };
-    }
-    function b(e, t, n, r, o) {
-        A[e + ":" + n] = t, e = e.replace(/\s+/g, " ");
-        var i, a = e.split(" ");
-        return a.length > 1 ? void k(e, a, t, n) : (i = w(e, n), N[i.key] = N[i.key] || [], 
-        c(i.key, i.modifiers, {
-            type: i.action
-        }, r, e, o), void N[i.key][r ? "unshift" : "push"]({
-            callback: t,
-            modifiers: i.modifiers,
-            action: i.action,
-            seq: r,
-            level: o,
-            combo: e
-        }));
-    }
-    function C(e, t, n) {
-        for (var r = 0; r < e.length; ++r) b(e[r], t, n);
-    }
-    for (var E, K, q = {
-        8: "backspace",
-        9: "tab",
-        13: "enter",
-        16: "shift",
-        17: "ctrl",
-        18: "alt",
-        20: "capslock",
-        27: "esc",
-        32: "space",
-        33: "pageup",
-        34: "pagedown",
-        35: "end",
-        36: "home",
-        37: "left",
-        38: "up",
-        39: "right",
-        40: "down",
-        45: "ins",
-        46: "del",
-        91: "meta",
-        93: "meta",
-        224: "meta"
-    }, P = {
-        106: "*",
-        107: "+",
-        109: "-",
-        110: ".",
-        111: "/",
-        186: ";",
-        187: "=",
-        188: ",",
-        189: "-",
-        190: ".",
-        191: "/",
-        192: "`",
-        219: "[",
-        220: "\\",
-        221: "]",
-        222: "'"
-    }, T = {
-        "~": "`",
-        "!": "1",
-        "@": "2",
-        "#": "3",
-        $: "4",
-        "%": "5",
-        "^": "6",
-        "&": "7",
-        "*": "8",
-        "(": "9",
-        ")": "0",
-        _: "-",
-        "+": "=",
-        ":": ";",
-        '"': "'",
-        "<": ",",
-        ">": ".",
-        "?": "/",
-        "|": "\\"
-    }, L = {
-        option: "alt",
-        command: "meta",
-        "return": "enter",
-        escape: "esc",
-        mod: /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? "meta" : "ctrl"
-    }, N = {}, A = {}, M = {}, S = !1, j = !1, x = !1, D = 1; D < 20; ++D) q[111 + D] = "f" + D;
-    for (D = 0; D <= 9; ++D) q[D + 96] = D;
-    r(t, "keypress", h), r(t, "keydown", h), r(t, "keyup", h);
-    var O = {
-        bind: function(e, t, n) {
-            return e = e instanceof Array ? e : [ e ], C(e, t, n), this;
-        },
-        unbind: function(e, t) {
-            return O.bind(e, function() {}, t);
-        },
-        trigger: function(e, t) {
-            return A[e + ":" + t] && A[e + ":" + t]({}, e), this;
-        },
-        reset: function() {
-            return N = {}, A = {}, this;
-        },
-        stopCallback: function(e, t) {
-            return !((" " + t.className + " ").indexOf(" mousetrap ") > -1) && ("INPUT" == t.tagName || "SELECT" == t.tagName || "TEXTAREA" == t.tagName || t.isContentEditable);
-        },
-        handleKey: p
-    };
-    e.Mousetrap = O;
-}(window, document);
-!function(e, n) {
-    var t = {
-        smoketimeout: [],
-        init: !1,
-        zindex: 4e4,
-        i: 0,
-        bodyload: function(e) {
-            var i = n.createElement("div");
-            i.setAttribute("id", "smoke-out-" + e), i.className = "smoke-base", i.style.zIndex = t.zindex, 
-            t.zindex++, n.body.appendChild(i);
-        },
-        newdialog: function() {
-            var n = new Date().getTime();
-            return n = Math.random(1, 99) + n, t.init ? t.bodyload(n) : t.listen(e, "load", function() {
-                t.bodyload(n);
-            }), n;
-        },
-        forceload: function() {},
-        build: function(n, i) {
-            t.i++, i.stack = t.i, n = n.replace(/\n/g, "<br />"), n = n.replace(/\r/g, "<br />");
-            var o, a = "", d = "OK", l = "Cancel", c = "", u = "";
-            "prompt" === i.type && (a = '<div class="smoke-dialog-prompt"><input class="input" id="smoke-dialog-input-' + i.newid + '" type="text" ' + (i.params.value ? 'value="' + i.params.value + '"' : "") + " /></div>"), 
-            i.params.ok && (d = i.params.ok), i.params.cancel && (l = i.params.cancel), i.params.classname && (c = i.params.classname), 
-            "signal" !== i.type && (u = '<div class="smoke-dialog-buttons">', "alert" === i.type ? u += '<button class="btn btn-md btn-round" id="alert-ok-' + i.newid + '">' + d + "</button>" : "quiz" === i.type ? (i.params.button_1 && (u += '<button class="btn btn-md btn-round quiz-button" id="' + i.type + "-ok1-" + i.newid + '">' + i.params.button_1 + "</button>"), 
-            i.params.button_2 && (u += '<button class="btn btn-md btn-round quiz-button" id="' + i.type + "-ok2-" + i.newid + '">' + i.params.button_2 + "</button>"), 
-            i.params.button_3 && (u += '<button class="btn btn-md btn-round quiz-button" id="' + i.type + "-ok3-" + i.newid + '">' + i.params.button_3 + "</button>"), 
-            i.params.button_cancel && (u += '<button id="' + i.type + "-cancel-" + i.newid + '" class="btn btn-md btn-round cancel">' + i.params.button_cancel + "</button>")) : "prompt" !== i.type && "confirm" !== i.type || (u += i.params.reverseButtons ? '<button class="btn btn-md btn-round btn-primary" id="' + i.type + "-ok-" + i.newid + '">' + d + '</button><button class="btn btn-md btn-round cancel" id="' + i.type + "-cancel-" + i.newid + '">' + l + "</button>" : '<button class="btn btn-md btn-round cancel" id="' + i.type + "-cancel-" + i.newid + '">' + l + '</button><button class="btn btn-md btn-round btn-primary" id="' + i.type + "-ok-" + i.newid + '">' + d + "</button>"), 
-            u += "</div>"), o = '<div class="smoke-dialog smoke ' + c + '"><div class="smoke-dialog-inner">' + n + a + u + "</div></div>", 
-            t.init ? t.finishbuild(n, i, o) : t.listen(e, "load", function() {
-                t.finishbuild(n, i, o);
-            });
-        },
-        finishbuild: function(e, i, o) {
-            var a = n.getElementById("smoke-out-" + i.newid);
-            for (a.className = "smoke-base smoke-visible  smoke-" + i.type, a.innerHTML = o; "" === a.innerHTML; ) a.innerHTML = o;
-            switch (t.smoketimeout[i.newid] && clearTimeout(t.smoketimeout[i.newid]), i.type) {
-              case "alert":
-                t.finishbuildAlert(e, i, o);
-                break;
-
-              case "confirm":
-                t.finishbuildConfirm(e, i, o);
-                break;
-
-              case "quiz":
-                t.finishbuildQuiz(e, i, o);
-                break;
-
-              case "prompt":
-                t.finishbuildPrompt(e, i, o);
-                break;
-
-              case "signal":
-                t.finishbuildSignal(e, i, o);
-                break;
-
-              default:
-                throw "Unknown type: " + i.type;
-            }
-        },
-        finishbuildAlert: function(i, o, a) {
-            t.listen(n.getElementById("alert-ok-" + o.newid), "click", function() {
-                t.destroy(o.type, o.newid), "undefined" != typeof o.callback && o.callback();
-            }), n.onkeyup = function(n) {
-                n || (n = e.event), 13 !== n.keyCode && 32 !== n.keyCode && 27 !== n.keyCode || (t.destroy(o.type, o.newid), 
-                "undefined" != typeof o.callback && o.callback());
-            };
-        },
-        finishbuildConfirm: function(i, o, a) {
-            t.listen(n.getElementById("confirm-cancel-" + o.newid), "click", function() {
-                t.destroy(o.type, o.newid), o.callback(!1);
-            }), t.listen(n.getElementById("confirm-ok-" + o.newid), "click", function() {
-                t.destroy(o.type, o.newid), o.callback(!0);
-            }), n.onkeyup = function(n) {
-                n || (n = e.event), 13 === n.keyCode || 32 === n.keyCode ? (t.destroy(o.type, o.newid), 
-                o.callback(!0)) : 27 === n.keyCode && (t.destroy(o.type, o.newid), o.callback(!1));
-            };
-        },
-        finishbuildQuiz: function(i, o, a) {
-            var d, l, c;
-            t.listen(n.getElementById("quiz-cancel-" + o.newid), "click", function() {
-                t.destroy(o.type, o.newid), o.callback(!1);
-            }), (d = n.getElementById("quiz-ok1-" + o.newid)) && t.listen(d, "click", function() {
-                t.destroy(o.type, o.newid), o.callback(d.innerHTML);
-            }), (l = n.getElementById("quiz-ok2-" + o.newid)) && t.listen(l, "click", function() {
-                t.destroy(o.type, o.newid), o.callback(l.innerHTML);
-            }), (c = n.getElementById("quiz-ok3-" + o.newid)) && t.listen(c, "click", function() {
-                t.destroy(o.type, o.newid), o.callback(c.innerHTML);
-            }), n.onkeyup = function(n) {
-                n || (n = e.event), 27 === n.keyCode && (t.destroy(o.type, o.newid), o.callback(!1));
-            };
-        },
-        finishbuildPrompt: function(i, o, a) {
-            var d = n.getElementById("smoke-dialog-input-" + o.newid);
-            setTimeout(function() {
-                d.focus(), d.select();
-            }, 100), t.listen(n.getElementById("prompt-cancel-" + o.newid), "click", function() {
-                t.destroy(o.type, o.newid), o.callback(!1);
-            }), t.listen(n.getElementById("prompt-ok-" + o.newid), "click", function() {
-                t.destroy(o.type, o.newid), o.callback(d.value);
-            }), n.onkeyup = function(n) {
-                n || (n = e.event), 13 === n.keyCode ? (t.destroy(o.type, o.newid), o.callback(d.value)) : 27 === n.keyCode && (t.destroy(o.type, o.newid), 
-                o.callback(!1));
-            };
-        },
-        finishbuildSignal: function(i, o, a) {
-            n.onkeyup = function(n) {
-                n || (n = e.event), 27 === n.keyCode && (t.destroy(o.type, o.newid), "undefined" != typeof o.callback && o.callback());
-            }, t.smoketimeout[o.newid] = setTimeout(function() {
-                t.destroy(o.type, o.newid), "undefined" != typeof o.callback && o.callback();
-            }, o.timeout);
-        },
-        destroy: function(e, i) {
-            var o = n.getElementById("smoke-out-" + i);
-            if ("quiz" !== e) var a = n.getElementById(e + "-ok-" + i);
-            var d = n.getElementById(e + "-cancel-" + i);
-            if (o.className = "smoke-base", a && (t.stoplistening(a, "click", function() {}), 
-            n.onkeyup = null), "quiz" === e) for (var l = n.getElementsByClassName("quiz-button"), c = 0; c < l.length; c++) t.stoplistening(l[c], "click", function() {}), 
-            n.onkeyup = null;
-            d && t.stoplistening(d, "click", function() {}), t.i = 0, o.innerHTML = "";
-        },
-        alert: function(e, n, i) {
-            "object" != typeof i && (i = !1);
-            var o = t.newdialog();
-            t.build(e, {
-                type: "alert",
-                callback: n,
-                params: i,
-                newid: o
-            });
-        },
-        signal: function(e, n, i) {
-            "object" != typeof i && (i = !1);
-            var o = 5e3;
-            "undefined" !== i.duration && (o = i.duration);
-            var a = t.newdialog();
-            t.build(e, {
-                type: "signal",
-                callback: n,
-                timeout: o,
-                params: i,
-                newid: a
-            });
-        },
-        confirm: function(e, n, i) {
-            "object" != typeof i && (i = !1);
-            var o = t.newdialog();
-            t.build(e, {
-                type: "confirm",
-                callback: n,
-                params: i,
-                newid: o
-            });
-        },
-        quiz: function(e, n, i) {
-            "object" != typeof i && (i = !1);
-            var o = t.newdialog();
-            t.build(e, {
-                type: "quiz",
-                callback: n,
-                params: i,
-                newid: o
-            });
-        },
-        prompt: function(e, n, i) {
-            "object" != typeof i && (i = !1);
-            var o = t.newdialog();
-            return t.build(e, {
-                type: "prompt",
-                callback: n,
-                params: i,
-                newid: o
-            });
-        },
-        listen: function(e, n, t) {
-            return e.addEventListener ? e.addEventListener(n, t, !1) : !!e.attachEvent && e.attachEvent("on" + n, t);
-        },
-        stoplistening: function(e, n, t) {
-            return e.removeEventListener ? e.removeEventListener(n, t, !1) : !!e.detachEvent && e.detachEvent("on" + n, t);
-        }
-    };
-    t.init = !0, "undefined" != typeof module && module.exports ? module.exports = t : "function" == typeof define && define.amd ? define("smoke", [], function() {
-        return t;
-    }) : this.smoke = t;
-}(window, document);
-function validateEmail(e) {
-    var t = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
-    return t.test(e);
-}
-
-function zero_pad(e) {
-    return zero = 2 - e.toString().length + 1, Array(+(zero > 0 && zero)).join("0") + e;
-}
-
-function format_time(e) {
-    return isNaN(e) && (e = 0), zero_pad(parseInt(e / 60)) + ":" + zero_pad(parseInt(e % 60));
-}
-
-function urls_to_links(e) {
-    return e.replace(url_to_links_rx, "$1<a target='_blank' href='$2'>$2</a>");
-}
-
-function get_query_param(e) {
-    e = e.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
-    var t = new RegExp("[\\?&]" + e + "=([^&#]*)"), r = t.exec(location.search);
-    return null == r ? "" : decodeURIComponent(r[1].replace(/\+/g, " "));
-}
-
-function random_string(e) {
-    for (var t = "", r = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!-_", a = 0; a < e; a++) t += r.charAt(Math.floor(Math.random() * r.length));
-    return t;
-}
-
-function fixup_touches(e) {
-    var t = e;
-    return e.originalEvent && (t = e.originalEvent), e = {
-        pageX: e.pageX,
-        pageY: e.pageY,
-        offsetX: e.offsetX,
-        offsetY: e.offsetY,
-        clientX: e.clientX,
-        clientY: e.clientY,
-        layerX: e.layerX,
-        layerY: e.layerY,
-        target: e.target,
-        currentTarget: e.currentTarget
-    }, t.changedTouches && t.changedTouches.length ? (e.pageX = t.changedTouches[0].pageX, 
-    e.pageY = t.changedTouches[0].pageY) : t.touches && t.touches.length && (e.pageX = t.touches[0].pageX, 
-    e.pageY = t.touches[0].pageY), e;
-}
-
-function rgb_to_hex(e, t, r) {
-    return ((1 << 24) + (parseInt(e) << 16) + (parseInt(t) << 8) + parseInt(r)).toString(16).slice(1);
-}
-
-function hex_to_rgba(e) {
-    if (!e || "transparent" == e) return {
-        r: 0,
-        g: 0,
-        b: 0,
-        a: 0
-    };
-    if (e.match("rgb\\(")) return e = e.replace("rgb(", "").replace(")", "").split(","), 
-    {
-        r: e[0],
-        g: e[1],
-        b: e[2],
-        a: 255
-    };
-    if (e.match("rgba\\(")) return e = e.replace("rgba(", "").replace(")", "").split(","), 
-    {
-        r: e[0],
-        g: e[1],
-        b: e[2],
-        a: 255 * e[3]
-    };
-    var t = parseInt(e.substr(1, 2), 16), r = parseInt(e.substr(3, 2), 16), a = parseInt(e.substr(5, 2), 16), n = 255;
-    return e.length > 7 && (n = parseInt(e.substr(7, 2), 16)), {
-        r: t,
-        g: r,
-        b: a,
-        a: n
-    };
-}
-
-function rgb_to_hsv() {
-    var e, t, r, a, n, o = arguments[0] / 255, c = arguments[1] / 255, i = arguments[2] / 255, s = Math.max(o, c, i), l = s - Math.min(o, c, i), g = function(e) {
-        return (s - e) / 6 / l + .5;
-    };
-    return 0 == l ? a = n = 0 : (n = l / s, e = g(o), t = g(c), r = g(i), o === s ? a = r - t : c === s ? a = 1 / 3 + e - r : i === s && (a = 2 / 3 + t - e), 
-    a < 0 ? a += 1 : a > 1 && (a -= 1)), {
-        h: a || 0,
-        s: n || 0,
-        v: s || 0
-    };
-}
-
-function hsv_to_rgb(e, t, r) {
-    var a, n, o, c, i, s, l, g;
-    switch (e && void 0 === t && void 0 === r && (t = e.s, r = e.v, e = e.h), c = Math.floor(6 * e), 
-    i = 6 * e - c, s = r * (1 - t), l = r * (1 - i * t), g = r * (1 - (1 - i) * t), 
-    c % 6) {
-      case 0:
-        a = r, n = g, o = s;
-        break;
-
-      case 1:
-        a = l, n = r, o = s;
-        break;
-
-      case 2:
-        a = s, n = r, o = g;
-        break;
-
-      case 3:
-        a = s, n = l, o = r;
-        break;
-
-      case 4:
-        a = g, n = s, o = r;
-        break;
-
-      case 5:
-        a = r, n = s, o = l;
-    }
-    return {
-        r: Math.round(255 * a),
-        g: Math.round(255 * n),
-        b: Math.round(255 * o)
-    };
-}
-
-function render_grid(e, t, r) {
-    temp_grid_canvas.width = e, temp_grid_canvas.height = t;
-    var a = e / r, n = temp_grid_canvas.getContext("2d");
-    n.strokeStyle = "#f0f0f0", n.lineWidth = 1;
-    for (var o = "rgba(60,60,60,0.125)", c = "rgba(60,60,60,0.075)", i = 0; i < t; i += a) 0 == i ? n.fillStyle = o : n.fillStyle = c, 
-    n.fillRect(0, i, e, 1);
-    for (var s = 0; s < t; s += a) 0 == s ? n.fillStyle = o : n.fillStyle = c, n.fillRect(s, 0, 1, t);
-    var l = temp_grid_canvas.toDataURL();
-    return l;
-}
-
-function focus_contenteditable(e, t) {
-    if (range = document.createRange(), range && e) {
-        var r = $(e).find("p");
-        r.length && (r = r[r.length - 1], range.selectNodeContents(r), selection = window.getSelection(), 
-        selection.removeAllRanges(), "Text" != range.toString() && range.collapse(!1), selection.addRange(range), 
-        e.focus());
-    }
-}
-
-function setup_exclusive_audio_video_playback() {
-    document.addEventListener("play", function(e) {
-        for (var t = [ "audio", "video" ], r = 0; r < t.length; r++) for (var a = t[r], n = document.getElementsByTagName(a), r = 0, o = n.length; r < o; r++) n[r] != e.target && n[r].pause();
-    }, !0);
-}
-
-var url_to_links_rx = /(^|[\s\n]|>)((?:https?|ftp):\/\/[\-A-Z0-9+\u0026\u2019@#\/%?=()~_|!:,.;]*[\-A-Z0-9+\u0026@#\/%=~()_|])/gi;
-
-temp_grid_canvas = document.createElement("canvas");
-GrowingPacker = function() {}, GrowingPacker.prototype = {
-    fit: function(o) {
-        var t, i, h, r = o.length, n = r > 0 ? o[0].w : 0, s = r > 0 ? o[0].h : 0;
-        for (this.root = {
-            x: 0,
-            y: 0,
-            w: n,
-            h: s
-        }, t = 0; t < r; t++) h = o[t], (i = this.findNode(this.root, h.w, h.h)) ? h.fit = this.splitNode(i, h.w, h.h) : h.fit = this.growNode(h.w, h.h);
-    },
-    findNode: function(o, t, i) {
-        return o.used ? this.findNode(o.right, t, i) || this.findNode(o.down, t, i) : t <= o.w && i <= o.h ? o : null;
-    },
-    splitNode: function(o, t, i) {
-        return o.used = !0, o.down = {
-            x: o.x,
-            y: o.y + i,
-            w: o.w,
-            h: o.h - i
-        }, o.right = {
-            x: o.x + t,
-            y: o.y,
-            w: o.w - t,
-            h: i
-        }, o;
-    },
-    growNode: function(o, t) {
-        var i = o <= this.root.w, h = t <= this.root.h, r = h && this.root.h >= this.root.w + o, n = i && this.root.w >= this.root.h + t;
-        return r ? this.growRight(o, t) : n ? this.growDown(o, t) : h ? this.growRight(o, t) : i ? this.growDown(o, t) : null;
-    },
-    growRight: function(o, t) {
-        return this.root = {
-            used: !0,
-            x: 0,
-            y: 0,
-            w: this.root.w + o,
-            h: this.root.h,
-            down: this.root,
-            right: {
-                x: this.root.w,
-                y: 0,
-                w: o,
-                h: this.root.h
-            }
-        }, (node = this.findNode(this.root, o, t)) ? this.splitNode(node, o, t) : null;
-    },
-    growDown: function(o, t) {
-        return this.root = {
-            used: !0,
-            x: 0,
-            y: 0,
-            w: this.root.w,
-            h: this.root.h + t,
-            down: {
-                x: 0,
-                y: this.root.h,
-                w: this.root.w,
-                h: t
-            },
-            right: this.root
-        }, (node = this.findNode(this.root, o, t)) ? this.splitNode(node, o, t) : null;
-    }
-};
-var SpacedeckRoutes = {
-    internal_route: function(t, i) {
-        this.router || (this.router = new RouteRecognizer(), this.router.add([ {
-            path: "/spaces/:id",
-            handler: function(t, i) {
-                this.load_space(t.id, i);
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/confirm/:token",
-            handler: function(t) {
-                this.logged_in ? this.confirm_account(t.token) : this.redirect_to("/login");
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/password-confirm/:token",
-            handler: function(t) {
-                console.log(t.token), this.logged_in ? this.redirect_to("/spaces") : (this.reset_token = t.token, 
-                this.active_view = "password-confirm");
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/password-reset",
-            handler: function(t, i) {
-                this.logged_in || (this.active_view = "password-reset");
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/accept/:membership_id",
-            handler: function(t, i) {
-                if (this.logged_in) {
-                    var e = get_query_param("code");
-                    accept_invitation(t.membership_id, e, function(t) {
-                        window._spacedeck_location_change = !0, location.href = "/spaces/" + t.space._id;
-                    }.bind(this), function(t) {
-                        smoke.alert("Error (" + t.status + ")", function() {
-                            this.redirect_to("/spaces");
-                        }.bind(this));
-                    }.bind(this));
-                } else this.redirect_to("/login");
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/signup",
-            handler: function(t) {
-                var i = get_query_param("code");
-                i && (this.invitation_token = i), this.logged_in ? this.redirect_to("/spaces") : this.active_view = "signup";
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/login",
-            handler: function(t) {
-                this.logged_in ? this.invitation_token ? accept_invitation(this.accept_invitation, function(t) {
-                    window._spacedeck_location_change = !0, location.href = "spaces/" + t.space_id;
-                }.bind(this), function(t) {
-                    console.error(t);
-                }) : this.redirect_to("/spaces") : (this.active_view = "login", token = get_query_param("code"), 
-                token && this.login_with_token(token));
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/logout",
-            handler: function(t) {
-                this.logged_in ? this.logout(function(t) {
-                    this.redirect_to("/login");
-                }.bind(this), function(t) {
-                    console.error(t);
-                }) : this.redirect_to("/login");
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/spaces",
-            handler: function(t) {
-                this.logged_in ? this.logged_in && this.user.home_folder_id ? this.load_space(this.user.home_folder_id) : location.href = "/" : (window._spacedeck_location_change = !0, 
-                location.href = "/login");
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/account",
-            handler: function(t) {
-                this.logged_in ? (this.active_view = "account", this.load_subscription()) : (window._spacedeck_location_change = !0, 
-                location.href = "/");
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/team",
-            handler: function(t) {
-                this.logged_in ? (this.active_view = "team", this.load_team()) : (window._spacedeck_location_change = !0, 
-                location.href = "/");
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/folders/:id",
-            handler: function(t) {
-                this.load_space(t.id, null, function(t) {
-                    console.log("couldn't load folder: " + t.status), this.redirect_to("/spaces", function() {});
-                }.bind(this));
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/",
-            handler: function(t) {
-                location.href = "/";
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/terms",
-            handler: function(t) {
-                location.href = "/terms";
-            }.bind(this)
-        } ]), this.router.add([ {
-            path: "/privacy",
-            handler: function(t) {
-                location.href = "/privacy";
-            }.bind(this)
-        } ]));
-        var e = this.router.recognize(t);
-        e ? e[0].handler(e[0].params, i) : location.href = "/not_found";
-    },
-    route: function() {
-        if (window.onpopstate = function(t) {
-            t.preventDefault(), this.internal_route(location.pathname);
-        }.bind(this), $("body").on("click", "a", function(t) {
-            t.currentTarget.hash && t.currentTarget.hash.length > 1 || (console.log("clicked", t.currentTarget.pathname), 
-            t.currentTarget.host == location.host && (t.metaKey || t.ctrlKey || t.shiftKey || t.currentTarget.pathname.match(/^\/t\//) || (this.internal_route(t.currentTarget.pathname), 
-            history.pushState(null, null, t.currentTarget.pathname), t.preventDefault())));
-        }.bind(this)), location.host != ENV.webHost) {
-            if (!subdomainTeam) return void (location.href = ENV.webEndpoint);
-            if (!subdomainTeam.subdomain) return void (location.href = ENV.webEndpoint);
-            var t = subdomainTeam.subdomain + "." + ENV.webHost;
-            if (location.host != t) return void (location.href = t);
-        }
-        if (this.logged_in && this.user.team && this.user.team.subdomain && this.user.team.subdomain.length > 0) {
-            var t = this.user.team.subdomain + "." + ENV.webHost;
-            if (location.host != t) return void (location.href = location.protocol + "//" + t + location.pathname);
-        }
-        this.internal_route(location.pathname);
-    },
-    open_url: function(t) {
-        window.open(t, "_blank");
-    },
-    redirect_to: function(t, i) {
-        i ? (this.internal_route(t, i), history.pushState(null, null, t)) : (window._spacedeck_location_change = !0, 
-        location.href = t);
-    },
-    link_to_parent_folder: function(t) {
-        return "/folders/" + t;
-    },
-    link_to_space: function(t) {
-        return "/" + t.space_type + "s/" + t._id;
-    }
-};
-var SpacedeckFormatting = {
-    apply_formatting: function(e, o, t, a) {
-        console.log("apply_formatting: ", e, o);
-        var n = _scribe_handle_for_object[e._id], c = n.getCommand(o);
-        "createLink" == o && (t = prompt("Link URL?")), n.el.focus(), c.execute(t, a);
-    }
-};
-var SpacedeckSections = {
-    data: {
-        MAX_COLUMNS: 20,
-        redo_stack: [],
-        undo_stack: [],
-        opened_dialog: "none",
-        color_options_picker: !1,
-        advanced_properties: !1,
-        embed_code_html: "",
-        active_tool: "pointer",
-        lightbox_artifact: {},
-        snap_ruler_y: -1e3,
-        snap_ruler_x: -1e3,
-        minimap_width: 100,
-        minimap_height: 200,
-        minimap_scale: 10,
-        scroll_left: 0,
-        scroll_top: 0,
-        window_width: 800,
-        window_height: 600,
-        bounds_margin_horiz: 0,
-        bounds_margin_vert: 0,
-        editing_artifact_id: null,
-        selected_artifacts_dict: {},
-        first_selected_artifact: null,
-        selection_metrics: {
-            contains_text: !1,
-            contains_images: !1,
-            contains_audio: !1,
-            contains_vectors: !1,
-            contains_shapes: !1,
-            borders_stylable: !0,
-            count: 0,
-            x: 0,
-            y: 0,
-            w: 0,
-            h: 0,
-            x1: 0,
-            y1: 0,
-            x2: 0,
-            y2: 0,
-            style: "display:none",
-            vector_points: [ {}, {} ],
-            vector_selection: !1
-        },
-        selected_artifacts_json: "",
-        zones: [],
-        user_cursors: [],
-        default_style: {},
-        active_style: {
-            border_radius: 0,
-            stroke: 0,
-            font_family: "Avenir W01",
-            font_size: 18,
-            line_height: 1.5,
-            letter_spacing: 0,
-            stroke_color: "#000000",
-            fill_color: "#00000000",
-            text_color: "#000000",
-            background_color: "#ffffff",
-            padding: 0,
-            padding_horz: 0,
-            padding_vert: 0,
-            padding_top: 0,
-            padding_left: 0,
-            padding_right: 0,
-            padding_bottom: 0,
-            margin: 0,
-            margin_horz: 0,
-            margin_vert: 0,
-            margin_top: 0,
-            margin_left: 0,
-            margin_right: 0,
-            margin_bottom: 0,
-            brightness: 100,
-            contrast: 100,
-            opacity: 100,
-            saturation: 100,
-            blur: 0,
-            hue: 0,
-            columns: 1,
-            column_width: 900,
-            row_height: 0,
-            gutter: 0
-        },
-        color_picker_target: "fill_color",
-        color_picker_saturation: 255,
-        color_picker_value: 255,
-        color_picker_hue: 127,
-        color_picker_opacity: 255,
-        swatches: [ {
-            id: 0,
-            hex: "#4a2f7e"
-        }, {
-            id: 1,
-            hex: "#9b59b6"
-        }, {
-            id: 2,
-            hex: "#3498db"
-        }, {
-            id: 3,
-            hex: "#2ecc71"
-        }, {
-            id: 4,
-            hex: "#f1c40f"
-        }, {
-            id: 5,
-            hex: "#e67e22"
-        }, {
-            id: 6,
-            hex: "#d55c4b"
-        }, {
-            id: 7,
-            hex: "#6f4021"
-        }, {
-            id: 8,
-            hex: "#ffffff"
-        }, {
-            id: 9,
-            hex: "#95a5a6"
-        }, {
-            id: 10,
-            hex: "#252525"
-        }, {
-            id: 11,
-            hex: "rgba(0,0,0,0)"
-        } ],
-        swatches_text: [ {
-            id: 1,
-            hex: "#9b59b6"
-        }, {
-            id: 2,
-            hex: "#3498db"
-        }, {
-            id: 3,
-            hex: "#2ecc71"
-        }, {
-            id: 4,
-            hex: "#f1c40f"
-        }, {
-            id: 5,
-            hex: "#e67e22"
-        }, {
-            id: 6,
-            hex: "#d55c4b"
-        }, {
-            id: 8,
-            hex: "#ffffff"
-        }, {
-            id: 10,
-            hex: "#252525"
-        } ],
-        fonts: [ "Arial", "Courier", "Georgia", "Verdana", "Comic Sans MS", "Montserrat", "Lato", "Roboto", "Crimson Text", "EB Garamond", "Vollkorn", "Avenir W01" ],
-        detected_text_formats: {},
-        active_text_format_name: "Paragraph",
-        image_search_results: [],
-        video_search_results: [],
-        audio_search_results: [],
-        generic_search_query: "",
-        media_search_target: "google",
-        search_loading: !1,
-        viewport_zoom: 1,
-        viewport_zoom_percent: 100,
-        bounds_zoom: 1,
-        current_zone_idx: -1,
-        margin_mode: "global",
-        padding_mode: "global",
-        delete_artifact: "unconfirmed",
-        color_mode: "palette",
-        background_mode: "image",
-        layout_mode: "layout",
-        follow_mode: !0,
-        space_background_uploading: !1,
-        toolbar_props_x: 0,
-        toolbar_props_y: 0,
-        toolbar_props_in: !1,
-        toolbar_artifacts_x: "-1000px",
-        toolbar_artifacts_y: "-1000px",
-        toolbar_artifacts_in: !1
-    },
-    methods: {
-        setup_section_module: function() {
-            this.default_style = _.clone(this.active_style), Mousetrap.bind("del", function(t) {
-                this.if_editable(function() {
-                    this.delete_selected_artifacts(t);
-                });
-            }.bind(this)), Mousetrap.bind("backspace", function(t) {
-                this.if_editable(function() {
-                    this.delete_selected_artifacts(t);
-                });
-            }.bind(this)), Mousetrap.bind([ "command+d", "ctrl+d" ], function(t) {
-                t.preventDefault(), t.stopPropagation(), this.if_editable(function() {
-                    this.duplicate_selected_artifacts();
-                });
-            }.bind(this)), Mousetrap.bind([ "command+z", "ctrl+z" ], function(t) {
-                this.if_editable(function() {
-                    this.undo();
-                });
-            }.bind(this)), Mousetrap.bind([ "command+shift+z", "ctrl+shift+z" ], function(t) {
-                this.if_editable(function() {
-                    this.redo();
-                });
-            }.bind(this)), Mousetrap.bind([ "command+a", "ctrl+a" ], function(t) {
-                this.if_editable(function() {
-                    this.select_all_artifacts();
-                });
-            }.bind(this)), Mousetrap.bind([ "command+e", "ctrl+e" ], function(t) {
-                this.if_editable(function() {
-                    this.toggle_full_width();
-                });
-            }.bind(this)), Mousetrap.bind([ "command+=", "ctrl+=" ], function(t) {
-                t.preventDefault(), t.stopPropagation(), this.zoom_in();
-            }.bind(this)), Mousetrap.bind([ "command+-", "ctrl+-" ], function(t) {
-                t.preventDefault(), t.stopPropagation(), this.zoom_out();
-            }.bind(this)), Mousetrap.bind("+", function(t) {
-                t.preventDefault(), t.stopPropagation(), this.zoom_in();
-            }.bind(this)), Mousetrap.bind("-", function(t) {
-                t.preventDefault(), t.stopPropagation(), this.zoom_out();
-            }.bind(this)), Mousetrap.bind("up", function(t) {
-                this.nudge_selected_artifacts(0, -1, t);
-            }.bind(this)), Mousetrap.bind("down", function(t) {
-                this.nudge_selected_artifacts(0, 1, t);
-            }.bind(this)), Mousetrap.bind("left", function(t) {
-                this.nudge_selected_artifacts(-1, 0, t);
-            }.bind(this)), Mousetrap.bind("right", function(t) {
-                this.nudge_selected_artifacts(1, 0, t);
-            }.bind(this)), Mousetrap.bind("shift+up", function(t) {
-                this.if_editable(function() {
-                    this.nudge_selected_artifacts(0, -10, t);
-                });
-            }.bind(this)), Mousetrap.bind("shift+down", function(t) {
-                this.if_editable(function() {
-                    this.nudge_selected_artifacts(0, 10, t);
-                });
-            }.bind(this)), Mousetrap.bind("shift+left", function(t) {
-                this.if_editable(function() {
-                    this.nudge_selected_artifacts(-10, 0, t);
-                });
-            }.bind(this)), Mousetrap.bind("shift+right", function(t) {
-                this.if_editable(function() {
-                    this.nudge_selected_artifacts(10, 0, t);
-                });
-            }.bind(this)), Mousetrap.bind("space", function(t) {
-                this.activate_pan_tool(t);
-            }.bind(this)), $(document).bind("beforecopy", this.handle_onbeforecopy.bind(this)), 
-            $(window).bind("beforeunload", this.handle_onunload.bind(this)), $(window).bind("resize", this.handle_window_resize.bind(this));
-        },
-        setup_watches: function() {
-            this.$watch("active_style.stroke", function(t, i) {
-                this.set_artifact_style_prop("stroke", parseInt(this.active_style.stroke));
-            }.bind(this)), this.$watch("active_style.border_radius", function(t, i) {
-                this.set_artifact_style_prop("border_radius", parseInt(this.active_style.border_radius));
-            }.bind(this)), this.$watch("active_style.padding", function(t, i) {
-                this.active_style.padding_horz = this.active_style.padding, this.active_style.padding_vert = this.active_style.padding;
-            }.bind(this)), this.$watch("active_style.padding_horz", function(t, i) {
-                this.active_style.padding_left = this.active_style.padding_horz, this.active_style.padding_right = this.active_style.padding_horz;
-            }.bind(this)), this.$watch("active_style.padding_vert", function(t, i) {
-                this.active_style.padding_top = this.active_style.padding_vert, this.active_style.padding_bottom = this.active_style.padding_vert;
-            }.bind(this)), this.$watch("active_style.padding_top", function(t, i) {
-                this.set_artifact_style_prop("padding_top", parseInt(this.active_style.padding_top));
-            }.bind(this)), this.$watch("active_style.padding_bottom", function(t, i) {
-                this.set_artifact_style_prop("padding_bottom", parseInt(this.active_style.padding_bottom));
-            }.bind(this)), this.$watch("active_style.padding_left", function(t, i) {
-                this.set_artifact_style_prop("padding_left", parseInt(this.active_style.padding_left));
-            }.bind(this)), this.$watch("active_style.padding_right", function(t, i) {
-                this.set_artifact_style_prop("padding_right", parseInt(this.active_style.padding_right));
-            }.bind(this)), this.$watch("active_style.margin", function(t, i) {
-                this.active_style.margin_horz = this.active_style.margin, this.active_style.margin_vert = this.active_style.margin;
-            }.bind(this)), this.$watch("active_style.margin_horz", function(t, i) {
-                this.active_style.margin_left = this.active_style.margin_horz, this.active_style.margin_right = this.active_style.margin_horz;
-            }.bind(this)), this.$watch("active_style.margin_vert", function(t, i) {
-                this.active_style.margin_top = this.active_style.margin_vert, this.active_style.margin_bottom = this.active_style.margin_vert;
-            }.bind(this)), this.$watch("active_style.margin_top", function(t, i) {
-                this.set_artifact_style_prop("margin_top", parseInt(this.active_style.margin_top));
-            }.bind(this)), this.$watch("active_style.margin_bottom", function(t, i) {
-                this.set_artifact_style_prop("margin_bottom", parseInt(this.active_style.margin_bottom));
-            }.bind(this)), this.$watch("active_style.margin_left", function(t, i) {
-                this.set_artifact_style_prop("margin_left", parseInt(this.active_style.margin_left));
-            }.bind(this)), this.$watch("active_style.margin_right", function(t, i) {
-                this.set_artifact_style_prop("margin_right", parseInt(this.active_style.margin_right));
-            }.bind(this)), this.$watch("active_style.stroke_color", function(t, i) {
-                this.set_artifact_style_prop("stroke_color", this.active_style.stroke_color);
-                var e = hex_to_rgba(this.active_style.stroke_color), a = rgb_to_hsv(e.r, e.g, e.b);
-                this.active_style.stroke_color_hsv = a;
-            }.bind(this)), this.$watch("active_style.fill_color", function(t, i) {
-                this.set_artifact_style_prop("fill_color", this.active_style.fill_color);
-                var e = hex_to_rgba(this.active_style.fill_color), a = rgb_to_hsv(e.r, e.g, e.b);
-                this.active_style.fill_color_hsv = a;
-            }.bind(this)), this.$watch("active_style.text_color", function(t, i) {
-                this.set_artifact_style_prop("text_color", this.active_style.text_color), this.apply_formatting(null, "forecolor", this.active_style.text_color);
-                var e = hex_to_rgba(this.active_style.text_color), a = rgb_to_hsv(e.r, e.g, e.b);
-                this.active_style.text_color_hsv = a;
-            }.bind(this)), this.$watch("active_style.font_size", function(t, i) {
-                this.apply_formatting(null, "preciseFontSize", this.active_style.font_size + "px");
-            }.bind(this)), this.$watch("active_style.line_height", function(t, i) {
-                this.apply_formatting(null, "lineHeight", this.active_style.line_height + "em");
-            }.bind(this)), this.$watch("active_style.letter_spacing", function(t, i) {
-                this.apply_formatting(null, "letterSpacing", this.active_style.letter_spacing + "px");
-            }.bind(this)), this.$watch("color_picker_hue", function(t, i) {
-                this.apply_color_picker();
-            }.bind(this)), this.$watch("color_picker_value", function(t, i) {
-                this.apply_color_picker();
-            }.bind(this)), this.$watch("color_picker_saturation", function(t, i) {
-                this.apply_color_picker();
-            }.bind(this)), this.$watch("color_picker_opacity", function(t, i) {
-                this.apply_color_picker();
-            }.bind(this)), this.$watch("active_style.brightness", function(t, i) {
-                this.set_artifact_style_prop("brightness", parseInt(this.active_style.brightness));
-            }.bind(this)), this.$watch("active_style.blur", function(t, i) {
-                this.set_artifact_style_prop("blur", parseInt(this.active_style.blur));
-            }.bind(this)), this.$watch("active_style.contrast", function(t, i) {
-                this.set_artifact_style_prop("contrast", parseInt(this.active_style.contrast));
-            }.bind(this)), this.$watch("active_style.saturation", function(t, i) {
-                this.set_artifact_style_prop("saturation", parseInt(this.active_style.saturation));
-            }.bind(this)), this.$watch("active_style.hue", function(t, i) {
-                this.set_artifact_style_prop("hue", parseInt(this.active_style.hue));
-            }.bind(this)), this.$watch("active_style.opacity", function(t, i) {
-                this.set_artifact_style_prop("opacity", parseInt(this.active_style.opacity));
-            }.bind(this)), this.throttled_save_active_space = _.throttle(function() {
-                save_space(this.active_space);
-            }.bind(this), 2e3), this.$watch("active_style.background_color", function(t, i) {
-                this.active_style.background_color != this.active_space.advanced.background_color && (this.$set("active_space.advanced.background_color", this.active_style.background_color), 
-                this.throttled_save_active_space());
-                var e = hex_to_rgba(this.active_style.background_color), a = rgb_to_hsv(e.r, e.g, e.b);
-                this.active_style.background_color_hsv = a;
-            }.bind(this));
-        },
-        if_editable: function(t) {
-            "viewer" != this.active_space_role && t.bind(this)();
-        },
-        background_image_style: function(t) {
-            if (!t) return null;
-            isNaN(t.length) && (t = [ t ]);
-            for (var i = 0; i < t.length; i++) if (t[i] && t[i].length > 0) return "background-image: url(" + t[i] + ")";
-        },
-        space_thumbnail_style: function(t) {
-            return t.avatar_thumb_uri && t.avatar_thumb_uri.length > 0 ? "background-image:url('" + t.avatar_thumb_uri + "')" : "folder" == t.space_type ? "" : "background-image:url('/api/spaces/" + t._id + "/png')";
-        },
-        reset_artifact_filters: function() {
-            this.active_style.brightness = this.default_style.brightness, this.active_style.contrast = this.default_style.contrast, 
-            this.active_style.opacity = this.default_style.opacity, this.active_style.saturation = this.default_style.saturation, 
-            this.active_style.blur = this.default_style.blur, this.active_style.hue = this.default_style.hue;
-        },
-        increase_columns: function() {
-            this.active_style.columns < this.MAX_COLUMNS && this.active_style.columns++;
-        },
-        decrease_columns: function() {
-            this.active_style.columns > 1 && this.active_style.columns--;
-        },
-        extract_properties_from_selection: function() {
-            this.skip_formatting = !0;
-            var t = this.selected_artifacts();
-            if (window.setTimeout(function() {
-                this.skip_formatting = !1;
-            }.bind(this), 10), t.length) {
-                if (1 == t.length) {
-                    for (var i = t[0], e = [ "stroke", "border_radius", "letter_spacing", "stroke_color", "fill_color", "text_color" ], a = 0; a < e.length; a++) {
-                        var s = e[a];
-                        this.active_style[s] = i.style[s];
-                    }
-                    this.active_style.font_size = this.default_style.font_size, this.active_style.line_height = this.default_style.line_height, 
-                    this.active_style.letter_spacing = this.default_style.letter_spacing, this.active_style.padding_top = i.style.padding_top || 0, 
-                    this.active_style.padding_bottom = i.style.padding_bottom || 0, this.active_style.padding_left = i.style.padding_left || 0, 
-                    this.active_style.padding_right = i.style.padding_right || 0, this.active_style.padding_top == this.active_style.padding_bottom && (this.active_style.padding_vert = this.active_style.padding_top), 
-                    this.active_style.padding_left == this.active_style.padding_right && (this.active_style.padding_horz = this.active_style.padding_left), 
-                    this.active_style.padding_top == this.active_style.padding_bottom && this.active_style.padding_left == this.active_style.padding_right && this.active_style.padding_left == this.active_style.padding_top && (this.active_style.padding = this.active_style.padding_top), 
-                    this.active_style.margin_top = i.style.margin_top || 0, this.active_style.margin_bottom = i.style.margin_bottom || 0, 
-                    this.active_style.margin_left = i.style.margin_left || 0, this.active_style.margin_right = i.style.margin_right || 0, 
-                    this.active_style.margin_top == this.active_style.margin_bottom && (this.active_style.margin_vert = this.active_style.margin_top), 
-                    this.active_style.margin_left == this.active_style.margin_right && (this.active_style.margin_horz = this.active_style.margin_left), 
-                    this.active_style.margin_top == this.active_style.margin_bottom && this.active_style.margin_left == this.active_style.margin_right && this.active_style.margin_left == this.active_style.margin_top && (this.active_style.margin = this.active_style.margin_top);
-                }
-                this.update_selection_metrics(), this.selection_metrics.contains_text = !1, this.selection_metrics.contains_images = !1, 
-                this.selection_metrics.contains_audio = !1, this.selection_metrics.contains_embeds = !1, 
-                this.selection_metrics.contains_vectors = !1, this.selection_metrics.contains_shapes = !1, 
-                this.selection_metrics.borders_stylable = !1;
-                var o = _.filter(t, function(t) {
-                    return "text/html" == t.mime || "x-spacedeck/shape" == t.mime;
-                });
-                if (o.length >= 1 && (this.selection_metrics.contains_text = !0, 1 == o.length)) {
-                    var i = o[0], n = $("<div>" + i.description + "</div>")[0], r = n.firstChild;
-                    do r && r.style && (r.style.fontSize && (this.active_style.font_size = parseInt(r.style.fontSize)), 
-                    r.style.fontFamily && (this.active_style.font_family = r.style.fontFamily), r.style.letterSpacing && (this.active_style.letter_spacing = parseInt(r.style.letterSpacing)), 
-                    r.style.lineHeight && (this.active_style.line_height = parseFloat(r.style.lineHeight)), 
-                    r.style.color && (this.active_style.text_color = r.style.color)); while (r && (r = n.nextSibling));
-                }
-                1 == t.length && this.extract_color_picker_from_selection();
-                var c = _.filter(t, function(t) {
-                    return t.mime.match("image");
-                });
-                c.length >= 1 && (this.selection_metrics.contains_images = !0);
-                var l = _.filter(t, function(t) {
-                    return t.mime.match("audio");
-                });
-                l.length >= 1 && (this.selection_metrics.contains_audio = !0);
-                var h = _.filter(t, function(t) {
-                    return t.mime.match("embed");
-                });
-                h.length >= 1 && (this.selection_metrics.contains_embeds = !0);
-                var h = _.filter(t, function(t) {
-                    return "x-spacedeck/vector" == t.mime;
-                });
-                h.length >= 1 && (this.selection_metrics.contains_vectors = !0);
-                var h = _.filter(t, function(t) {
-                    return "x-spacedeck/shape" == t.mime;
-                });
-                h.length >= 1 && (this.selection_metrics.contains_shapes = !0);
-                var d = this.selection_metrics;
-                this.selection_metrics.borders_stylable = !(d.contains_vectors || d.contains_shapes);
-            }
-        },
-        increase_letter_spacing: function(t) {
-            this.active_style.letter_spacing++;
-        },
-        decrease_letter_spacing: function(t) {
-            this.active_style.letter_spacing--;
-        },
-        apply_font: function(t, i) {
-            this.apply_formatting(t, "fontName", i), this.active_style.font_family = i;
-        },
-        toggle_advanced_properties: function() {
-            this.advanced_properties = !this.advanced_properties;
-        },
-        open_dialog: function(t, i) {
-            return i && (i.stopPropagation(), i.preventDefault()), this.active_tool = "pointer", 
-            this.opened_dialog == t ? void (this.opened_dialog = "none") : (_.contains([ "mobile", "shapes", "zones" ], t) && this.deselect(), 
-            this.opened_dialog = t, (t.match("color") || t.match("background")) && (this.color_picker_target = t.replace("color-", "") + "_color", 
-            this.color_mode = "palette", this.extract_color_picker_from_selection()), _.contains([ "audio", "video", "image", "search" ], t) && $("#" + t + " input")[0] && $("#" + t + " input")[0].focus(), 
-            "background" == this.opened_dialog && (this.color_picker_target = "background_color", 
-            this.background_mode = "color"), void ("info" == this.opened_dialog && (this.access_settings_space = this.active_space, 
-            this.access_settings_memberships = this.active_space_memberships, this.editors_section = "list", 
-            this.active_space_is_readonly || this.embedded ? this.space_info_section = "info" : "admin" == this.active_space_role && (this.space_info_section = "access"))));
-        },
-        toggle_color_options: function() {
-            this.color_options_picker = !this.color_options_picker;
-        },
-        close_lightbox: function() {
-            this.lightbox_artifact = {}, this.close_modal();
-        },
-        prepare_clipboard: function() {
-            "ontouchstart" in window || (this.selected_artifacts_json = JSON.stringify(this.selected_artifacts()), 
-            this.prepare_clipboard_step2());
-        },
-        prepare_clipboard_step2: function() {
-            "ontouchstart" in window || setTimeout(function() {
-                $("#space-clipboard > textarea").length && ($("#space-clipboard > textarea")[0].focus(), 
-                $("#space-clipboard > textarea")[0].select());
-            }, 100);
-        },
-        handle_section_keydown: function(t) {
-            return 67 == t.keyCode && (t.ctrlKey || t.metaKey) && (this.prepare_clipboard(), 
-            this.prepare_clipboard_step2()), !0;
-        },
-        handle_onbeforecopy: function(t) {
-            if (!this.editing_artifact_id) {
-                var i = t.target.nodeName.toLowerCase();
-                "body" == i && (this.prepare_clipboard_step2(), window.setTimeout(function() {
-                    $("#space-clipboard > textarea").length && $("#space-clipboard > textarea")[0].blur();
-                }, 10));
-            }
-        },
-        handle_onunload: function(t) {
-            if (window.artifact_save_queue) {
-                var i = Object.keys(window.artifact_save_queue).length;
-                if (i > 0) {
-                    var e = "There are " + i + " changes that are still being saved. Discard them?";
-                    return t.returnValue = e, e;
-                }
-                window._spacedeck_location_change = !0;
-            }
-        },
-        handle_window_resize: function(t) {
-            this.adjust_bounds_zoom();
-        },
-        handle_scroll: function(t) {
-            "space" == this.active_view && $("#space").length && (el = $("#space")[0], this.scroll_left = el.scrollLeft / this.viewport_zoom, 
-            this.scroll_top = el.scrollTop / this.viewport_zoom, this.window_width = window.innerWidth / this.viewport_zoom, 
-            this.window_height = window.innerHeight / this.viewport_zoom, this.resize_minimap(), 
-            this.logged_in && this.present_mode && "viewer" != this.active_space_role && this.presenter_send_viewport());
-        },
-        presenter_send_viewport: function() {
-            name = this.user.nickname || this.user.email;
-            var t = {
-                action: "viewport",
-                x: this.scroll_left,
-                y: this.scroll_top,
-                w: this.window_width,
-                h: this.window_height,
-                zoom: this.viewport_zoom,
-                name: name,
-                id: this.user._id
-            }, i = JSON.stringify(t);
-            i != this._old_viewport_msg && (this._old_viewport_msg = i, this.present_mode && "viewer" != this.active_space_role && this.websocket_send(t));
-        },
-        presenter_send_media_action: function(t, i, e, a) {
-            name = this.user.nickname || this.user.email;
-            var s = {
-                action: "media",
-                artifact_id: t,
-                type: i,
-                command: e,
-                time: a,
-                name: name,
-                id: this.user._id
-            };
-            this.present_mode && "viewer" != this.active_space_role && this.websocket_send(s);
-        },
-        resize_minimap: function() {
-            this.active_space && this.active_space.advanced && (this.minimap_scale = this.active_space.advanced.width / 100);
-        },
-        handle_minimap_mouseup: function(t) {
-            this.minimap_mouse_state = "idle";
-        },
-        handle_minimap_mousemove: function(t) {
-            "pressed" == this.minimap_mouse_state && this.handle_minimap_mousedown(t);
-        },
-        handle_minimap_mousedown: function(t) {
-            if ($("#space").length) {
-                this.minimap_mouse_state = "pressed", el = $("#space")[0], t = fixup_touches(t);
-                var i = $(t.target).offset(), e = t.pageX - i.left, a = t.pageY - i.top;
-                el.scrollLeft = (e - this.window_width / (2 * this.minimap_scale)) * this.minimap_scale * this.viewport_zoom, 
-                el.scrollTop = (a - this.window_height / (2 * this.minimap_scale)) * this.minimap_scale * this.viewport_zoom, 
-                this.handle_scroll();
-            }
-        },
-        handle_user_cursor_update: function(t) {
-            var i = new Date().getTime();
-            t.t = i;
-            for (var e = !1, a = 0; a < this.user_cursors.length; a++) {
-                var s = this.user_cursors[a];
-                s.id == t.id ? (s.x = t.x, s.y = t.y, s.t = i, s.name = t.name, e = !0) : i - s.t > 5e3 && (s.x = -1e4);
-            }
-            e || this.user_cursors.push(_.clone(t));
-        },
-        handle_presenter_viewport_update: function(t) {
-            this.zoom_to_rect({
-                x1: t.x,
-                y1: t.y,
-                x2: t.x + t.w,
-                y2: t.y + t.h
-            });
-        },
-        handle_presenter_media_update: function(t) {
-            if (this.follow_mode) {
-                if ("audio" == t.type) {
-                    var i = "#artifact-" + t.artifact_id + " .audio";
-                    try {
-                        $(i)[0].dispatchEvent(new Event("remote_" + t.command)), console.log("event dispatched");
-                    } catch (e) {}
-                }
-                if ("video" == t.type) {
-                    var i = "#artifact-" + t.artifact_id + " .video";
-                    try {
-                        $(i)[0].dispatchEvent(new Event("remote_" + t.command)), console.log("event dispatched");
-                    } catch (e) {}
-                }
-            } else console.log("ignore media update, muted");
-        },
-        may_select: function(t) {
-            return !!t && (!!this.active_space && (!("viewer" == this.active_space_role || t.locked && "admin" != this.active_space_role) && !(this.active_space.editors_locking && !this.logged_in && this.guest_nickname != t.editor_name)));
-        },
-        select: function(t, i) {
-            this.may_select(i) && (t && !t.shiftKey && this.is_selected(i) || (t && t.shiftKey || this.deselect(), 
-            t && t.shiftKey && this.selected_artifacts_dict[i._id] ? delete this.selected_artifacts_dict[i._id] : this.selected_artifacts_dict[i._id] = !0, 
-            this.update_board_artifact_viewmodel(i), this.extract_properties_from_selection(), 
-            this.update_selection_metrics(), this.prepare_clipboard(), this.show_toolbar_props()));
-        },
-        select_all_artifacts: function(t) {
-            this.deselect();
-            for (var i = 0; i < this.active_space_artifacts.length; i++) {
-                var e = this.active_space_artifacts[i];
-                this.may_select(e) && (this.selected_artifacts_dict[e._id] = !0, this.update_board_artifact_viewmodel(e));
-            }
-            this.update_selection_metrics(), this.extract_properties_from_selection(), this.prepare_clipboard(), 
-            this.show_toolbar_props();
-        },
-        multi_select: function(t) {
-            for (var i = 0; i < t.length; i++) {
-                var e = t[i];
-                this.may_select(e) && (this.selected_artifacts_dict[e._id] = !0, this.update_board_artifact_viewmodel(e));
-            }
-            this.extract_properties_from_selection(), this.update_selection_metrics(), this.prepare_clipboard(), 
-            this.show_toolbar_props();
-        },
-        discover_zones: function() {
-            this.zones = _.sortBy(_.filter(this.active_space_artifacts, function(t) {
-                return "x-spacedeck/zone" == t.mime;
-            }), function(t) {
-                return t.style.order;
-            });
-        },
-        artifact_plaintext: function(t) {
-            if (!t) return "";
-            var i = $("<div>" + t.description + "</div>").text();
-            return i || "";
-        },
-        deselect: function(t) {
-            if (window._sd_fader_moving) return void (window._sd_fader_moving = !1);
-            this.hide_toolbar_props(), document.getSelection().removeAllRanges(), blur(), this.prepare_clipboard_step2(), 
-            this.discover_zones();
-            var i = this.selected_artifacts();
-            this.selected_artifacts_dict = {};
-            for (var e = 0; e < i.length; e++) {
-                var a = i[e], s = !0;
-                if (a && "text/html" == a.mime) {
-                    var o = this.artifact_plaintext(a);
-                    0 == o.length && (s = !0);
-                }
-                s || (this.selected_artifacts_dict[a._id] = a);
-            }
-            this.delete_selected_artifacts(null, !0), this.selected_artifacts_dict = {}, this.editing_artifact_id = null, 
-            this.opened_dialog = "none";
-            for (var e = 0; e < i.length; e++) this.update_board_artifact_viewmodel(i[e]);
-            this.selection_metrics.contains_text = !1, this.selection_metrics.count = 0, t && (this.active_tool = "pointer", 
-            this.mouse_state = "idle"), this.update_selection_metrics();
-        },
-        is_selected: function(t) {
-            if (t) return !!this.selected_artifacts_dict[t._id];
-        },
-        unselected_artifacts: function() {
-            return this.active_space_artifacts.filter(function(t) {
-                return !this.is_selected(t);
-            }.bind(this));
-        },
-        selection_rect_style: function() {
-            var t = this.selection_rect();
-            return null == t ? "display:none" : "left:" + t.x1 + "px;top:" + t.y1 + "px;width:" + (t.x2 - t.x1) + "px;height:" + (t.y2 - t.y1) + "px;";
-        },
-        selection_rect: function() {
-            return this.enclosing_rect(this.selected_artifacts());
-        },
-        enclosing_rect: function(t) {
-            return 0 == t.length ? null : (t = _.filter(t), {
-                x1: parseInt(_.min(t.map(function(t) {
-                    return t.board && t.board.x ? t.board.x : 0;
-                }))),
-                y1: parseInt(_.min(t.map(function(t) {
-                    return t.board && t.board.y ? t.board.y : 0;
-                }))),
-                x2: parseInt(_.max(t.map(function(t) {
-                    return t.board ? t.board.x + t.board.w : 0;
-                }))),
-                y2: parseInt(_.max(t.map(function(t) {
-                    return t.board ? t.board.y + t.board.h : 0;
-                })))
-            });
-        },
-        update_selection_metrics: function(t) {
-            if ("scribble" == this.active_tool) return void (this.selection_metrics.count = 1);
-            var i = this.selection_rect() || {
-                x: 0,
-                y: 0,
-                w: 0,
-                h: 0,
-                style: "display:none"
-            };
-            if (i.x1 || i.x2) {
-                i.w = i.x2 - i.x1, i.h = i.y2 - i.y1, i.style = this.selection_rect_style();
-                var e = this.space_point_to_window(i.x1 + i.w / 2, i.y2), a = this.space_point_to_window(i.x1 + i.w / 2, i.y1);
-                e.x -= 260, e.y -= 10, e.y >= window.innerHeight - 300 && (e.y = a.y - 100), e.x < 0 && (e.x = 0), 
-                e.y < 0 && (e.y = 0), this.toolbar_props_x = e.x + "px", this.toolbar_props_y = e.y + "px", 
-                this.hide_toolbar_artifacts();
-            }
-            this.selection_metrics.x1 = i.x1, this.selection_metrics.x2 = i.x2, this.selection_metrics.y1 = i.y1, 
-            this.selection_metrics.y2 = i.y2, this.selection_metrics.x = i.x, this.selection_metrics.y = i.y, 
-            this.selection_metrics.w = i.w, this.selection_metrics.h = i.h, this.selection_metrics.style = i.style, 
-            t || (t = this.selected_artifacts()), this.first_selected_artifact = t[0], this.selection_metrics.count = t.length, 
-            this.selection_metrics.scribble_selection = !1, 1 == t.length && "x-spacedeck/vector" == t[0].mime ? ("scribble" == t[0].style.shape && (this.selection_metrics.scribble_selection = !0), 
-            this.selection_metrics.vector_points = t[0].control_points, this.selection_metrics.vector_selection = !0) : (this.selection_metrics.vector_points = [ {}, {} ], 
-            this.selection_metrics.vector_selection = !1), this.selection_metrics.has_link = !1, 
-            this.insert_link_url = "", 1 == t.length && t[0].meta && t[0].meta.link_uri && t[0].meta.link_uri.length > 0 && (this.selection_metrics.has_link = !0, 
-            this.insert_link_url = t[0].meta.link_uri);
-        },
-        begin_transaction: function() {
-            this.transaction_running = !0, this.undo_stack.length && "empty" == this.undo_stack[this.undo_stack.length - 1].action || this.undo_stack.push({
-                action: "empty"
-            }), this.redo_stack = [], this.artifacts_before_transaction = this.active_space_artifacts.map(function(t) {
-                return _.cloneDeep(t);
-            });
-        },
-        fixup_space_size: function() {
-            this.active_space && (this.active_space.advanced.width = Math.max(this.active_space.advanced.width, window.innerWidth), 
-            this.active_space.advanced.height = Math.max(this.active_space.advanced.height, window.innerHeight));
-        },
-        end_transaction: function() {
-            if (this.transaction_running = !1, this.throttled_process_artifact_save_queue(), 
-            this.active_space) {
-                var t = this.enclosing_rect(this.active_space_artifacts);
-                t && (this.active_space.advanced.width = Math.max(t.x2 + 100, window.innerWidth), 
-                this.active_space.advanced.height = Math.max(t.y2 + 100, window.innerHeight), this._last_bounds_width == this.active_space.advanced.width && this._last_bounds_height == this.active_space.advanced.height || (this._last_bounds_width = this.active_space.advanced.width, 
-                this._last_bounds_height = this.active_space.advanced.height, save_space(this.active_space)), 
-                this.resize_minimap(), this.discover_zones());
-            }
-        },
-        find_artifact_before_transaction: function(t) {
-            return this.find_artifact_in_array(this.artifacts_before_transaction, t);
-        },
-        find_artifact_in_array: function(t, i) {
-            var e = _.find(t, function(t) {
-                return i._id && t._id == i._id;
-            });
-            return e;
-        },
-        unsaved_transactions: function() {
-            return window.artifact_save_queue ? Object.keys(window.artifact_save_queue).length : 0;
-        },
-        process_artifact_save_queue: function() {
-            if (window.artifact_save_queue) {
-                if (this.transaction_running) return void console.log("not saving, transaction still in progress.");
-                for (var t = Object.keys(window.artifact_save_queue), i = 0; i < t.length; i++) {
-                    var e = t[i], a = window.artifact_save_queue[e];
-                    this.guest_nickname && (a.editor_name = this.guest_nickname), save_artifact(a, function() {
-                        delete window.artifact_save_queue[e];
-                    }.bind(this), function(t) {
-                        t && 404 == t.status ? delete window.artifact_save_queue[e] : console.log("could not save artifact, will try again:", a, t);
-                    });
-                }
-                this.active_space && (this.active_space.updated_at = new Date().getTime());
-            }
-        },
-        throttled_process_artifact_save_queue: function() {
-            this._throttled_process_artifact_save_queue || (this._throttled_process_artifact_save_queue = _.throttle(this.process_artifact_save_queue, 500)), 
-            this._throttled_process_artifact_save_queue();
-        },
-        queue_artifact_for_save: function(t) {
-            window.artifact_save_queue || (window.artifact_save_queue = {}), t._id || console.log("warning: illegal artifact queued for save"), 
-            t.view && t.view.vector_svg && (t.style.shape_svg = t.view.vector_svg), window.artifact_save_queue[t._id] = t;
-        },
-        update_properties: function(t, i) {
-            for (var e = 0; e < t.length; e++) {
-                var a = t[e], s = this.find_artifact_by_id(a);
-                if (s) {
-                    var o = !1;
-                    for (k in i[e]) s[k] = i[e][k], o = !0;
-                    this.update_board_artifact_viewmodel(s), o && this.queue_artifact_for_save(s);
-                }
-            }
-        },
-        update_artifacts: function(t, i) {
-            for (var e = [], a = [], s = 0; s < t.length; s++) {
-                var o = t[s], n = i(o);
-                n && (e.push(o._id), a.push(n));
-            }
-            a.length && this.push_to_undo({
-                action: "update",
-                artifact_ids: e,
-                changes: a,
-                snapshot: this.artifacts_before_transaction
-            }), a.length && this.update_properties(e, a);
-        },
-        push_to_undo: function(t) {
-            this.undo_stack[this.undo_stack.length - 1] = t;
-        },
-        undo: function() {
-            if (!this.undo_stack.length || "empty" == this.undo_stack[this.undo_stack.length - 1].action) return void console.log("nothing to undo!");
-            var t = this.undo_stack.pop();
-            console.log("undo popped: ", t), this.redo_stack.push(t);
-            for (var i = 0; i < t.artifact_ids.length; i++) {
-                var e = t.artifact_ids[i], a = this.find_artifact_in_array(t.snapshot, {
-                    _id: e
-                });
-                "update" == t.action ? a && this.update_properties([ e ], [ a ]) : (delete a._id, 
-                save_artifact(a, function(t) {
-                    this.update_board_artifact_viewmodel(t), this.active_space_artifacts.push(t);
-                }.bind(this)));
-            }
-            this.update_selection_metrics();
-        },
-        redo: function() {
-            if (!this.redo_stack.length) return void console.log("nothing to redo!");
-            var t = this.redo_stack.pop();
-            console.log("redo popped: ", t), this.undo_stack.push(t), this.update_properties(t.artifact_ids, t.changes), 
-            this.update_selection_metrics();
-        },
-        set_artifact_prop: function(t, i) {
-            this.begin_transaction(), this.update_selected_artifacts(function(e) {
-                var a = {};
-                return a[t] != i ? (a[t] = i, a) : null;
-            });
-        },
-        set_artifact_style_prop: function(t, i) {
-            this.begin_transaction(), this.update_selected_artifacts(function(e) {
-                var a = {
-                    style: e.style || {}
-                };
-                return a.style[t] != i ? (a.style[t] = i, a) : null;
-            });
-        },
-        activate_color_mode: function(t) {
-            this.color_mode = t, "picker" == t && 0 == this.color_picker_hue && 0 == this.color_picker_saturation && 0 == this.color_picker_value && 0 == this.color_picker_opacity && (this.color_picker_opacity = 255, 
-            this.color_picker_value = 255);
-        },
-        reset_stroke: function() {
-            this.active_style.stroke = 0, this.active_style.border_radius = 0, this.active_style.stroke_style = "solid";
-        },
-        apply_font_size: function(t) {
-            this.apply_formatting(null, "preciseFontSize", t + "px");
-        },
-        apply_swatch_color: function(t) {
-            var i = hex_to_rgba(t.hex), e = rgb_to_hsv(i.r, i.g, i.b);
-            this.color_picker_hue = parseFloat(255 * e.h), this.color_picker_saturation = parseFloat(255 * e.s), 
-            this.color_picker_value = parseFloat(255 * e.v), this.color_picker_opacity = 255 * i.a, 
-            this.color_picker_rgb = rgb_to_hex(i.r, i.g, i.b), this.active_style[this.color_picker_target] = t.hex, 
-            "stroke_color" == this.color_picker_target && (this.active_style.stroke || (this.active_style.stroke = 2));
-        },
-        apply_color_picker: function() {
-            var t = hsv_to_rgb(this.color_picker_hue / 255, this.color_picker_saturation / 255, this.color_picker_value / 255), i = this.color_picker_opacity / 255;
-            this.active_style[this.color_picker_target] = "rgba(" + [ t.r, t.g, t.b, i ].join(",") + ")";
-        },
-        extract_color_picker_from_selection: function() {
-            if (1 == this.selected_artifacts().length || "background" == this.opened_dialog) {
-                "background" == this.opened_dialog ? this.active_style[this.color_picker_target] = this.active_space.advanced.background_color : this.active_style[this.color_picker_target] || (this.active_style[this.color_picker_target] = this.default_style[this.color_picker_target]);
-                var t = hex_to_rgba(this.active_style[this.color_picker_target]), i = rgb_to_hsv(t.r, t.g, t.b);
-                this.color_picker_hue = parseFloat(255 * i.h), this.color_picker_saturation = parseFloat(255 * i.s), 
-                this.color_picker_value = parseFloat(255 * i.v), this.color_picker_opacity = parseInt(t.a), 
-                this.color_picker_rgb = rgb_to_hex(t.r, t.g, t.b);
-            }
-        },
-        update_selected_artifacts: function(t, i) {
-            var e = this.selected_artifacts(!i);
-            e.length && (this.update_artifacts(e, t), this.update_selection_metrics());
-        },
-        nudge_selected_artifacts: function(t, i, e) {
-            if (this.present_mode) {
-                if (t > 0 || i > 0) return void this.go_to_next_zone();
-                if (t < 0 || i < 0) return void this.go_to_previous_zone();
-            }
-            if (!this.selected_artifacts().length) {
-                if (!$("#space").length) return;
-                var a = $("#space")[0];
-                return a.scrollLeft += 100 * t, void (a.scrollTop += 100 * i);
-            }
-            this.active_space_is_readonly || (e && (e.preventDefault(), e.stopPropagation()), 
-            this.begin_transaction(), this.update_selected_artifacts(function(e) {
-                return {
-                    board: _.extend(e.board, {
-                        x: e.board.x + t,
-                        y: e.board.y + i
-                    })
-                };
-            }));
-        },
-        highest_z: function() {
-            var t = _.max(this.active_space_artifacts.map(function(t) {
-                return t.board.z || 0;
-            }));
-            return t < 0 && (t = 0), t > 999 && (t = 999), t;
-        },
-        find_place_for_item: function(t, i) {
-            var e = this.active_space_artifacts, a = window.innerWidth, s = window.innerHeight, o = $("#space")[0];
-            if (!o) return {
-                x: 0,
-                y: 0,
-                z: 1
-            };
-            var n = $(".wrapper"), _ = parseInt(n.css("margin-left")), r = parseInt(n.css("margin-top")), c = parseInt((o.scrollLeft + a / 2) / this.viewport_zoom - t / 2 - _ / this.viewport_zoom), l = parseInt((o.scrollTop + s / 2) / this.viewport_zoom - i / 2 - r / this.viewport_zoom), h = this.highest_z() + 1;
-            return 0 == e.length ? {
-                x: c,
-                y: l
-            } : (c += parseInt(20 * Math.random()) - 10, l += parseInt(20 * Math.random()) - 10, 
-            {
-                x: c,
-                y: l,
-                z: h
-            });
-        },
-        save_audio_edit: function(t) {
-            this.opened_dialog = "none", this.update_board_artifact_viewmodel(t), save_artifact(t);
-        },
-        save_artifact: function(t, i) {
-            this.guest_nickname && (t.editor_name = this.guest_nickname), this.update_board_artifact_viewmodel(t), 
-            save_artifact(t, i);
-        },
-        add_artifact: function(t, i, e, a) {
-            if (this.active_tool = "pointer", this.mouse_state = "idle", this.hide_toolbar_artifacts(), 
-            e || "image" != i && "video" != i && "embed" != i || (e = prompt("URL?"), e && e.length)) {
-                var s = 300, o = 200, n = this.highest_z() + 1;
-                mimes = {
-                    text: "text/html",
-                    note: "text/html",
-                    image: "image/jpg",
-                    video: "video/mp4"
-                };
-                var _ = {
-                    mime: mimes[i],
-                    description: "",
-                    payload_uri: e,
-                    payload_thumbnail_medium_uri: e || null,
-                    payload_thumbnail_web_uri: e || null,
-                    space_id: t._id,
-                    style: {
-                        order: this.active_space_artifacts.length + 1,
-                        valign: "middle",
-                        align: "center"
-                    }
-                };
-                if ("text/html" == mimes[i] && (_.style.padding_left = 10, _.style.padding_top = 10, 
-                _.style.padding_right = 10, _.style.padding_bottom = 10, _.style.fill_color = "rgba(255,255,255,1)", 
-                _.description = "<p>Text</p>"), a) {
-                    var r = this.cursor_point_to_space(a);
-                    r.x -= 100, r.y -= 100;
-                } else {
-                    var r = this.find_place_for_item(s, o);
-                    n = r.z;
-                }
-                _.board = {
-                    x: parseInt(r.x),
-                    y: parseInt(r.y),
-                    w: s,
-                    h: o,
-                    z: n
-                }, this.guest_nickname && (_.editor_name = this.guest_nickname), save_artifact(_, function(t) {
-                    this.update_board_artifact_viewmodel(t), this.active_space_artifacts.push(t), e || this.select(null, t), 
-                    i.match("text") && (this.editing_artifact_id = t._id, window.setTimeout(function() {
-                        var i = $("#artifact-" + t._id + " .text-editing");
-                        focus_contenteditable(i[0], !1);
-                    }, 400));
-                }.bind(this));
-            }
-        },
-        go_to_first_zone: function() {
-            this.discover_zones(), this.zones.length && this.zoom_to_zone(this.zones[0]);
-        },
-        go_to_previous_zone: function() {
-            if (this.discover_zones(), this.zones.length) {
-                var t = this.current_zone_idx - 1;
-                t < 0 && (t = this.zones.length - 1), this.current_zone_idx = t, this.zoom_to_zone(this.zones[this.current_zone_idx]);
-            }
-        },
-        go_to_next_zone: function() {
-            if (this.discover_zones(), this.zones.length) {
-                var t = (this.current_zone_idx + 1) % this.zones.length;
-                this.current_zone_idx = t, this.zoom_to_zone(this.zones[this.current_zone_idx]);
-            }
-        },
-        sort_zone_up: function(t) {
-            var i = this.zones.indexOf(t);
-            if (!(i < 1)) {
-                for (var e = _.flatten([ this.zones.slice(0, i - 1), [ t ], this.zones[i - 1], this.zones.slice(i + 1, this.zones.length) ]), a = 0; a < e.length; a++) e[a] && (e[a].style || (e[a].style = {}), 
-                e[a].style.order = a, save_artifact(e[a]));
-                this.discover_zones();
-            }
-        },
-        sort_zone_down: function(t) {
-            var i = this.zones.indexOf(t);
-            if (!(i >= this.zones.length)) {
-                for (var e = _.flatten([ this.zones.slice(0, i), this.zones[i + 1], [ t ], this.zones.slice(i + 2, this.zones.length) ]), a = 0; a < e.length; a++) e[a] && (e[a].style || (e[a].style = {}), 
-                e[a].style.order = a, save_artifact(e[a]));
-                this.discover_zones();
-            }
-        },
-        add_zone: function() {
-            var t = 600, i = 600, e = this.find_place_for_item(t, i), a = {
-                space_id: this.active_space._id,
-                mime: "x-spacedeck/zone",
-                description: "Zone " + (this.zones.length + 1),
-                board: {
-                    x: e.x,
-                    y: e.y,
-                    w: t,
-                    h: i,
-                    z: 0
-                },
-                style: {
-                    valign: "middle",
-                    align: "center"
-                }
-            };
-            this.guest_nickname && (a.editor_name = this.guest_nickname), save_artifact(a, function(t) {
-                this.update_board_artifact_viewmodel(t), this.active_space_artifacts.push(t), this.select(null, t);
-            }.bind(this));
-        },
-        add_shape: function(t, i) {
-            var e = 200, a = 200;
-            "cloud" == t && (e = 400);
-            var s = this.cursor_point_to_space(i), o = {
-                space_id: this.active_space._id,
-                mime: "x-spacedeck/shape",
-                description: "Text",
-                board: {
-                    x: s.x,
-                    y: s.y,
-                    z: s.z,
-                    w: e,
-                    h: a
-                },
-                style: {
-                    stroke_color: "#ffffff",
-                    text_color: "#ffffff",
-                    stroke: 0,
-                    fill_color: "#000000",
-                    shape: t,
-                    valign: "middle",
-                    align: "center"
-                }
-            };
-            this.guest_nickname && (o.editor_name = this.guest_nickname), save_artifact(o, function(t) {
-                this.update_board_artifact_viewmodel(t), this.active_space_artifacts.push(t), this.select(null, t);
-            }.bind(this));
-        },
-        cursor_point_to_space: function(t) {
-            if (!t) return {
-                x: 0,
-                y: 0
-            };
-            if (!$("#space").length) return {
-                x: 0,
-                y: 0
-            };
-            var i = $("#space")[0], e = parseInt($("#space").css("padding-top")), a = t.pageX, s = t.pageY;
-            !("pageX" in t) && "originalEvent" in t && (a = t.originalEvent.pageX, s = t.originalEvent.pageY);
-            var o = (a + i.scrollLeft - this.bounds_margin_horiz) / this.viewport_zoom, n = (s + i.scrollTop - e - this.bounds_margin_vert) / this.viewport_zoom;
-            return {
-                x: o,
-                y: n
-            };
-        },
-        space_point_to_window: function(t, i) {
-            var e = 0, a = 0, s = $("#space")[0];
-            return e = t * this.viewport_zoom - s.scrollLeft + this.bounds_margin_horiz, a = i * this.viewport_zoom - s.scrollTop + this.bounds_margin_vert, 
-            {
-                x: e,
-                y: a
-            };
-        },
-        create_artifact_via_upload: function(t, i, e) {
-            if ("viewer" == this.active_space_role) return !1;
-            this.hide_toolbar_artifacts();
-            var a = 300, s = 150, o = "transparent";
-            i.type.match("audio") && (a = 600, s = 150, o = "#ffffff");
-            var n = this.cursor_point_to_space(t);
-            n.x -= a / 2, n.y -= s / 2, e && (n = this.find_place_for_item(a, s));
-            var _ = {
-                space_id: this.active_space._id,
-                mime: i.type,
-                description: "Uploading…",
-                state: "uploading",
-                payload_thumbnail_medium_uri: null,
-                payload_thumbnail_web_uri: null,
-                board: {
-                    x: n.x,
-                    y: n.y,
-                    w: a,
-                    h: s,
-                    z: n.z
-                },
-                style: {
-                    order: this.active_space_artifacts.length + 1,
-                    fill_color: o
-                }
-            };
-            this.update_board_artifact_viewmodel(_), this.guest_nickname && (_.editor_name = this.guest_nickname), 
-            save_artifact(_, function(t) {
-                _ = t, this.update_board_artifact_viewmodel(_), this.active_space_artifacts.push(_), 
-                save_artifact_file(_, i, i.name, function(t) {
-                    console.log("file saved. result: ", t), _.payload_uri = t.payload_uri, _.payload_thumbnail_web_uri = t.payload_thumbnail_web_uri, 
-                    _.payload_thumbnail_medium_uri = t.payload_thumbnail_medium_uri, _.payload_thumbnail_big_uri = t.payload_thumbnail_big_uri, 
-                    _.payload_alternatives = t.payload_alternatives, _.mime = t.mime, _.board = t.board, 
-                    _.state = t.state, this.update_board_artifact_viewmodel(_);
-                }.bind(this), null, function(t) {
-                    var i = t.loaded / t.total;
-                    (i = 1) ? _.description = "Converting Media…" : _.description = "Upload " + parseInt(100 * i) + "%", 
-                    this.update_board_artifact_viewmodel(_), _.view.progress = parseInt(100 * i);
-                }.bind(this));
-            }.bind(this), this.display_saving_error);
-        },
-        delete_selected_artifacts: function(t, i) {
-            if (this.active_space) {
-                t && (t.preventDefault(), t.stopPropagation()), this.begin_transaction();
-                var e = this.selected_artifacts().map(function(t) {
-                    return t._id;
-                }), a = [], s = [];
-                if (!(e.length > 1) || i || confirm("Delete " + e.length + " items?")) {
-                    for (var o = 0; o < e.length; o++) if (this.selected_artifacts_dict[e[o]]) {
-                        var n = e[o], _ = this.find_artifact_by_id(n);
-                        _ && (a.push(_), s.push(n), delete_artifact(_));
-                        var r = this.active_space_artifacts.indexOf(_);
-                        this.active_space_artifacts.splice(r, 1);
-                    }
-                    this.push_to_undo({
-                        action: "delete",
-                        artifact_ids: s,
-                        snapshot: a
-                    }), i || this.deselect();
-                }
-            }
-        },
-        find_artifact_by_id: function(t) {
-            for (var i = this.active_space_artifacts, e = 0; e < i.length; e++) {
-                var a = i[e];
-                if (a._id == t) return a;
-            }
-            return null;
-        },
-        selected_artifacts: function(t) {
-            return this.active_space && this.active_space_artifacts ? this.active_space_artifacts.filter(function(i) {
-                var e = this.artifact_is_selected(i);
-                return e && i.locked ? !t : e;
-            }.bind(this)) : [];
-        },
-        delayed_edit_artifact: function(t) {
-            t.stopPropagation(), t.preventDefault();
-            var i = this.selected_artifacts()[0], e = $("#ios-focuser-" + i._id);
-            e.focus(), e.select(), this.toggle_selected_artifact_editing(!0, !0);
-        },
-        toggle_selected_artifact_editing: function(t, i) {
-            var e = this.selected_artifacts()[0];
-            if (!e) return void (this.editing_artifact_id = null);
-            if (this.editing_artifact_id == e._id && !t) return void (this.editing_artifact_id = null);
-            if (!e.locked && _.include([ "text/html", "x-spacedeck/shape", "x-spacedeck/zone" ], e.mime) && this.editing_artifact_id != e._id) {
-                this.editing_artifact_id = e._id;
-                var a = 100;
-                i && (a = 500), window.setTimeout(function() {
-                    var t = $("#artifact-" + e._id + " .text-editing");
-                    t[0] ? focus_contenteditable(t[0], !0) : window.setTimeout(function() {
-                        var t = $("#artifact-" + e._id + " .text-editing");
-                        focus_contenteditable(t[0], !0);
-                    }, a);
-                }, a);
-            }
-        },
-        clear_formatting_walk: function(t, i, e, a) {
-            if (t && t.style && ("preciseFontSize" == i ? t.style.fontSize = null : "letterSpacing" == i ? t.style.letterSpacing = null : "lineHeight" == i ? t.style.lineHeight = null : "fontName" == i ? t.style.fontFamily = null : "fontWeight" == i ? (t.style.fontWeight = null, 
-            t.style.fontStyle = null) : "bold" == i ? t.style.fontWeight = null : "italic" == i ? t.style.fontStyle = null : "underline" == i ? t.style.textDecoration = null : "strikeThrough" == i ? t.style.textDecoration = null : "forecolor" == i && (t.style.color = null)), 
-            t && t.childNodes) for (var s = 0; s < t.childNodes.length; s++) this.clear_formatting_walk(t.childNodes[s], i, e, a);
-        },
-        apply_formatting: function(t, i, e, a) {
-            if (t && (t.preventDefault(), t.stopPropagation()), !this.skip_formatting && ("createlink" != i || (e = prompt("Link URL?")))) {
-                var s = this.selected_artifacts(), o = !1;
-                if (window.selection && "Caret" != window.selection.type && "None" != window.selection.type || (o = !0), 
-                this.editing_artifact_id && "preciseFontSize" != i && "forecolor" != i) {
-                    if (this.editing_artifact_id) {
-                        var n = this.find_artifact_by_id(this.editing_artifact_id), _ = this.medium_for_object[n._id];
-                        _ && n && (_.focus(), _.element.focus(), _.invokeElement(i), n.description = _.value(), 
-                        this.queue_artifact_for_save(n));
-                    }
-                } else for (var r = 0; r < s.length; r++) {
-                    var n = s[r], c = $("<div>" + n.description + "</div>")[0], l = c.firstChild;
-                    do {
-                        if (l && l.childNodes) for (var h = 0; h < l.childNodes.length; h++) this.clear_formatting_walk(l.childNodes[h], i, e, a);
-                        l && l.style && ("preciseFontSize" == i ? e == this.default_style.font_size + "px" ? l.style.fontSize = null : l.style.fontSize = e : "letterSpacing" == i ? e == this.default_style.letter_spacing + "px" ? l.style.letterSpacing = null : l.style.letterSpacing = e : "lineHeight" == i ? e == this.default_style.line_height + "em" ? l.style.lineHeight = null : l.style.lineHeight = e : "fontName" == i ? l.style.fontFamily = e : "fontWeight" == i ? (l.style.fontWeight = e, 
-                        l.style.fontStyle = a) : "bold" == i ? l.style.fontWeight = "bold" != l.style.fontWeight ? "bold" : "normal" : "italic" == i ? l.style.fontStyle = "italic" != l.style.fontStyle ? "italic" : "normal" : "underline" == i ? l.style.textDecoration = "underline" != l.style.textDecoration ? "underline" : "none" : "strikeThrough" == i ? l.style.textDecoration = "line-through" != l.style.textDecoration ? "line-through" : "none" : "forecolor" == i && (l.style.color = e));
-                    } while (l && (l = l.nextSibling));
-                    if (n.description != c.innerHTML && (n.description = c.innerHTML, this.update_board_artifact_viewmodel(n), 
-                    this.queue_artifact_for_save(n), this.editing_artifact_id)) {
-                        var n = this.find_artifact_by_id(this.editing_artifact_id), _ = this.medium_for_object[n._id];
-                        _ && n && _.value(n.description);
-                    }
-                }
-                this.extract_text_format_from_selection();
-            }
-        },
-        remove_link_from_selected_artifacts: function() {
-            this.update_selected_artifacts(function(t) {
-                var i = t.meta || {};
-                return delete i.link_uri, {
-                    meta: i
-                };
-            });
-        },
-        create_link_on_selected_artifacts: function() {
-            var t = "", i = this.selected_artifacts();
-            i.length >= 1 && i[0].meta && i[0].meta.link_uri && (t = i[0].meta.link_uri);
-            var e = prompt("URL:", t);
-            this.update_selected_artifacts(function(t) {
-                var i = t.meta || {};
-                i.link_uri = e;
-                var a = {
-                    meta: i
-                };
-                if (t.payload_uri && t.payload_uri.match("webgrabber")) {
-                    var s = encodeURIComponent(btoa(e)), o = ENV.apiEndpoint + "/api/webgrabber/" + s;
-                    a.payload_uri = o, a.payload_thumbnail_web_uri = o, a.payload_thumbnail_medium_uri = o, 
-                    a.payload_thumbnail_big_uri = o;
-                }
-                return a;
-            }), this.opened_dialog = "none";
-        },
-        clone_artifact: function(t, i, e, a) {
-            var s = _.cloneDeep(t);
-            return delete s.$index, delete s._id, i && (s.board.x += i), e && (s.board.y += e), 
-            s.style || (s.style = {}), s.style.order = this.active_space_artifacts.length + 1, 
-            this.guest_nickname && (s.editor_name = this.guest_nickname), s.space_id = this.active_space._id, 
-            save_artifact(s, function(t) {
-                this.update_board_artifact_viewmodel(t), this.active_space_artifacts.push(t), a ? a(t) : this.select(null, t);
-            }.bind(this)), s;
-        },
-        toggle_lock_of_selected_artifacts: function() {
-            this.update_selected_artifacts(function(t) {
-                return {
-                    locked: !t.locked
-                };
-            }, !0);
-        },
-        duplicate_selected_artifacts: function() {
-            for (var t = this.selected_artifacts(), i = 0; i < t.length; i++) {
-                var e = t[i];
-                this.clone_artifact(e, 50, 50);
-            }
-        },
-        copy_selected_artifacts_to_clipboard: function() {
-            "ontouchstart" in window || ($("#space-clipboard").focus(), $("#space-clipboard").select());
-        },
-        handle_section_click: function(t) {
-            t.target == t.currentTarget && this.deselect();
-        },
-        handle_space_doubleclick: function(t) {
-            this.selected_artifacts().length || this.guest_nickname || this.active_space && "public" == this.active_space.access_mode;
-        },
-        handle_body_click: function(t) {
-            "space" == this.active_view && this.handle_section_click(t), this.close_dropdown(t);
-        },
-        extract_text_format_from_selection: function() {
-            if (window.selection) {
-                var t = $(window.selection.baseNode).parents().toArray();
-                this.detected_text_formats = {};
-                for (var i = {
-                    p: "Paragraph",
-                    h1: "Headline 1",
-                    h2: "Headline 2",
-                    h3: "Headline 3",
-                    h4: "Headline 4",
-                    h5: "Headline 5",
-                    h6: "Headline 6",
-                    ul: "Bullet List",
-                    ol: "Numbered List",
-                    blockquote: "Blockquote"
-                }, e = 0; e < t.length; e++) {
-                    var a = t[e];
-                    if ("true" == a.contentEditable) break;
-                    var s = a.nodeName.toLowerCase();
-                    i[s] && (this.detected_text_formats[s] = !0, this.active_text_format_name = i[s]);
-                }
-            }
-        },
-        save_edited_artifact_text: function(t) {
-            if (this.editing_artifact_id) {
-                var i = this.find_artifact_by_id(this.editing_artifact_id);
-                i && this.queue_artifact_for_save(i), this.extract_text_format_from_selection();
-            }
-        },
-        handle_section_paste: function(t) {
-            if (!this.editing_artifact_id) {
-                var i = null;
-                try {
-                    i = t.clipboardData.getData("text/plain");
-                } catch (e) {}
-                i && (i.match(/<[a-zA-Z]+>/g) || (i = i.replace(/\n/g, "<br>")), this.insert_embedded_artifact(i));
-            }
-        },
-        insert_embedded_artifact: function(t) {
-            var i = this.active_space;
-            if (i) {
-                if ("[" == t[0] || "{" == t[0]) try {
-                    parsed = JSON.parse(t), "{" == t[0] && (parsed = [ parsed ]), this.deselect();
-                    for (var e = 0; e < parsed.length; e++) if (parsed[e].mime) {
-                        var a = this.highest_z() + 1;
-                        if (1 == parsed.length) {
-                            var s = parsed[e].board.w, o = parsed[e].board.h, n = this.find_place_for_item(s, o);
-                            parsed[e].board.x = n.x, parsed[e].board.y = n.y, parsed[e].board.z = n.z;
-                        } else parsed[e].board.x = parsed[e].board.x + 50, parsed[e].board.y = parsed[e].board.y + 50, 
-                        parsed[e].board.y = parsed[e].board.z + a;
-                        this.clone_artifact(parsed[e], 0, 0, function(t) {
-                            this.multi_select([ t ]);
-                        }.bind(this));
-                    }
-                    return;
-                } catch (_) {}
-                if (t.match(/^http[s]*\:\/\//)) return void this.create_artifact_via_embed_url(t);
-                var r = {
-                    mime: "text/html",
-                    description: t.replace("\n", "<br />"),
-                    title: "",
-                    space_id: i._id
-                }, s = 400, o = 300, n = this.find_place_for_item(s, o);
-                r.board = {
-                    x: n.x,
-                    y: n.y,
-                    w: s,
-                    h: o,
-                    z: n.z
-                }, this.guest_nickname && (r.editor_name = this.guest_nickname), save_artifact(r, function(t) {
-                    this.update_board_artifact_viewmodel(t), this.active_space_artifacts.push(t);
-                }.bind(this));
-            }
-        },
-        create_artifact_via_embed_url: function(t) {
-            this.close_modal();
-            var i = this.find_place_for_item(200, 200), e = this.highest_z() + 1, a = {
-                space_id: this.active_space._id,
-                mime: "image/png",
-                description: t,
-                state: "uploading",
-                board: {
-                    x: i.x,
-                    y: i.y,
-                    w: 200,
-                    h: 200,
-                    z: e
-                },
-                style: {
-                    order: this.active_space_artifacts.length
-                }
-            }, s = parse_link(t);
-            if (s) {
-                if ("unknown" == s.type) {
-                    var o = encodeURIComponent(btoa(t));
-                    return a.meta = {
-                        link_uri: t
-                    }, this.guest_nickname && (a.editor_name = this.guest_nickname), void save_artifact(a, function(t) {
-                        this.update_board_artifact_viewmodel(t), this.active_space_artifacts.push(t);
-                        var i = ENV.apiEndpoint + "/api/webgrabber/" + o;
-                        t.state = "idle", t.payload_uri = i, t.payload_thumbnail_web_uri = i, t.payload_thumbnail_medium_uri = i, 
-                        t.payload_thumbnail_big_uri = i, save_artifact(t, function(i) {
-                            this.update_board_artifact_viewmodel(t);
-                        }.bind(this));
-                    }.bind(this));
-                }
-                var n = s.thumbnail_width || 200, r = s.thumbnail_height || 200;
-                n < 200 && (n = 200), r < 200 && (r = 200), "soundcloud" == s.provider_name && (n = 500, 
-                r = 150), a = _.extend(a, {
-                    mime: "oembed/" + s.type + "-" + s.provider_name,
-                    description: s.url || t,
-                    payload_thumbnail_medium_uri: s.thumbnail_url,
-                    payload_thumbnail_web_uri: s.thumbnail_url,
-                    state: "idle",
-                    meta: {
-                        title: s.title,
-                        link_uri: s.url || t
-                    },
-                    board: {
-                        x: i.x - n / 2,
-                        y: i.y - r / 2,
-                        w: n,
-                        h: r
-                    }
-                }), this.guest_nickname && (a.editor_name = this.guest_nickname), save_artifact(a, function(t) {
-                    this.update_board_artifact_viewmodel(t), this.active_space_artifacts.push(t);
-                }.bind(this));
-            }
-        },
-        create_artifact_via_payload_url: function(t, i) {
-            this.add_artifact(this.active_space, t, i, null);
-        },
-        handle_touch_select_background_image: function() {
-            $("#background-uploader").click();
-        },
-        handle_insert_image_url: function(t) {
-            return t && t.length ? (this.create_artifact_via_payload_url("image", t), void (this.insert_image_url = "")) : void $("#image_file_upload").click();
-        },
-        handle_insert_video_url: function(t) {
-            if (!t.length) return void $("#video_file_upload").click();
-            var i = parse_link(t);
-            i ? this.create_artifact_via_embed_url(t) : this.create_artifact_via_payload_url("video", t), 
-            this.insert_video_url = "";
-        },
-        handle_insert_audio_url: function(t) {
-            if (!t.length) return void $("#audio_file_upload").click();
-            var i = parse_link(t);
-            i ? this.create_artifact_via_embed_url(t) : this.create_artifact_via_payload_url("audio", t), 
-            this.insert_audio_url = "";
-        },
-        handle_generic_file_upload: function(t) {
-            var i = t.target.files;
-            if (this.opened_dialog = "none", i && i.length) {
-                console.log("file: ", i[0]);
-                for (var e = 0; e < i.length; e++) {
-                    var a = i[e];
-                    if ("application/pdf" === a.type) {
-                        var s = {
-                            x: 100,
-                            y: 100
-                        };
-                        this.dropped_point = s, this.pending_pdf_file = a, this.activate_modal("pdfoptions");
-                    } else this.create_artifact_via_upload(null, a, !0);
-                }
-            }
-        },
-        handle_image_file_upload: function(t) {
-            this.handle_generic_file_upload(t);
-        },
-        handle_video_file_upload: function(t) {
-            this.handle_generic_file_upload(t);
-        },
-        handle_audio_file_upload: function(t) {
-            this.handle_generic_file_upload(t);
-        },
-        handle_section_background_upload: function(t) {
-            var i = t.target.files[0];
-            this.space_background_uploading = !0, save_space_background_file(this.active_space, i, function(t) {
-                this.active_space = t, this.space_background_uploading = !1;
-            }.bind(this));
-        },
-        remove_section_background: function() {
-            this.active_space.advanced.background_uri = null, save_space(this.active_space);
-        },
-        show_toolbar_props: function() {
-            if (0 != this.selection_metrics.count) {
-                arts = this.selected_artifacts();
-                for (var t = 0; t < arts.length; t++) if ("x-spacedeck/zone" == arts[t].mime) return;
-                this.toolbar_props_in = !0;
-            }
-        },
-        hide_toolbar_props: function() {
-            this.toolbar_props_in = !1;
-        },
-        show_toolbar_artifacts: function(t, i) {
-            this.toolbar_artifacts_x = t - 175 + "px", this.toolbar_artifacts_y = i + "px", 
-            this.toolbar_artifacts_in = !0;
-        },
-        hide_toolbar_artifacts: function() {
-            this.toolbar_artifacts_in = !1;
-        },
-        start_adding_artifact: function(t) {
-            return t = fixup_touches(t), this.toolbar_artifacts_in ? void this.hide_toolbar_artifacts() : void this.show_toolbar_artifacts(t.pageX, t.pageY);
-        },
-        start_drawing_scribble: function(t) {
-            this.hide_toolbar_artifacts(), this.active_tool = "scribble", this.opened_dialog = "none";
-        },
-        start_drawing_arrow: function(t) {
-            this.hide_toolbar_artifacts(), this.active_tool = "arrow", this.opened_dialog = "none";
-        },
-        start_drawing_line: function(t) {
-            this.hide_toolbar_artifacts(), this.active_tool = "line", this.opened_dialog = "none";
-        },
-        adjust_bounds_zoom: function() {
-            if (this.active_space) {
-                this.bounds_zoom = this.viewport_zoom;
-                var t = this.active_space.advanced.width * this.viewport_zoom, i = this.active_space.advanced.height * this.viewport_zoom;
-                window.innerWidth > t ? this.bounds_margin_horiz = (window.innerWidth - t) / 2 : this.bounds_margin_horiz = 0, 
-                window.innerHeight - 80 > i ? this.bounds_margin_vert = (window.innerHeight - i) / 2 - 80 : this.bounds_margin_vert = 0;
-            }
-        },
-        zoom_to_original: function() {
-            var t = this.viewport_zoom;
-            this.viewport_zoom = 1, this.viewport_zoom_percent = parseInt(100 * this.viewport_zoom), 
-            this.adjust_bounds_zoom(), this.zoom_adjust_scroll(this.viewport_zoom / t);
-        },
-        zoom_to_fit: function() {
-            var t = this.enclosing_rect(this.active_space_artifacts);
-            if (t) {
-                var i = 200;
-                t.x1 -= i, t.y1 -= i - 100, t.x2 += i, t.y2 += i + 100, this.zoom_to_rect(t, 1);
-            }
-        },
-        zoom_to_zone: function(t) {
-            if ($("#space").length) {
-                var i = this.enclosing_rect([ t ]), e = $("#space")[0], a = {
-                    x1: e.scrollLeft / this.viewport_zoom,
-                    y1: e.scrollTop / this.viewport_zoom,
-                    x2: (e.scrollLeft + window.innerWidth) / this.viewport_zoom,
-                    y2: (e.scrollTop + window.innerHeight) / this.viewport_zoom
-                }, s = 10;
-                i.x1 -= s, i.y1 -= s, i.x2 += s, i.y2 += s, this.animation_running || (this.animation_running = !0, 
-                this.animate_zoom_to_rect(i, 200, a), this.current_zone_idx = this.zones.indexOf(t));
-            }
-        },
-        zoom_to_rect: function(t, i) {
-            if ($("#space").length) {
-                var e = $("#space")[0], a = t.x2 - t.x1, s = t.y2 - t.y1;
-                if (a > s ? (this.viewport_zoom = window.innerWidth / a, window.innerHeight < s * this.viewport_zoom && (this.viewport_zoom = window.innerHeight / s)) : (this.viewport_zoom = window.innerHeight / s, 
-                window.innerWidth < a * this.viewport_zoom && (this.viewport_zoom = window.innerWidth / a)), 
-                i && this.viewport_zoom > i && (this.viewport_zoom = i), this.viewport_zoom < .05 && (this.viewport_zoom = .05), 
-                this.viewport_zoom_percent = parseInt(100 * this.viewport_zoom), this.adjust_bounds_zoom(), 
-                e) {
-                    var o = function() {
-                        e.scrollTop = (t.y1 + s / 2) * this.viewport_zoom - window.innerHeight / 2, e.scrollLeft = (t.x1 + a / 2) * this.viewport_zoom - window.innerWidth / 2, 
-                        this.handle_scroll();
-                    }.bind(this);
-                    "requestAnimationFrame" in window ? window.requestAnimationFrame(o) : o();
-                }
-            }
-        },
-        animate_zoom_to_rect: function(t, i, e, a) {
-            if ($("#space").length) {
-                var s = ($("#space")[0], 20);
-                if (a || (a = 0), i > a) {
-                    window.setTimeout(function() {
-                        this.animate_zoom_to_rect(t, i, e, a + s);
-                    }.bind(this), s);
-                    var o = (t.x1 - e.x1) / i * a, n = (t.x2 - e.x2) / i * a, _ = (t.y1 - e.y1) / i * a, r = (t.y2 - e.y2) / i * a, c = {
-                        x1: e.x1 + o,
-                        x2: e.x2 + n,
-                        y1: e.y1 + _,
-                        y2: e.y2 + r
-                    };
-                    this.zoom_to_rect(c);
-                } else this.zoom_to_rect(t), this.animation_running = !1;
-            }
-        },
-        zoom_to_point: function(t, i) {
-            var e = $("#space")[0], a = e.scrollLeft / this.viewport_zoom, s = e.scrollTop / this.viewport_zoom, o = window.innerWidth / this.viewport_zoom, n = window.innerHeight / this.viewport_zoom, _ = (t.x - (a + o / 2)) * i, r = (t.y - (s + n / 2)) * i, c = -_, l = -r, h = {
-                x1: t.x - o / 2 * i + c,
-                y1: t.y - n / 2 * i + l,
-                x2: t.x + o / 2 * i + c,
-                y2: t.y + n / 2 * i + l
-            };
-            this.zoom_to_rect(h, 2);
-        },
-        throttled_zoom_to_point: _.throttle(function(t, i) {
-            this.zoom_to_point(t, i);
-        }, 50),
-        zoom_to_cursor: function(t, i) {
-            var e = this.cursor_point_to_space(t);
-            this.throttled_zoom_to_point.bind(this)(e, i);
-        },
-        zoom_adjust_scroll: function(t) {
-            var i = function() {
-                if ($("#space").length && this.active_space && this.active_space_loaded) {
-                    var i = $("#space")[0], e = this.active_space.advanced.width * this.viewport_zoom, a = this.active_space.advanced.height * this.viewport_zoom, s = i.scrollLeft, o = i.scrollTop, n = window.innerWidth / 2, _ = window.innerHeight / 2, r = t * (s + n) - n, c = t * (o + _) - _;
-                    e < window.innerWidth && (r = 0), a < window.innerHeight && (c = 0), i.scrollLeft = r, 
-                    i.scrollTop = c, this.handle_scroll();
-                }
-            };
-            "requestAnimationFrame" in window ? window.requestAnimationFrame(i.bind(this)) : i();
-        },
-        zoom_in: function() {
-            this.viewport_zoom || (this.viewport_zoom = 1);
-            var t = this.viewport_zoom;
-            this.viewport_zoom *= 1.5, this.viewport_zoom >= 2 && (this.viewport_zoom = 2), 
-            this.viewport_zoom_percent = parseInt(100 * this.viewport_zoom), this.adjust_bounds_zoom(), 
-            this.zoom_adjust_scroll(this.viewport_zoom / t);
-        },
-        zoom_out: function() {
-            this.viewport_zoom || (this.viewport_zoom = 1);
-            var t = this.viewport_zoom;
-            this.viewport_zoom /= 1.5, this.viewport_zoom < .05 && (this.viewport_zoom = .05), 
-            this.viewport_zoom_percent = parseInt(100 * this.viewport_zoom), this.adjust_bounds_zoom(), 
-            this.zoom_adjust_scroll(this.viewport_zoom / t);
-        },
-        activate_pan_tool: function(t) {
-            t && (t.stopPropagation(), t.preventDefault()), this.active_tool = "pan", this.stop_pan_timeout && window.clearTimeout(this.stop_pan_timeout), 
-            this.stop_pan_timeout = window.setTimeout(function() {
-                "pan" == this.active_tool && (this.active_tool = "pointer");
-            }.bind(this), 500);
-        },
-        approve_pdf_upload: function(t, i, e) {
-            this.close_modal(), "classic" == e && this.create_artifact_via_upload(t, this.pending_pdf_file, !1), 
-            "grid" == e && (this.global_spinner = !0, save_pdf_file(this.active_space, this.dropped_point, this.pending_pdf_file, i, function(t) {
-                this.global_spinner = !1, _.each(t, function(t) {
-                    this.update_board_artifact_viewmodel(t), this.active_space_artifacts.push(t);
-                }.bind(this));
-            }.bind(this), function(t) {
-                this.global_spinner = !1, alert("Error PDF (" + t.status + ")");
-            }.bind(this)));
-        },
-        handle_data_drop: function(t) {
-            if ("viewer" == this.active_space_role) return !1;
-            var i = t.dataTransfer.getData("application/json"), e = (this.active_space, t.dataTransfer.files);
-            if (e && e.length) for (var a = 0; a < e.length; a++) {
-                var s = e[a];
-                if ("application/pdf" === s.type) {
-                    var o = this.cursor_point_to_space(t);
-                    this.dropped_point = o, this.pending_pdf_file = s, this.activate_modal("pdfoptions");
-                } else this.create_artifact_via_upload(t, s, e.length > 1);
-            } else {
-                var i = t.dataTransfer.getData("application/json");
-                if (i) {
-                    var n = JSON.parse(i);
-                    delete n._id, n.space_id = this.active_space._id;
-                    var _ = 300, r = 200;
-                    n.board && n.board.w && n.board.h && (_ = n.board.w, r = n.board.h);
-                    var o = this.cursor_point_to_space(t);
-                    return o.x -= _ / 2, o.y -= r / 2, n.board = {
-                        x: o.x,
-                        y: o.y,
-                        w: _,
-                        h: r,
-                        z: 20
-                    }, this.guest_nickname && (n.editor_name = this.guest_nickname), void save_artifact(n, function(t) {
-                        this.update_board_artifact_viewmodel(t), this.active_space_artifacts.push(t);
-                    }.bind(this));
-                }
-                var c = t.dataTransfer.getData("text/html");
-                if (c) {
-                    var l = /src="([^"]+)"/g, h = l.exec(c);
-                    h && this.add_artifact(this.active_space, "image", h[1], t);
-                }
-            }
-        },
-        clear_search_results: function() {
-            this.image_search_results = [], this.audio_search_results = [], this.video_search_results = [];
-        },
-        download_selected_artifacts: function() {
-            var t = this.selected_artifacts();
-            if (1 == t.length && t[0].payload_uri) try {
-                window.open(t[0].payload_uri);
-            } catch (i) {}
-        }
-    }
-};
-var SpacedeckSpaces = {
-    data: {
-        active_space: {
-            advanced: {}
-        },
-        active_space_loaded: !1,
-        active_space_role: "viewer",
-        active_space_version_dirty: !0,
-        active_space_messages: [],
-        active_space_memberships: [],
-        active_folder_history_items: [],
-        active_space_users: [],
-        active_space_artifacts: [],
-        active_space_path: [],
-        access_settings_space: null,
-        access_settings_memberships: [],
-        duplicate_folders: [],
-        duplicate_folder_id: "",
-        pending_pdf_files: [],
-        meta_visible: !1,
-        meta_unseen: 0,
-        present_mode: !1,
-        space_editing_title: !1,
-        create_space_title: "",
-        folder_reverse: 1,
-        embedded: !1,
-        remix_cta: "Create Reply",
-        publish_cta: "Publish",
-        remix_copying: !0,
-        remix_style: "",
-        guest_signup_enabled: !1,
-        space_embed_html: "",
-        share_base: location.origin,
-        share_base_url: location.origin + "/spaces/",
-        share_base_url_enc: encodeURIComponent(location.origin + "/spaces/"),
-        social_bar: !0,
-        can_add_comment: !1,
-        space_info_section: "access",
-        editors_section: "list",
-        selected_member: null,
-        invite_member_role: "viewer",
-        invite_email_error: null,
-        invite_email: "",
-        invite_message: "",
-        active_join_link: "",
-        join_link_role: "viewer",
-        mouse_state: "idle",
-        active_folder: null,
-        folder_sorting: "updated_at",
-        folder_spaces_filter: null,
-        active_path_length: 0,
-        space_comment: "",
-        folder_spaces_search: "",
-        medium_for_object: {}
-    },
-    methods: {
-        search_spaces: function() {
-            var e = this.folder_spaces_search;
-            console.log("search query: ", e), load_spaces_search(e, function(e) {
-                console.log("results: ", e), this.active_profile_spaces = e;
-            }.bind(this));
-        },
-        guest_logout: function() {
-            "localStorage" in window && localStorage && delete localStorage.guest_nickname, 
-            this.guest_nickname = "", location.reload();
-        },
-        ask_guestname: function(e, i) {
-            console.log("ask_guestname");
-            var t = "Spacedeck";
-            subdomainTeam && (t = subdomainTeam.name), smoke.prompt(__("what_is_your_name", t), function(t) {
-                if (t && 0 !== t.length) {
-                    if (this.guest_nickname = t, "localStorage" in window && localStorage) try {
-                        localStorage.guest_nickname = this.guest_nickname;
-                    } catch (s) {
-                        console.error(s);
-                    }
-                    i && i();
-                } else this.ask_guestname(e, i);
-            }.bind(this), {
-                value: e || "Guest " + parseInt(1e4 * Math.random()),
-                ok: __("ok"),
-                cancel: __("cancel")
-            });
-        },
-        load_space: function(e, i, t) {
-            console.log("load space: ", e), this.folder_spaces_filter = "", this.folder_spaces_search = "", 
-            space_auth = get_query_param("spaceAuth");
-            var s = function() {
-                if (get_query_param("embedded") && (this.embedded = !0, this.guest_signup_enabled = !0, 
-                get_query_param("publish_cta") && (this.publish_cta = get_query_param("publish_cta")), 
-                get_query_param("nosocial") && (this.social_bar = !1)), get_query_param("confirm") && this.logged_in) {
-                    var s = get_query_param("confirm");
-                    return void confirm_user(this.user, s, function() {
-                        this.redirect_to("/spaces/" + e + "?show_access=1");
-                    }.bind(this), function() {
-                        alert("An error occured confirming your email with the given token.");
-                    });
-                }
-                this.close_dropdown(), this.active_space_loaded = !1, this.viewport_zoom = 1, this.viewport_zoom_percent = 100, 
-                this.loading_space_id = e, this.present_mode = !1, this.active_space_is_readonly = !0, 
-                this.opened_dialog = "none", this.open_space_dialog = "none", this.selected_artifacts_dict = {}, 
-                this.update_selection_metrics(), this.can_add_comment = !1;
-                var a = !1;
-                this.user && (a = e == this.user.home_folder_id), document.title = "Loading… | Spacedeck", 
-                load_space(e, function(t, s) {
-                    if (document.title = t.name, this.active_space_role = s || "viewer", this.space_embed_html = '<iframe width="1024" height="768" seamless src="' + ENV.webEndpoint + "/spaces/" + t._id + '?embedded=1"></iframe>', 
-                    a || load_members(t, function(e) {
-                        this.active_space_memberships = e;
-                    }.bind(this)), console.log("[websocket] auth start"), "folder" == t.space_type) {
-                        if (this.active_space = {
-                            advanced: {}
-                        }, document.title = "Spacedeck", load_spaces(e, a, function(e) {
-                            t.children = e, this.loading_space_id = null, this.active_profile_spaces = t.children, 
-                            this.active_folder = t, this.access_settings_space = t, this.auth_websocket(this.active_folder), 
-                            this.load_space_path(this.active_folder), a && (this.root_folder = t), load_history(t, function(e) {
-                                if (console.log("loaded digest", e), this.active_folder_history_items = e, this.meta_unseen = 0, 
-                                "localStorage" in window && localStorage) var i = parseInt(localStorage[this.meta_last_seen_key()], 10); else var i = 0;
-                                for (var t = 0; t < e.length; t++) {
-                                    var s = e[t], a = new Date(s.last_action).getTime(), n = !1;
-                                    1 == s.users.length && "you" == s.users[0] && (n = !0), a > i && !n && this.meta_unseen++;
-                                }
-                            }.bind(this)), this.active_view = "folders";
-                        }.bind(this)), "localStorage" in window) {
-                            var n = "folder_sorting_" + e, o = "folder_reverse_" + e;
-                            localStorage[n] && localStorage[o] && (this.folder_sorting = localStorage[n], this.folder_reverse = parseInt(localStorage[o]), 
-                            console.log("loaded folder sorting: ", this.folder_sorting, this.folder_reverse));
-                        }
-                        "opened_at" == this.folder_sorting && (this.folder_sorting = "name");
-                    } else "space" == t.space_type && (this.artifacts = [], this.loading_space_id = null, 
-                    document.title = t.name, (space_auth || this.logged_in) && (this.can_add_comment = !0), 
-                    this.setup_watches(), load_artifacts(t._id, function(e) {
-                        e || (e = []);
-                        for (var s = 0; s < e.length; s++) this.update_board_artifact_viewmodel(e[s]);
-                        this.active_space_artifacts = e, this.$set("active_space", t), this.active_space = t, 
-                        this.auth_websocket(this.active_space), this.active_view = "space", this.fixup_space_size(), 
-                        t._id != this.active_space._id ? (this.present_mode = !0, this.active_space_is_readonly = !0) : this.active_space_is_readonly = !1, 
-                        this.discover_zones(), window.setTimeout(function() {
-                            this.zoom_to_fit();
-                        }.bind(this), 10), i && i(), this.active_space_loaded = !0, this.extract_properties_from_selection(), 
-                        load_comments(t._id, function(e) {
-                            e || (e = []), this.active_space_messages = e, this.refresh_space_comments();
-                        }.bind(this), function(e) {
-                            console.error(e);
-                        });
-                    }.bind(this)), "editor" != this.active_space_role && "admin" != this.active_space_role || (this.present_mode = !1, 
-                    this.active_space_is_readonly = !1), this.active_join_link = "", this.join_link_role = "viewer", 
-                    "admin" == this.active_space_role ? this.space_info_section = "access" : "editor" == this.active_space_role || (this.space_info_section = "info"));
-                }.bind(this), function(i) {
-                    return t ? t(i) : void (403 == i.status ? this.logged_in ? this.redirect_to("/") : this.redirect_to("/login?space_id=" + e) : (this.redirect_to("/not_found"), 
-                    console.error(i)));
-                }.bind(this));
-            }.bind(this), a = "";
-            "localStorage" in window && localStorage && localStorage.guest_nickname && (this.guest_nickname = localStorage.guest_nickname, 
-            a = this.guest_nickname, s()), space_auth ? this.guest_nickname ? s() : this.ask_guestname(a, function() {
-                s();
-            }) : (this.guest_nickname = "", s());
-        },
-        refresh_space_comments: function() {
-            this.meta_unseen = 0;
-            var e = this.active_space_messages, i = 0;
-            "localStorage" in window && localStorage && (i = parseInt(localStorage[this.meta_last_seen_key()], 10));
-            for (var t = 0; t < e.length; t++) {
-                var s = e[t], a = new Date(s.updated_at).getTime(), n = !1;
-                this.user && this.user._id != s.user_id && !s.editor_name && (n = !0), a > i && !n && this.meta_unseen++;
-            }
-        },
-        go_to_next_space: function() {
-            var e = this.active_folder.children.map(function(e) {
-                return e._id;
-            }), i = e.indexOf(this.active_space._id);
-            console.log("index: ", i);
-            for (var t = i, s = !1; !s; ) {
-                var a = this.active_folder.children[(i + 1) % e.length];
-                "folder" == a.space_type ? (s = !1, i++) : s = !0, t == i && (s = !0);
-            }
-            this.load_space(a._id);
-        },
-        go_to_previous_space: function() {
-            var e = this.active_folder.children.map(function(e) {
-                return e._id;
-            }), i = e.indexOf(this.active_space._id);
-            console.log("index: ", i);
-            for (var t = i, s = !1; !s; ) {
-                var i = (i < 1 ? e.length : i) - 1, a = this.active_folder.children[i];
-                "folder" == a.space_type ? (s = !1, i--) : s = !0, t == i && (s = !0);
-            }
-            this.load_space(a._id);
-        },
-        filtered_folder_children: function(e) {
-            var e = e || "space";
-            return _.filter(this.active_folder.children, function(i) {
-                return i.space_type == e;
-            });
-        },
-        load_space_path: function(e) {
-            return e ? void load_space_path(e._id, function(e) {
-                this.active_space_path = e;
-            }.bind(this), function() {
-                console.log("could not load folder path");
-            }) : [];
-        },
-        is_active_space_role: function(e) {
-            return !!this.active_space && this.active_space_role == e;
-        },
-        create_space: function(e) {
-            if (this.active_folder) {
-                this.close_modal(), this.folder_spaces_filter = "", this.active_folder.children || (this.active_folder.children = []), 
-                e || (e = "space");
-                var i = {
-                    name: "space" == e ? __("untitled_space") : __("untitled_folder"),
-                    artifacts: [],
-                    space_type: e,
-                    parent_space_id: this.active_folder._id
-                };
-                this.create_space_title.length && (i.name = this.create_space_title), save_space(i, function(i) {
-                    this.active_folder.children.push(i), "folder" != e ? this.redirect_to("/" + i.space_type + "s/" + i._id, function(e) {}) : this.rename_folder(i);
-                }.bind(this), function(e) {
-                    alert("Error: Could not create Space (" + e.status + ").");
-                }.bind(this));
-            }
-        },
-        save_space: function(e) {
-            save_space(e);
-        },
-        create_space_version: function() {
-            if (!this.is_pro(this.user)) return void smoke.confirm(__("spacedeck_pro_ad_versions"), function(e) {
-                e && this.show_upgrade_modal();
-            }.bind(this));
-            this.version_saving = !0, this.present_mode = !1;
-            var e = this.active_space.draft_space;
-            console.log("create_space_version:", e), duplicate_space(e, null, function(e) {
-                load_spaces(this.active_space._id, !1, function(e) {
-                    this.version_saving = !1, this.activate_space_version(e, e.draft_space), alert("Version saved.");
-                }.bind(this));
-            }.bind(this), function(e) {
-                console.error(e);
-            }.bind(this));
-        },
-        finalize_folder_profile_edit: function() {
-            save_space(this.active_folder, function(e) {
-                this.close_modal();
-            }.bind(this));
-        },
-        finalize_space_profile_edit: function() {
-            save_space(this.active_space, function(e) {
-                this.close_modal();
-            }.bind(this));
-        },
-        delete_space: function(e) {
-            smoke.confirm("Really delete " + e.name + "?", function(i) {
-                if (i) {
-                    var t = this.active_folder.children.indexOf(e);
-                    delete_space(e, function() {
-                        e.parent_space_id ? this.redirect_to("/folders/" + e.parent_space_id, function(e) {}) : this.redirect_to("/spaces", function(e) {}), 
-                        this.close_modal(), this.active_folder.children.splice(t, 1);
-                    }.bind(this));
-                }
-            }.bind(this));
-        },
-        duplicate_space: function(e) {
-            duplicate_space(e, null, function(e) {
-                this.active_folder.children.push(e);
-            }.bind(this), function(e) {
-                console.error(e);
-            }.bind(this));
-        },
-        remove_avatar: function(e) {
-            remove_avatar_file("space", e, function(e) {
-                this.active_space = e;
-            }.bind(this));
-        },
-        rename_space: function(e) {
-            return this.close_dropdown(), "folder" == e.space_type ? this.rename_folder(e) : void smoke.prompt(__("new_space_title"), function(i) {
-                i && i.length && (e.name = i, save_space(e));
-            }.bind(this), {
-                value: e.name
-            });
-        },
-        rename_folder: function(e) {
-            this.close_dropdown(), smoke.prompt(__("new_folder_title"), function(i) {
-                i && i.length && (e.name = i, save_space(e));
-            }.bind(this), {
-                value: e.name
-            });
-        },
-        edit_space_title: function() {
-            this.close_dropdown(), "editor" != this.active_space_role && "admin" != this.active_space_role || (this.space_editing_title = !0, 
-            $("#space-title").focus());
-        },
-        save_space_title: function(e) {
-            this.active_space.name = e, save_space(this.active_space, function() {
-                this.space_editing_title = !1;
-            }.bind(this));
-        },
-        save_space_keydown: function(e) {
-            if (e) {
-                if (13 != e.keyCode) return void (this.space_editing_title = !0);
-                e.preventDefault(), e.stopPropagation(), e.target.blur();
-            }
-            save_space(this.active_space, function(e) {
-                this.active_space.edit_slug = e.edit_slug, this.space_editing_title = !1;
-            }.bind(this));
-        },
-        save_space_description: function(e) {
-            e.preventDefault(), e.stopPropagation();
-            var i = e.target.innerText;
-            e.target.blur(), this.active_space.description = i, save_space(this.active_space);
-        },
-        save_space_domain: function(e) {
-            e.preventDefault(), e.stopPropagation();
-            var i = e.target.innerText;
-            e.target.blur(), this.active_space.domain = i, save_space(this.active_space);
-        },
-        download_space: function() {
-            smoke.quiz(__("download_space"), function(e, i) {
-                "PDF" == e ? this.download_space_as_pdf(this.active_space) : "ZIP" == e ? this.download_space_as_zip(this.active_space) : "TXT" == e && this.download_space_as_list(this.active_space);
-            }.bind(this), {
-                button_1: "PDF",
-                button_2: "ZIP",
-                button_3: "TXT",
-                button_cancel: __("cancel")
-            });
-        },
-        download_space_as_png: function(e) {
-            window.open(ENV.apiEndpoint + "/api/spaces/" + e._id + "/png");
-        },
-        download_space_as_pdf: function(e) {
-            this.global_spinner = !0, get_resource("/spaces/" + e._id + "/pdf", function(e) {
-                this.global_spinner = !1, location.href = e.url;
-            }.bind(this), function(e) {
-                this.global_spinner = !1, alert("PDF export problem (" + e.status + ").");
-            }.bind(this));
-        },
-        download_space_as_zip: function(e) {
-            this.global_spinner = !0, get_resource("/spaces/" + e._id + "/zip", function(e) {
-                this.global_spinner = !1, location.href = e.url;
-            }.bind(this), function(e) {
-                this.global_spinner = !1, alert("ZIP export problem (" + e.status + ").");
-            }.bind(this));
-        },
-        download_space_as_list: function(e) {
-            this.global_spinner = !0, location.href = "/api/spaces/" + e._id + "/list";
-        },
-        duplicate_space_into_folder: function() {
-            load_writable_folders(function(e) {
-                this.duplicate_folders = _.sortBy(e, function(e) {
-                    return e.name;
-                });
-            }.bind(this), function(e) {
-                console.error(e);
-            });
-        },
-        duplicate_folder_confirm: function() {
-            var e = this.duplicate_folder_id, i = _.findIndex(this.duplicate_folders, function(i) {
-                return i._id == e;
-            });
-            i < 0 && (i = 0);
-            var t = this.duplicate_folders[i];
-            console.log("df f", t), t && duplicate_space(this.active_space, t._id, function(e) {
-                this.duplicate_folders = [], this.duplicate_folder = null, smoke.quiz(__("duplicate_success", this.active_space.name, t.name), function(i, s) {
-                    i == __("goto_space", e.name) ? this.redirect_to("/spaces/" + e._id) : i == __("goto_folder", t.name) && this.redirect_to("/folders/" + t._id);
-                }.bind(this), {
-                    button_1: __("goto_space", e.name),
-                    button_2: __("goto_folder", t.name),
-                    button_cancel: __("stay_here")
-                });
-            }.bind(this), function(e) {
-                console.error(e), smoke.prompt("error: " + e.statusText);
-            }.bind(this));
-        },
-        toggle_follow_mode: function() {
-            this.deselect(), this.follow_mode = !this.follow_mode;
-        },
-        toggle_present_mode: function() {
-            this.deselect(), this.present_mode = !this.present_mode, this.present_mode;
-        },
-        meta_last_seen_key: function() {
-            var e = "meta-seen-";
-            if ("space" == this.active_view) {
-                if (!this.active_space) return "invalid";
-                e += this.active_space._id;
-            } else if ("folders" == this.active_view) {
-                if (!this.active_folder) return "invalid";
-                e += this.active_folder._id;
-            }
-            return e;
-        },
-        toggle_meta: function() {
-            if (this.meta_visible = !this.meta_visible, this.meta_visible) {
-                var e = this.meta_last_seen_key();
-                "localStorage" in window && localStorage && (localStorage[e] = new Date().getTime(), 
-                console.log("seen_key: ", e, localStorage[e]), this.meta_last_seen = localStorage[e]), 
-                this.meta_unseen = 0;
-            }
-        },
-        toggle_space_access_mode: function() {
-            this.access_settings_space.access_mode = "public" == this.access_settings_space.access_mode ? "private" : "public", 
-            save_space(this.access_settings_space);
-        },
-        save_space_access_mode: function(e) {
-            this.access_settings_space.access_mode = e.currentTarget.value, save_space(this.access_settings_space);
-        },
-        save_space_editors_locking: function(e) {
-            this.access_settings_space.editors_locking = e.currentTarget.checked, save_space(this.access_settings_space);
-        },
-        create_join_link: function() {
-            create_join_link(this.active_space._id, this.join_link_role, function(e) {
-                this.active_join_link = "https://" + location.host + "/invitations/" + e.code + "/accept";
-            }.bind(this));
-        },
-        delete_join_link: function() {
-            get_join_link(this.active_space._id, function(e) {
-                e && e.length && delete_join_link(e[e.length - 1]._id, function() {
-                    this.active_join_link = "";
-                }.bind(this));
-            }.bind(this));
-        },
-        invite_member: function(e, i, t, s) {
-            this.invite_email_error = null;
-            var a = i.split(","), n = !1;
-            _.each(a, function(i) {
-                if (i = i.trim(), !validateEmail(i)) return void (this.invite_email_error = "Please enter a valid address.");
-                var a = {
-                    email_invited: i,
-                    personal_message: t,
-                    role: s
-                };
-                create_membership(e, a, function(e) {
-                    this.access_settings_memberships.push(e), console.log("membership created:", e), 
-                    this.editors_section = "list", n || (n = !0, smoke.alert("Invitation(s) sent."), 
-                    this.invite_email = "", this.invite_message = "");
-                }.bind(this), function(e) {
-                    text = JSON.stringify(e.responseText), smoke.alert("Error: " + text);
-                }.bind(this));
-            }.bind(this));
-        },
-        update_member: function(e, i, t) {
-            i.role = t, save_membership(e, i, function() {
-                console.log("saved");
-            }.bind(this), function(e) {
-                console.error(e);
-            }.bind(this));
-        },
-        remove_member: function(e, i) {
-            delete_membership(e, i, function() {
-                this.access_settings_memberships.splice(this.access_settings_memberships.indexOf(i), 1);
-            }.bind(this), function(e) {
-                console.error(e);
-            }.bind(this));
-        },
-        history_back: function() {
-            window.history.back();
-        },
-        create_space_comment: function(e) {
-            if (e.length) {
-                var i = {
-                    space: this.active_space._id,
-                    message: e,
-                    editor_name: this.guest_nickname,
-                    user: this.user
-                };
-                save_comment(this.active_space._id, i, function(e) {
-                    console.log("comment saved: ", e.created_at), this.active_space_messages.push(e), 
-                    this.space_comment = "";
-                }.bind(this), function(e) {
-                    console.error(e);
-                }.bind(this));
-            }
-        },
-        remove_space_comment: function(e) {
-            delete_comment(this.active_space._id, e._id, function() {
-                console.log("comment id:", e._id), this.active_space_messages = _.filter(this.active_space_messages, function(i) {
-                    return i._id != e._id;
-                });
-            }.bind(this), function(e) {
-                console.error(e);
-            }.bind(this));
-        },
-        emojified_comment: function(e) {
-            return twemoji.parse(e);
-        },
-        set_folder_sorting: function(e, i) {
-            this.folder_sorting = e, this.folder_reverse = i ? -1 : 1, console.log(e, i), "localStorage" in window && (localStorage["folder_sorting_" + this.active_folder._id] = this.folder_sorting, 
-            localStorage["folder_reverse_" + this.active_folder._id] = this.folder_reverse);
-        },
-        activate_space_info_section: function(e) {
-            this.space_info_section = e, this.editors_section = "list", "versions" == e && load_spaces(this.active_space._id, null, function(e) {
-                this.active_space.children = e.children, console.log("loaded: ", e);
-            }.bind(this));
-        },
-        handle_folder_drop: function(e, i) {
-            try {
-                var t = JSON.parse(e.dataTransfer.getData("application/json"));
-            } catch (s) {
-                return;
-            }
-            if (t && t._id && t.parent_space_id && i._id && t._id != i._id) {
-                if ("folder" != i.space_type) return void alert("Spaces can only be moved into folders.");
-                t.parent_space_id = i._id, save_space(t, function() {
-                    var e = _.findIndex(this.active_folder.children, function(e) {
-                        return e._id == t._id;
-                    });
-                    e >= 0 && (this.active_folder.children.splice(e, 1), console.log("spliced: ", e));
-                }.bind(this));
-            }
-        },
-        activate_access: function() {
-            if (this.activate_modal("access"), this.active_space._id) this.access_settings_space = this.active_space; else {
-                if (!this.active_folder || !this.active_folder._id) return;
-                this.access_settings_space = this.active_folder;
-            }
-            this.access_settings_memberships = this.active_space_memberships;
-        },
-        close_access: function() {
-            this.close_modal();
-        },
-        show_offline_help: function() {
-            smoke.confirm(__("was_offline"), function(e) {
-                e && location.reload();
-            });
-        }
-    }
-};
-var SpacedeckTeams = {
-    data: {
-        team_members: [],
-        team_loading: !1,
-        team_logo: "",
-        team_emails: "",
-        team_email_invited: !1,
-        team_plan_calculation: ""
-    },
-    methods: {
-        is_admin: function(e) {
-            return _.filter(e.team.admins, function(t) {
-                return t == e._id;
-            }).length > 0;
-        },
-        calculate_team: function() {
-            this.team_plan_calculation = "";
-        },
-        load_team: function() {
-            this.user.team && load_resource("GET", "/teams/" + this.user.team._id + "/memberships", null, function(e) {
-                this.team_members = e, this.calculate_team();
-            }.bind(this), function(e, t, i) {
-                console.log(e, t, i);
-            });
-        },
-        team_save: function() {
-            load_resource("PUT", "/teams/" + this.user.team._id, this.user.team, function(e, t) {
-                alert("Team updated.");
-            }.bind(this), function(e) {
-                console.error(e), alert("Could not update Team.");
-            });
-        },
-        team_update_member: function(e) {
-            load_resource("PUT", "/teams/" + this.user.team._id + "/memberships/" + e._id, e, function(e, t) {
-                console.log("members updated");
-            }.bind(this), function(e) {
-                console.error(e);
-            });
-        },
-        team_invite_members: function(e) {
-            var t = e.split(",");
-            for (_i = 0, _len = t.length; _i < _len; _i++) if (email = t[_i], email = email.replace(new RegExp(" ", "g"), "").toLowerCase(), 
-            validateEmail(email)) {
-                var i = {
-                    email: email
-                };
-                load_resource("POST", "/teams/" + this.user.team._id + "/memberships", i, function(e, t) {
-                    this.team_email_invited = !0, this.team_members.push(e);
-                    window.setTimeout(function() {
-                        this.team_email_invited = !1;
-                    }.bind(this), 1e3);
-                    this.team_emails = "";
-                }.bind(this), function(e, t, i) {
-                    console.log(e, t, i), this.team_invite_error = JSON.parse(e.responseText).error;
-                }.bind(this));
-            }
-        },
-        team_promote_member: function(e) {
-            load_resource("GET", "/teams/" + this.user.team._id + "/memberships/" + e._id + "/promote", null, function(e, t) {
-                this.load_user(function() {
-                    this.load_team();
-                }.bind(this));
-            }.bind(this), function(e) {
-                console.error(e);
-            });
-        },
-        team_demote_member: function(e) {
-            load_resource("GET", "/teams/" + this.user.team._id + "/memberships/" + e._id + "/demote", null, function(e, t) {
-                this.load_user(function() {
-                    this.load_team();
-                }.bind(this));
-            }.bind(this), function(e) {
-                console.error(e);
-            });
-        },
-        team_remove_member: function(e) {
-            confirm("Really delete this member?") && (e.user_id && "active" === e.state ? load_resource("DELETE", "/users/" + e._id, null, function(t, i) {
-                var s = this.team_members.indexOf(e);
-                this.team_members.splice(s, 1);
-            }.bind(this), function(e) {
-                console.error(e);
-            }) : load_resource("DELETE", "/teams/" + this.user.team._id + "/memberships/" + e._id, null, function(t, i) {
-                var s = this.team_members.indexOf(e);
-                this.team_members.splice(s, 1);
-            }.bind(this), function(e) {
-                console.error(e);
-            }));
-        }
-    }
-};
-var SpacedeckBoardArtifacts = {
-    update_board_artifact_viewmodel: function(t) {
-        var e = this.artifact_major_type(t);
-        if (t.view = {
-            _id: t._id,
-            classes: this.artifact_classes(t),
-            style: this.artifact_style(t),
-            grid_style: this.artifact_style(t, !0),
-            inner_style: this.artifact_inner_style(t),
-            text_cell_style: this.artifact_text_cell_style(t),
-            vector_svg: this.artifact_vector_svg(t),
-            payload_uri: t.payload_uri,
-            thumbnail_uri: this.artifact_thumbnail_uri(t),
-            major_type: e,
-            text_blank: this.artifact_is_text_blank(t),
-            payload_alternatives: t.payload_alternatives,
-            filename: this.artifact_filename(t),
-            oembed_html: this.artifact_oembed_html(t),
-            link: this.artifact_link(t),
-            link_caption: this.artifact_link_caption(t),
-            interactive: 0
-        }, "audio" != e && "video" != e || t.player_view || (t.player_view = {
-            state: "stop",
-            current_time_string: "",
-            total_time_string: "",
-            current_time_float: 0,
-            inpoint_float: 0,
-            outpoint_float: 0
-        }), "medium_for_object" in this) {
-            var a = this.medium_for_object[t._id];
-            a && t._id != this.editing_artifact_id && a.value(t.description);
-        }
-    },
-    is_artifact_audio: function(t) {
-        return !!t && t.mime.match("audio");
-    },
-    artifact_filename: function(t) {
-        return t.payload_uri ? t.payload_uri.replace(/.*\//g, "") : "";
-    },
-    artifact_link: function(t) {
-        return t.meta && t.meta.link_uri ? t.meta.link_uri : "";
-    },
-    artifact_link_caption: function(t) {
-        if (t.meta && t.meta.link_uri) {
-            var e = t.meta.link_uri.split("/");
-            return e.length > 2 ? e[2] : "Link";
-        }
-        return "";
-    },
-    artifact_is_selected: function(t) {
-        return !!t && !!this.selected_artifacts_dict[t._id];
-    },
-    artifact_is_text_blank: function(t) {
-        if (t.description) {
-            var e = t.description.replace(/<[^>]+>/g, "").replace(/\s/g, "");
-            return e.length < 1;
-        }
-        return !1;
-    },
-    artifact_classes: function(t) {
-        return clzs = [ "artifact", "artifact-" + this.artifact_major_type(t), t.mime.replace("/", "-") ], 
-        this.artifact_is_selected(t) && this.editing_artifact_id != t._id && clzs.push("selected"), 
-        t._id || clzs.push("creating"), t.style && (clzs.push("align-" + t.style.align), 
-        clzs.push("align-" + t.style.valign)), clzs.push("state-" + t.state), this.artifact_is_text_blank(t) && clzs.push("text-blank"), 
-        t.locked && clzs.push("locked"), clzs.join(" ");
-    },
-    artifact_inner_style: function(t) {
-        var e = [];
-        if (t.style) {
-            var a = (t.mime.match("vector") || t.mime.match("shape")) && "square" != t.style.shape;
-            a || (t.style.stroke && (e.push("border-width:" + t.style.stroke + "px"), e.push("border-style:" + (t.style.stroke_style || "solid"))), 
-            t.style.stroke_color && e.push("border-color:" + t.style.stroke_color), t.style.border_radius && e.push("border-radius:" + t.style.border_radius + "px")), 
-            t.style.fill_color && !a && e.push("background-color:" + t.style.fill_color), t.style.text_color && e.push("color:" + t.style.text_color);
-            var r = [];
-            isNaN(t.style.brightness) || 100 == t.style.brightness || r.push("brightness(" + t.style.brightness + "%)"), 
-            isNaN(t.style.contrast) || 100 == t.style.contrast || r.push("contrast(" + t.style.contrast + "%)"), 
-            isNaN(t.style.opacity) || 100 == t.style.opacity || r.push("opacity(" + t.style.opacity + "%)"), 
-            !isNaN(t.style.hue) && t.style.hue && r.push("hue-rotate(" + t.style.hue + "deg)"), 
-            isNaN(t.style.saturation) || 100 == t.style.saturation || r.push("saturate(" + t.style.saturation + "%)"), 
-            !isNaN(t.style.blur) && t.style.blur && r.push("blur(" + t.style.blur + "px)"), 
-            r.length && (e.push("-webkit-filter:" + r.join(" ")), e.push("filter:" + r.join(" ")));
-        }
-        return e.join(";");
-    },
-    artifact_text_cell_style: function(t, e) {
-        var a = [];
-        return t.style && (t.style.padding_left && a.push("padding-left:" + t.style.padding_left + "px"), 
-        t.style.padding_right && a.push("padding-right:" + t.style.padding_right + "px"), 
-        t.style.padding_top && a.push("padding-top:" + t.style.padding_top + "px"), t.style.padding_bottom && a.push("padding-bottom:" + t.style.padding_bottom + "px")), 
-        a.join(";");
-    },
-    artifact_style: function(t, e) {
-        var a = [], r = 0;
-        return t.board && (r = t.board.z, r < 0 && (r = 0), a = [ "left:" + t.board.x + "px", "top:" + t.board.y + "px", "width:" + t.board.w + "px", "height:" + t.board.h + "px", "z-index:" + r ]), 
-        t.style && (t.style.margin_left && a.push("margin-left:" + t.style.margin_left + "px"), 
-        t.style.margin_right && a.push("margin-right:" + t.style.margin_right + "px"), t.style.margin_top && a.push("margin-top:" + t.style.margin_top + "px"), 
-        t.style.margin_bottom && a.push("margin-bottom:" + t.style.margin_bottom + "px")), 
-        t.mime.match("vector") && a.push("overflow:visible"), a.join(";");
-    },
-    artifact_major_type: function(t) {
-        return t.mime.match("oembed") ? "oembed" : t.mime.match("zone") ? "zone" : t.mime.match("svg") ? "svg" : t.mime.match("image") ? "image" : t.mime.match("pdf") ? "image" : t.mime.match("video") ? "video" : t.mime.match("audio") ? "audio" : t.mime.match("website") ? "website" : t.mime.match("vector") ? "vector" : t.mime.match("shape") ? "shape" : t.mime.match("placeholder") ? "placeholder" : t.mime.match("text") || t.mime.match("note") ? "text" : "file";
-    },
-    artifact_thumbnail_uri: function(t) {
-        return t.payload_thumbnail_big_uri && t.board && t.board.w > 800 ? t.payload_thumbnail_big_uri : t.payload_thumbnail_medium_uri || t.payload_thumbnail_big_uri || t.payload_thumbnail_web_uri || "";
-    },
-    artifact_oembed_html: function(t) {
-        if ("oembed" != this.artifact_major_type(t)) return "";
-        var e = t.mime.split("/")[1].split("-"), a = e[0], r = e[1];
-        if (!t.meta || !t.meta.link_uri) return console.log("missing meta / link_uri: ", t), 
-        console.log("type/provider: ", a, r), "missing metadata: " + t._id;
-        if ("youtube" == r) {
-            var i = t.meta.link_uri.match(/(v=|\/)([a-zA-Z0-9\-_]{11})/);
-            if (i && i.length > 2) {
-                var n = "https://youtube.com/embed/" + i[2];
-                return '<iframe frameborder=0 allowfullscreen src="' + n + '?showinfo=0&rel=0&controls=0"></iframe>';
-            }
-            return "Can't resolve: " + t.payload_uri;
-        }
-        if ("dailymotion" == r) {
-            var o = t.meta.link_uri.match(/dailymotion.com\/video\/([^<]*)/);
-            if (o && o.length > 1) {
-                var n = "https://www.dailymotion.com/embed/video/" + o[1];
-                return '<iframe frameborder=0 allowfullscreen src="' + n + '"></iframe>';
-            }
-            return "Can't resolve: " + t.payload_uri;
-        }
-        if ("vimeo" == r) {
-            var o = t.meta.link_uri.match(/https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/);
-            if (o) {
-                var n = "https://player.vimeo.com/video/" + o[2];
-                return '<iframe frameborder=0 allowfullscreen src="' + n + '"></iframe>';
-            }
-            return "Can't resolve: " + t.payload_uri;
-        }
-        return "soundcloud" == r ? '<iframe width="100%" height="166" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=' + t.meta.link_uri.replace(":", "%3A") + '"></iframe>' : "spacedeck" == r ? "" : "Don't know how to embed " + t.mime + ".";
-    },
-    artifact_vector_svg: function(t) {
-        var e = this.artifact_major_type(t);
-        if ("vector" != e && "shape" != e) return "";
-        var a, r = (t.style.shape || "", 32 + 2 * t.style.stroke), i = "";
-        "vector" == e ? (a = render_vector_drawing(t, r), i = "fill:none") : (a = render_vector_shape(t, r), 
-        i = "fill:" + t.style.fill_color + ";", r = 0);
-        var n = r, o = "<svg xmlns='http://www.w3.org/2000/svg' width='" + (t.board.w + 2 * r) + "' height='" + (t.board.h + 2 * r) + "' ";
-        return o += "style='margin-left:" + -n + "px;margin-top:" + -n + "px;stroke-width:" + t.style.stroke + ";stroke:" + t.style.stroke_color + ";" + i + "'>", 
-        o += a, o += "</svg>";
-    },
-    artifact_enclosing_rect: function(t) {
-        return 0 == t.length ? null : (r = {
-            x1: parseInt(_.min(t.map(function(t) {
-                return t.board.x;
-            }))),
-            y1: parseInt(_.min(t.map(function(t) {
-                return t.board.y;
-            }))),
-            x2: parseInt(_.max(t.map(function(t) {
-                return t.board.x + t.board.w;
-            }))),
-            y2: parseInt(_.max(t.map(function(t) {
-                return t.board.y + t.board.h;
-            })))
-        }, r.x = r.x1, r.y = r.y1, r.w = r.x2 - r.x1, r.h = r.y2 - r.y1, r);
-    },
-    artifact_selection_rect: function() {
-        return this.artifact_enclosing_rect(this.selected_artifacts());
-    },
-    rects_intersecting: function(t, e) {
-        return !(t.x + t.w < e.x || t.x > e.x + e.w || t.y + t.h < e.y || t.y > e.y + e.h);
-    },
-    artifacts_in_rect: function(t) {
-        return _.filter(this.active_space_artifacts, function(e) {
-            return this.rects_intersecting(e.board, t);
-        }.bind(this));
-    },
-    layout_stack_top: function() {
-        this.begin_transaction();
-        var t = this.artifact_selection_rect(), e = _.filter(this.artifacts_in_rect(t), function(t) {
-            return !this.is_selected(t);
-        }.bind(this)), a = _.max(e, function(t) {
-            return t.board.z;
-        });
-        a = a.board ? a.board.z + 1 : 1, this.update_selected_artifacts(function(t) {
-            return {
-                board: _.extend(t.board, {
-                    z: a
-                })
-            };
-        });
-    },
-    layout_stack_bottom: function() {
-        this.begin_transaction();
-        var t = this.artifact_selection_rect(), e = _.filter(this.artifacts_in_rect(t), function(t) {
-            return !this.is_selected(t);
-        }.bind(this)), a = _.min(e, function(t) {
-            return t.board ? t.board.z : 0;
-        });
-        a = a.board ? a.board.z - 1 : 0;
-        var r = _.max(this.selected_artifacts(), function(t) {
-            t.board ? t.board.z : 0;
-        });
-        return r = r.board ? r.board.z - 1 : 0, a < 0 ? void this.update_artifacts(e, function(t) {
-            return {
-                board: _.extend(t.board, {
-                    z: r + (t.board ? t.board.z : 0) + 1
-                })
-            };
-        }) : void this.update_selected_artifacts(function(t) {
-            return {
-                board: _.extend(t.board, {
-                    z: a
-                })
-            };
-        });
-    },
-    layout_align_left: function() {
-        this.begin_transaction();
-        var t = this.artifact_selection_rect();
-        this.update_selected_artifacts(function(e) {
-            return {
-                board: _.extend(e.board, {
-                    x: t.x1
-                })
-            };
-        });
-    },
-    layout_align_top: function() {
-        this.begin_transaction();
-        var t = this.artifact_selection_rect();
-        this.update_selected_artifacts(function(e) {
-            return {
-                board: _.extend(e.board, {
-                    y: t.y1
-                })
-            };
-        });
-    },
-    layout_align_right: function() {
-        this.begin_transaction();
-        var t = this.artifact_selection_rect();
-        this.update_selected_artifacts(function(e) {
-            return {
-                board: _.extend(e.board, {
-                    x: t.x2 - e.board.w
-                })
-            };
-        });
-    },
-    layout_align_bottom: function() {
-        this.begin_transaction();
-        var t = this.artifact_selection_rect();
-        this.update_selected_artifacts(function(e) {
-            return {
-                board: _.extend(e.board, {
-                    y: t.y2 - e.board.h
-                })
-            };
-        });
-    },
-    layout_align_center: function() {
-        this.begin_transaction();
-        var t = this.artifact_selection_rect(), e = t.x1 + (t.x2 - t.x1) / 2;
-        this.update_selected_artifacts(function(t) {
-            return {
-                board: _.extend(t.board, {
-                    x: e - t.board.w / 2
-                })
-            };
-        });
-    },
-    layout_align_middle: function() {
-        this.begin_transaction();
-        var t = this.artifact_selection_rect(), e = t.y1 + (t.y2 - t.y1) / 2;
-        this.update_selected_artifacts(function(t) {
-            return {
-                board: _.extend(t.board, {
-                    y: e - t.board.h / 2
-                })
-            };
-        });
-    },
-    layout_match_size_horiz: function() {
-        this.begin_transaction();
-        var t = this.selected_artifacts();
-        if (!(t.length < 2)) {
-            var e = _.reduce(t, function(t, e) {
-                return t + e.board.w;
-            }, 0), a = e / t.length;
-            this.update_selected_artifacts(function(t) {
-                return {
-                    board: _.extend(t.board, {
-                        w: a
-                    })
-                };
-            });
-        }
-    },
-    layout_match_size_vert: function() {
-        this.begin_transaction();
-        var t = this.selected_artifacts();
-        if (!(t.length < 2)) {
-            var e = _.reduce(t, function(t, e) {
-                return t + e.board.h;
-            }, 0), a = e / t.length;
-            this.update_selected_artifacts(function(t) {
-                return {
-                    board: _.extend(t.board, {
-                        h: a
-                    })
-                };
-            });
-        }
-    },
-    layout_match_size_both: function() {
-        this.layout_match_size_horiz(), this.layout_match_size_vert();
-    },
-    layout_distribute_horizontal: function() {
-        this.begin_transaction();
-        var t = this.selected_artifacts();
-        if (!(t.length < 3)) for (var e = _.sortBy(t, function(t) {
-            return t.board.x;
-        }), a = e[0].board.x + e[0].board.w / 2, r = _.last(e).board.x + _.last(e).board.w / 2, i = (r - a) / (e.length - 1), n = 1; n < e.length - 1; n++) {
-            var o = e[n], s = a + i * n - o.board.w / 2;
-            this.update_artifacts([ o ], function(t) {
-                return {
-                    board: _.extend(t.board, {
-                        x: s
-                    })
-                };
-            });
-        }
-    },
-    layout_distribute_vertical: function() {
-        this.begin_transaction();
-        var t = this.selected_artifacts();
-        if (!(t.length < 3)) for (var e = _.sortBy(t, function(t) {
-            return t.board.y;
-        }), a = e[0].board.y + e[0].board.h / 2, r = _.last(e).board.y + _.last(e).board.h / 2, i = (r - a) / (e.length - 1), n = 1; n < e.length - 1; n++) {
-            var o = e[n], s = a + i * n - o.board.h / 2;
-            this.update_artifacts([ o ], function(t) {
-                return {
-                    board: _.extend(t.board, {
-                        y: s
-                    })
-                };
-            });
-        }
-    },
-    layout_distribute_horizontal_spacing: function() {
-        this.begin_transaction();
-        var t = this.selected_artifacts();
-        if (!(t.length < 3)) for (var e = _.sortBy(t, function(t) {
-            return t.board.x;
-        }), a = e[0].board.x, r = _.last(e).board.x + _.last(e).board.w, i = r - a, n = _.reduce(e, function(t, e) {
-            return t + e.board.w;
-        }, 0), o = (i - n) / (e.length - 1), s = a + e[0].board.w, c = 1; c < e.length - 1; c++) {
-            var l = e[c], d = s + o;
-            this.update_artifacts([ l ], function(t) {
-                return {
-                    board: _.extend(t.board, {
-                        x: d
-                    })
-                };
-            }), s = d + l.board.w;
-        }
-    },
-    layout_distribute_vertical_spacing: function() {
-        this.begin_transaction();
-        var t = this.selected_artifacts();
-        if (!(t.length < 3)) for (var e = _.sortBy(t, function(t) {
-            return t.board.y;
-        }), a = e[0].board.y, r = _.last(e).board.y + _.last(e).board.h, i = r - a, n = _.reduce(e, function(t, e) {
-            return t + e.board.h;
-        }, 0), o = (i - n) / (e.length - 1), s = a + e[0].board.h, c = 1; c < e.length - 1; c++) {
-            var l = e[c], d = s + o;
-            this.update_artifacts([ l ], function(t) {
-                return {
-                    board: _.extend(t.board, {
-                        y: d
-                    })
-                };
-            }), s = d + l.board.h;
-        }
-    },
-    layout_auto: function() {
-        this.begin_transaction();
-        var t = this.selected_artifacts();
-        if (!(t.length < 2)) {
-            for (var e = _.sortBy(t, function(t) {
-                return t.board.x + t.board.y * this.active_space.advanced.width;
-            }.bind(this)), a = e[0].board.x, r = e[0].board.y, e = _.sortBy(t, function(t) {
-                return -Math.max(t.board.w, t.board.h);
-            }.bind(this)), i = [], n = 0; n < e.length; n++) {
-                var o = e[n];
-                i.push({
-                    w: o.board.w,
-                    h: o.board.h,
-                    a: o
-                });
-            }
-            var s = new GrowingPacker();
-            s.fit(i);
-            for (var n = 0; n < i.length; n++) {
-                var c = i[n];
-                if (c.fit) {
-                    var o = c.a;
-                    this.update_artifacts([ o ], function(t) {
-                        return {
-                            board: _.extend(t.board, {
-                                x: a + c.fit.x,
-                                y: r + c.fit.y
-                            })
-                        };
-                    });
-                }
-            }
-        }
-    },
-    show_artifact_comments: function(t) {
-        t.preventDefault(), t.stopPropagation();
-        var e = this.selected_artifacts()[0];
-        this.selected_artifact = e, this.activate_modal("artifact");
-    },
-    create_artifact_comment: function(t, e) {
-        var a = {
-            artifact_id: t._id,
-            space_id: this.active_space._id,
-            message: e,
-            user: this.user
-        };
-        save_comment(this.active_space._id, a, function(t) {
-            this.active_space_messages.push(t), this.artifact_comment = "";
-        }.bind(this), function(t) {
-            console.error(t);
-        }.bind(this));
-    },
-    remove_artifact_comment: function(t) {
-        delete_comment(this.active_space._id, t._id, function(t) {
-            this.active_space_messages.pop(t);
-        }.bind(this), function(t) {
-            console.error(t);
-        }.bind(this));
-    }
-};
-
-"undefined" == typeof window && (exports.SpacedeckBoardArtifacts = SpacedeckBoardArtifacts);
-SpacedeckUsers = {
-    data: {
-        user_forms_email: "",
-        user_forms_name: "",
-        invitation_token: null,
-        login_email: "",
-        login_password: "",
-        signup_password: "",
-        signup_password_confirmation: "",
-        account_remove_error: null,
-        loading_user: !1,
-        password_reset_confirm_error: "",
-        password_reset_error: ""
-    },
-    methods: {
-        load_user: function(t, e) {
-            this.loading_user = !0, load_current_user(function(e) {
-                this.user = e, this.loading_user = !1, this.logged_in = !0, t && t(e);
-            }.bind(this), function() {
-                this.loading_user = !1, this.logout(), e && e();
-            }.bind(this));
-        },
-        login_google: function(t) {
-            this.loading_user = !0, create_oauthtoken(function(t) {
-                this.loading_user = !1, location.href = t.url;
-            }, function(t) {
-                this.loading_user = !1, alert("could not get oauth token");
-            });
-        },
-        finalize_login: function(t, e) {
-            window.socket_auth && "" != window.socket_auth && "null" != window.socket_auth || (window.socket_auth = t), 
-            this.load_user(function(t) {
-                this.invitation_token ? accept_invitation(this.invitation_token, function(t) {
-                    this.redirect_to("/spaces/" + t.space_id);
-                }.bind(this), function(t) {
-                    console.error(t), alert("Could not accept invitation. Maybe it was already accepted?"), 
-                    this.redirect_to("/spaces");
-                }.bind(this)) : e ? e(this.user) : get_query_param("space_id") && 24 == get_query_param("space_id").length ? this.redirect_to("/spaces/" + get_query_param("space_id")) : this.redirect_to("/spaces", function() {});
-            }.bind(this));
-        },
-        login_with_token: function(t) {
-            create_session_for_oauthtoken(t, function(t) {
-                this.session = t, this.finalize_login(t.token);
-            }.bind(this), function(t) {}.bind(this));
-        },
-        login_submit: function(t, e, s, i) {
-            this.loading_user = !0, this.login_error = null, s && (s.preventDefault(), s.stopPropagation()), 
-            create_session(t, e, function(t) {
-                console.log("session: ", t), this.loading_user = !1, this.session = t, this.finalize_login(t.token, i);
-            }.bind(this), function(t) {
-                this.loading_user = !1;
-                var e = "";
-                if (t.status >= 403) var e = "error_unknown_email"; else try {
-                    var e = "error_" + JSON.parse(t.responseText).error;
-                } catch (s) {
-                    var e = (t.responseText || "Unknown Error.").replace(/,/g, " ");
-                }
-                this.login_error = __(e);
-            }.bind(this));
-        },
-        login_submit_modal: function(t, e) {
-            this.login_submit(t, e, null, function() {
-                location.reload();
-            });
-        },
-        signup_guest: function(t) {},
-        signup_submit: function(t, e, s, i, r, o) {
-            this.creating_user = !0, this.signup_error = null, "localStorage" in window && localStorage && (localStorage.sd_api_token = null), 
-            api_token = null, t && (t.preventDefault(), t.stopPropagation()), create_user(e, s, i, r, function(t) {
-                this.creating_user = !1, this.login_submit(s, i, null, o);
-            }.bind(this), function(t) {
-                this.creating_user = !1;
-                try {
-                    var e = "error_" + JSON.parse(t.responseText).error;
-                } catch (s) {
-                    var e = (t.responseText || "Unknown Error.").replace(/,/g, " ");
-                }
-                var e = __(e);
-                this.signup_error = e;
-            }.bind(this));
-        },
-        signup_submit_modal: function(t, e, s, i, r) {
-            this.signup_submit(t, e, s, i, r, function() {
-                alert("Success."), location.reload();
-            });
-        },
-        password_reset_submit: function(t, e) {
-            return t && (t.preventDefault(), t.stopPropagation()), this.password_reset_error = null, 
-            this.password_reset_send = !1, void 0 === e || e.length < 3 ? void (this.password_reset_error = "This is not a valid email address") : void create_password_reset(e, function(t, e) {
-                201 == e.status && (this.password_reset_send = !0);
-            }.bind(this), function(t) {
-                if (console.log(t.status), 404 == t.status) var e = "error_unknown_email"; else try {
-                    var e = "error_" + JSON.parse(t.responseText).error;
-                } catch (s) {
-                    var e = (t.responseText || "Unknown Error.").replace(/,/g, " ");
-                }
-                this.password_reset_error = __(e);
-            }.bind(this));
-        },
-        password_reset_confirm: function(t, e, s) {
-            return t && (t.preventDefault(), t.stopPropagation()), this.password_reset_confirm_error = null, 
-            this.password_reset_send = !1, e != s ? void (this.password_reset_confirm_error = "Passwords do not match.") : e.length < 5 ? void (this.password_reset_confirm_error = "Password too short (must have at least 5 characters).") : void confirm_password_reset(e, this.reset_token, function(t, e) {
-                201 == e.status && (this.active_view = "login");
-            }.bind(this), function(t) {
-                if (404 == t.status) var e = "user not found"; else var e = "error: " + t.statusText;
-                this.password_reset_confirm_error = e;
-            }.bind(this));
-        },
-        logout: function() {
-            this.active_view = "login", this.logged_in = !1, delete_session(function() {
-                this.active_space = {
-                    advanced: {}
-                }, this.active_space_loaded = !1, this.active_sidebar_item = "none", this.sidebar_state = "closed", 
-                this.loading_user = !1, api_token = null, this.user = {}, this.active_content_type = "login", 
-                this.redirect_to("/");
-            }.bind(this));
-        },
-        send_feedback: function(t) {
-            t.length > 0 && create_feedback(this.user, t, function(t) {
-                alert(__("feedback_sent")), this.close_modal();
-            }.bind(this), function(t) {
-                console.error(t);
-            });
-        },
-        remove_account: function(t, e) {
-            return this.account_remove_error = null, e && e.length && e.length > 1 && create_feedback(this.user, e, function(t) {
-                console.log("feedback sent");
-            }, function(t) {}), t ? void delete_user(this.user, t, function(t) {
-                alert("Sorry to see you go. Goodbye!"), this.logout();
-            }.bind(this), function(t) {
-                this.account_remove_error = "Password not correct (" + t.status + ")";
-            }.bind(this)) : void (this.account_remove_error = "Password not correct");
-        },
-        user_avatar_image: function(t) {
-            return t.avatar_thumb_uri;
-        },
-        user_initials: function(t) {
-            var e = (t ? t.nickname || t.email : "anonymous").replace(/[^a-zA-Z]/g, " ").replace(/ +/g, " ").split(" ");
-            return e.length > 1 ? e[0][0] + e[1][0] : e[0].substring(0, 2);
-        },
-        has_avatar_image: function(t) {
-            return !!(t && t.avatar_thumb_uri && t.avatar_thumb_uri.length > 0);
-        },
-        is_pro: function(t) {
-            return !0;
-        }
-    }
-};
-SpacedeckAccount = {
-    data: {
-        account_confirmed_sent: !1,
-        account_tab: "invoices",
-        password_change_error: null,
-        feedback_text: ""
-    },
-    methods: {
-        show_account: function(s) {
-            this.activate_dropdown("account"), this.load_subscription(), this.load_billing();
-        },
-        account_save_user_digest: function(s) {
-            this.user.preferences.daily_digest = s, this.save_user(function() {});
-        },
-        account_save_user_notifications: function(s) {
-            this.user.preferences.email_notifications = s, this.save_user(function() {});
-        },
-        save_user_email: function() {
-            this.save_user(function() {}.bind(this));
-        },
-        save_user_language: function(s) {
-            localStorage.lang = s, this.user.preferences && (this.user.preferences.language = s, 
-            this.save_user(function() {
-                window._spacedeck_location_change = !0, location.href = "/spaces";
-            }.bind(this)));
-        },
-        save_user: function(s) {
-            this.user.email_changed && (this.user.confirmed_at = null), window._spacedeck_location_change = !0, 
-            save_user(this.user, function(e) {
-                s ? s() : location.href = "/spaces";
-            }.bind(this), function(s) {
-                console.error(s);
-            });
-        },
-        save_user_password: function(s, e, n) {
-            return this.password_change_error = null, s ? e && n ? e != n ? void (this.password_change_error = "New Passwords do not match") : e.length < 6 ? void (this.password_change_error = "New Password to short") : void save_user_password(this.user, s, e, function() {
-                alert("OK. Password Changed."), this.password_change_current = "", this.password_change_new = "", 
-                this.password_change_new_confirmation = "";
-            }.bind(this), function(s) {
-                403 == s.status ? this.password_change_error = "Old Password not correct" : this.password_change_error = "Something went wrong. Please try again later.";
-            }.bind(this)) : void (this.password_change_error = "New password/password confirmation required") : void (this.password_change_error = "Current password required");
-        },
-        confirm_again: function() {
-            resent_confirm_mail(this.user, function(s) {
-                this.account_confirmed_sent = !0, alert(__("confirm_again"));
-            }.bind(this), function(s) {
-                console.error(s), alert("Something went wrong, please try again.");
-            });
-        },
-        confirm_account: function(s) {
-            confirm_user(this.user, s, function(s) {
-                smoke.alert(__("confirmed"), function() {
-                    this.redirect_to("/spaces");
-                }.bind(this));
-            }.bind(this), function(s) {
-                console.error(s), alert(s.responseText), this.redirect_to("/spaces");
-            }.bind(this));
-        }
-    }
-};
-var SpacedeckModals = {
-    data: {
-        active_modal: null,
-        active_account_section: "user",
-        active_space_profile_section: null,
-        account_sections: [ {
-            id: "user",
-            title: "Profile",
-            icon: "icon-user"
-        }, {
-            id: "language",
-            title: "Language",
-            icon: "icon-globe"
-        }, {
-            id: "email-notifications",
-            title: "Notifications",
-            icon: "icon-bell"
-        }, {
-            id: "reset-password",
-            title: "Password",
-            icon: "icon-lock-closed"
-        }, {
-            id: "remove-account",
-            title: "Terminate",
-            icon: "icon-logout"
-        } ],
-        folder_profile_sections: [ {
-            id: "editors",
-            title: "Editors",
-            icon: "icon-user-group",
-            count: 1
-        }, {
-            id: "visibility",
-            title: "Visibility",
-            icon: "icon-eye-open",
-            count: 1
-        } ],
-        space_profile_sections: [ {
-            id: "comments",
-            title: "Comments",
-            icon: "icon-messages",
-            count: 1
-        }, {
-            id: "history",
-            title: "History",
-            icon: "icon-history",
-            count: 1
-        }, {
-            id: "editors",
-            title: "Editors",
-            icon: "icon-user-group",
-            count: 1
-        }, {
-            id: "visibility",
-            title: "Visibility",
-            icon: "icon-eye-open",
-            count: 1
-        } ]
-    },
-    methods: {
-        activate_modal: function(i) {
-            this.active_modal = i, "folder-settings" == i && (this.access_settings_space = this.active_folder, 
-            this.access_settings_memberships = this.active_space_memberships, this.editors_section = "list");
-        },
-        close_modal: function() {
-            this.active_modal = null;
-        },
-        activate_account_section: function(i) {
-            this.active_account_section = i;
-        },
-        activate_space_profile_section: function(i) {
-            this.active_space_profile_section = i;
-        }
-    }
-};
-var SpacedeckAvatars = {
-    data: {
-        uploading_avatar: !1,
-        uploading_folder_avatar: !1,
-        uploading_cover: !1
-    },
-    methods: {
-        save_avatar_image: function(a, i, e) {
-            if (a.files.length > 0) {
-                var t = a.files[0], r = function() {
-                    this.uploading_avatar = !1, this.uploading_cover = !1, this.uploading_folder_avatar = !1;
-                }.bind(this);
-                if (!_.include([ "image/jpeg", "image/jpg", "image/png", "image/gif" ], t.type)) return alert("Unsupported file type. Please upload JPEG, PNG or GIF."), 
-                void r();
-                if (t.size > 3145728) return alert("File must be smaller than 3 megabytes."), void r();
-                save_avatar_file(i, e, t, function(a) {
-                    r(), this.uploading_avatar = !1, this.uploading_cover = !1;
-                    var i = a.avatar_thumb_uri;
-                    e.avatar_thumb_uri = i + "?cachebuster=" + Math.random();
-                }.bind(this), function(a) {
-                    alert("Upload failed: " + a), r();
-                });
-            }
-        },
-        save_space_avatar_image: function(a) {
-            this.uploading_avatar = !0;
-            var i = this.save_avatar_image.bind(this);
-            i(a.$event.target, "space", this.active_space);
-        },
-        save_folder_avatar_image: function(a) {
-            this.uploading_folder_avatar = !0;
-            var i = this.save_avatar_image.bind(this);
-            i(a.$event.target, "space", this.active_folder);
-        },
-        save_user_avatar_image: function(a) {
-            this.uploading_avatar = !0;
-            var i = this.save_avatar_image.bind(this);
-            i(a.$event.target, "user", a.$root.user);
-        },
-        delete_user_avatar_image: function() {
-            this.user.avatar_original_uri = "", this.user.avatar_thumb_uri = "", save_user(this.user, function(a) {}.bind(this));
-        },
-        save_user_background_image: function(a) {
-            var i = a.$event.target;
-            this.uploading_cover = !0;
-            var e = i.files[0];
-            save_user_background_file(this.user, e, function(a) {
-                this.user.background_original_uri = a.background_original_uri, this.uploading_cover = !1;
-            }.bind(this));
-        }
-    }
-};
-SpacedeckWebsockets = {
-    data: {
-        users_online: {}
-    },
-    methods: {
-        handle_live_updates: function(e) {
-            if ("Space" == e.model && e.object && "space" == e.object.space_type && this.active_space && this.active_space._id == e.object._id && (this.active_space = _.merge(this.active_space, e.object)), 
-            "Message" == e.model && "create" == e.action && e.object) {
-                var t = e.object;
-                this.active_space && this.active_space._id == t.space._id ? (this.active_space_messages.push(t), 
-                this.refresh_space_comments()) : console.log("message created in another space.");
-            }
-            if ("Artifact" == e.model) if ("create" == e.action && e.object) {
-                var i = e.object;
-                if (this.active_space && this.active_space._id == i.space_id) {
-                    var s = i;
-                    s._id && !this.find_artifact_by_id(s._id) ? (this.update_board_artifact_viewmodel(i), 
-                    this.active_space_artifacts.push(i)) : (console.log("warning: got create on existing artifact."), 
-                    e.action = "update");
-                } else console.log("artifact created in another space.");
-            } else if ("update" == e.action && e.object) {
-                if (this.active_space) {
-                    var s = e.object;
-                    if (s && s._id) {
-                        var c = this.find_artifact_by_id(s._id);
-                        if (c) for (key in s) c[key] = s[key], this.update_board_artifact_viewmodel(c); else c = s;
-                    }
-                }
-            } else if ("delete" == e.action && e.object && this.active_space) {
-                var s = e.object;
-                if (s._id) {
-                    var c = this.find_artifact_by_id(s._id);
-                    if (c) {
-                        var o = this.active_space_artifacts.indexOf(c);
-                        this.active_space_artifacts.splice(o, 1);
-                    } else console.log("existing artifact to delete not found");
-                } else console.error("object without _id");
-            }
-        },
-        subscribe: function(e) {
-            this.websocket && 1 == this.websocket.readyState ? this.websocket.send(JSON.stringify({
-                action: "subscribe",
-                space_id: e._id
-            })) : console.error("socket not ready yet. (subscribe)");
-        },
-        is_member_online: function(e, t) {
-            if (!t.user) return !1;
-            if (!this.users_online[e._id]) return !1;
-            var i = _.find(this.users_online[e._id], function(e) {
-                return e._id == t.user._id;
-            });
-            return i;
-        },
-        auth_websocket: function(e) {
-            if (this.websocket || this.init_websocket(), this.websocket && 1 == this.websocket.readyState) {
-                var t = {
-                    action: "auth",
-                    editor_auth: space_auth,
-                    editor_name: this.guest_nickname,
-                    auth_token: window.socket_auth,
-                    space_id: e._id
-                };
-                console.log("[websocket] auth space"), this.websocket.send(JSON.stringify(t));
-            }
-        },
-        websocket_send: function(e) {
-            if (this.websocket && 1 == this.websocket.readyState) try {
-                this.websocket.send(JSON.stringify(e));
-            } catch (t) {}
-        },
-        init_websocket: function() {
-            this.websocket && (this.websocket = null), this.current_timeout && (clearTimeout(this.current_timeout), 
-            this.current_timeout = null);
-            try {
-                this.websocket = new WebSocket(ENV.websocketsEndpoint + "/socket");
-            } catch (e) {
-                console.log("[websocket] cannot establish websocket connection: ", e), this.current_timeout = setTimeout(function() {
-                    console.log("[websocket] reconnecting", e), this.init_websocket();
-                }.bind(this), 5e3);
-            }
-            return this.websocket ? (this.websocket.onopen = function(e) {
-                this.current_timeout && (clearTimeout(this.current_timeout), this.current_timeout = null), 
-                this.active_space_loaded && this.auth_websocket(this.active_space), this.online = !0;
-            }.bind(this), this.websocket.onclose = function(e) {
-                window._spacedeck_location_change || (this.online = !1), this.current_timeout || (this.current_timeout = setTimeout(function() {
-                    console.log("[websocket] onclose: reconnecting", e), this.init_websocket();
-                }.bind(this), 5e3));
-            }.bind(this), this.websocket.onmessage = function(e) {
-                this.online = !0;
-                try {
-                    var t = JSON.parse(e.data);
-                } catch (i) {
-                    return void console.log("[websocket] malformed message: ", e.data);
-                }
-                if (t.channel_id != channel_id && ("cursor" == t.action ? this.handle_user_cursor_update(t) : "viewport" == t.action ? this.handle_presenter_viewport_update(t) : "media" == t.action && this.handle_presenter_media_update(t), 
-                "update" != t.action && "create" != t.action && "delete" != t.action || this.handle_live_updates(t), 
-                "init" == t.action && (channel_id = t.channel_id), "auth_valid" == t.action && this.active_space && (this.subscribe(this.active_space), 
-                this.unsaved_transactions() && (console.log("[websockets-saver] found unsaved transactions, triggering save."), 
-                this.process_artifact_save_queue())), "subscription_valid" == t.action && console.log("subscription_valid"), 
-                "status_update" == t.action)) {
-                    var s = t.space_id, c = t.users;
-                    this.user && this.user._id && (c = _.filter(c, function(e) {
-                        return e && e._id != this.user._id;
-                    }.bind(this))), c = _.filter(c, function(e) {
-                        return e && (e._id || e.nickname);
-                    }), this.users_online[s] = c, this.active_space && this.active_space._id == s && (this.active_space_users = c);
-                }
-            }.bind(this), void (this.websocket.onerror = function(e) {
-                console.log("websocket.onerror:", e), window._spacedeck_location_change || (this.online = !1, 
-                this.was_offline = !0), this.current_timeout || (this.current_timeout = setTimeout(function() {
-                    console.log("websocket.onerror: reconnecting", e), this.init_websocket();
-                }.bind(this), 5e3));
-            }.bind(this))) : void console.log("[websocket] no websocket support?");
-        }
-    }
-};
-function setup_whiteboard_directives() {
-    if ("ontouchstart" in window) var t = "touchstart", e = "touchmove", s = "touchend"; else var t = "mousedown", e = "mousemove", s = "mouseup";
-    Vue.directive("sd-whiteboard", {
-        bind: function() {
-            var o = this.el;
-            $(o).on(t, ".artifact", this.handle_mouse_down_artifact.bind(this)), $(o).on("dblclick", ".artifact", this.handle_double_click_artifact.bind(this)), 
-            $(o).on("keyup", ".artifact", this.handle_key_up_artifact.bind(this)), $(o).on("keydown", ".artifact", this.handle_key_down_artifact.bind(this)), 
-            $(o).bind(t, this.handle_mouse_down_space.bind(this)), $(o).bind(e, this.handle_mouse_move.bind(this)), 
-            $(o).bind(s, this.handle_mouse_up_space.bind(this)), $(o).bind("wheel", this.handle_wheel_space.bind(this)), 
-            $(document.body).bind("mouseleave", this.handle_mouse_leave.bind(this)), $(o).find(".handle.resize-nw").bind(t, function(t) {
-                this.handle_transform_mouse_down(t, 1, 1);
-            }.bind(this)), $(o).find(".handle.resize-n").bind(t, function(t) {
-                this.handle_transform_mouse_down(t, .5, 1);
-            }.bind(this)), $(o).find(".handle.resize-ne").bind(t, function(t) {
-                this.handle_transform_mouse_down(t, 0, 1);
-            }.bind(this)), $(o).find(".handle.resize-e").bind(t, function(t) {
-                this.handle_transform_mouse_down(t, 0, .5);
-            }.bind(this)), $(o).find(".handle.resize-se").bind(t, function(t) {
-                this.handle_transform_mouse_down(t, 0, 0);
-            }.bind(this)), $(o).find(".handle.resize-s").bind(t, function(t) {
-                this.handle_transform_mouse_down(t, .5, 0);
-            }.bind(this)), $(o).find(".handle.resize-sw").bind(t, function(t) {
-                this.handle_transform_mouse_down(t, 1, 0);
-            }.bind(this)), $(o).find(".handle.resize-w").bind(t, function(t) {
-                this.handle_transform_mouse_down(t, 1, .5);
-            }.bind(this)), $(o).find(".edge-handle.resize-n").bind(t, function(t) {
-                this.handle_transform_mouse_down(t, .5, 1);
-            }.bind(this)), $(o).find(".edge-handle.resize-s").bind(t, function(t) {
-                this.handle_transform_mouse_down(t, .5, 0);
-            }.bind(this)), $(o).find(".edge-handle.resize-e").bind(t, function(t) {
-                this.handle_transform_mouse_down(t, 0, .5);
-            }.bind(this)), $(o).find(".edge-handle.resize-w").bind(t, function(t) {
-                this.handle_transform_mouse_down(t, 1, .5);
-            }.bind(this)), $(o).on(t, ".vector-handle", function(t) {
-                this.handle_vector_transform_mouse_down(t);
-            }.bind(this));
-            var i = this.vm.$root;
-            this.space_zoom = 1, this.artifacts_before_transaction = [], i.active_tool = "pointer";
-        },
-        update: function() {},
-        unbind: function() {
-            var o = this.el;
-            $(o).off(t + " " + e + " " + s + " keyup keydown mouseleave"), $(document.body).unbind("mouseleave");
-        },
-        handle_key_down_artifact: function(t) {
-            this.vm.$root;
-        },
-        handle_key_up_artifact: function(t) {
-            this.vm.$root;
-        },
-        handle_mouse_down_artifact: function(t) {
-            var e = this.vm.$root;
-            e.editing_artifact_id || (t.preventDefault(), t.stopPropagation());
-            var s = e.find_artifact_by_id(t.currentTarget.id.replace("artifact-", ""));
-            if ("zoom" != e.active_tool) {
-                if ("eyedrop" == e.active_tool) {
-                    var o = e.selected_artifacts();
-                    if (!e.is_selected(s) && o.length > 0) return e.begin_transaction(), e.update_selected_artifacts(function(t) {
-                        t.style = _.clone(s.style);
-                    }), void (e.active_tool = "pointer");
-                }
-                if ("pan" == e.active_tool) return void this.start_pan(t);
-                "pointer" == e.active_tool && (e.is_selected(s) && !t.shiftKey || this.select(t, s), 
-                t.altKey && (s = e.clone_artifact(s), this.select(t, s))), e.begin_transaction();
-                var i = this.cursor_point_to_space(t);
-                e.mouse_ox = i.x, e.mouse_oy = i.y, e.mouse_moved = !1, this.mouse_state = "move", 
-                t.stopPropagation();
-            }
-        },
-        handle_double_click_artifact: function(t) {
-            var e = this.vm.$root, s = e.find_artifact_by_id(t.currentTarget.id.replace("artifact-", ""));
-            s && (s.payload_uri && e.download_selected_artifacts(), e.toggle_selected_artifact_editing(!0));
-        },
-        handle_transform_mouse_down: function(t, e, s) {
-            t.stopPropagation(), t.preventDefault();
-            var o = this.vm.$root;
-            o.begin_transaction();
-            var i = this.cursor_point_to_space(t);
-            this.mouse_state = "transform", o.mouse_ox = i.x, o.mouse_oy = i.y, o.transform_ox = e, 
-            o.transform_oy = s;
-        },
-        handle_vector_transform_mouse_down: function(t) {
-            t.stopPropagation(), t.preventDefault();
-            var e = this.vm.$root, s = parseInt($(t.currentTarget).attr("data-idx"));
-            e.selected_control_point_idx = s, e.begin_transaction();
-            var o = this.cursor_point_to_space(t);
-            this.mouse_state = "vector_transform", e.mouse_ox = o.x, e.mouse_oy = o.y;
-        },
-        handle_wheel_space: function(t) {
-            var e = this.vm.$root;
-            if (t.ctrlKey || t.shiftKey) {
-                t.preventDefault(), t.stopPropagation();
-                var s = 1, o = t.originalEvent.deltaY;
-                if (o > 0) {
-                    if (s = 1.2, e.viewport_zoom <= .05) return !1;
-                } else {
-                    if (!(o < 0)) return !1;
-                    if (s = .9, e.viewport_zoom >= 2) return !1;
-                }
-                e.zoom_to_cursor(t, s);
-            }
-        },
-        handle_mouse_down_space: function(t) {
-            if (t.target == t.currentTarget || _.include([ "wrapper" ], t.target.className)) {
-                var e = this.vm.$root;
-                e.opened_dialog = "none";
-                var s = this.cursor_point_to_space(t);
-                if (e.mouse_ox = s.x, e.mouse_oy = s.y, 2 != t.which && 4 != t.buttons || (e.active_tool = "pan"), 
-                "note" == e.active_tool) return this.deselect(), this.mouse_state = "transform", 
-                e.mouse_state = this.mouse_state, void this.start_adding_note(t);
-                if ("arrow" == e.active_tool) return this.deselect(), this.mouse_state = "vector_transform", 
-                e.mouse_state = this.mouse_state, void this.start_drawing_arrow(t);
-                if ("line" == e.active_tool) return this.deselect(), this.mouse_state = "vector_transform", 
-                e.mouse_state = this.mouse_state, void this.start_drawing_line(t);
-                if ("scribble" == e.active_tool) return this.deselect(), this.mouse_state = "scribble", 
-                e.mouse_state = this.mouse_state, void this.start_drawing_scribble(t);
-                if ("zoom" == e.active_tool) return void (t.altKey ? e.zoom_out() : e.zoom_in());
-                if ("pointer" == e.active_tool) this.mouse_state = "lasso", this.start_lasso(t); else {
-                    if ("zone" == e.active_tool) return this.deselect(), this.mouse_state = "transform", 
-                    void e.start_adding_zone(t);
-                    if ("image" == e.active_tool) return this.deselect(), this.mouse_state = "transform", 
-                    void e.start_adding_placeholder(t);
-                    if ("pan" == e.active_tool) return void this.start_pan(t);
-                }
-                e.selection_metrics.count > 0 && (this._no_artifact_toolbar_this_round = !0), this.deselect();
-            }
-        },
-        start_pan: function(t) {
-            var e = this.vm.$root;
-            el = $("#space")[0], el && (this.mouse_state = "pan", this.old_panx = el.scrollLeft, 
-            this.old_pany = el.scrollTop);
-            var s = this.cursor_point_to_space(t);
-            e.mouse_ox = s.x, e.mouse_oy = s.y, e.mouse_moved = !1;
-        },
-        deselect: function() {
-            var t = this.vm.$root;
-            t.deselect();
-        },
-        select: function(t, e) {
-            var s = this.vm.$root;
-            s.select(t, e);
-        },
-        multi_select: function(t) {
-            var e = this.vm.$root;
-            e.multi_select(t);
-        },
-        start_lasso: function(t) {
-            var e = this.cursor_point_to_space(t);
-            this.lasso = {
-                x: e.x,
-                y: e.y,
-                w: 0,
-                h: 0
-            };
-        },
-        rects_intersecting: function(t, e) {
-            return !(!t || !e) && !(t.x + t.w < e.x || t.x > e.x + e.w || t.y + t.h < e.y || t.y > e.y + e.h);
-        },
-        artifacts_in_rect: function(t) {
-            if (!t) return [];
-            var e = this.vm.$root;
-            return _.filter(e.active_space_artifacts, function(e) {
-                return this.rects_intersecting(e.board, t);
-            }.bind(this));
-        },
-        abs_rect: function(t) {
-            var e = {
-                x: t.x,
-                y: t.y,
-                w: Math.abs(t.w),
-                h: Math.abs(t.h)
-            };
-            return t.w < 0 && (e.x += t.w), t.h < 0 && (e.y += t.h), e;
-        },
-        lasso_style: function() {
-            var t = this.vm.$root;
-            if (!this.lasso) return "";
-            var e = {
-                x: this.lasso.x,
-                y: this.lasso.y,
-                w: this.lasso.w * t.viewport_zoom,
-                h: this.lasso.h * t.viewport_zoom
-            };
-            e = this.abs_rect(e), e.x += t.bounds_margin_horiz, e.y += t.bounds_margin_vert;
-            var s = "left:" + e.x + "px;";
-            return s += "top:" + e.y + "px;", s += "width:" + e.w + "px;", s += "height:" + e.h + "px;", 
-            s += "opacity: 1;";
-        },
-        render_lasso: function() {
-            return this.lasso ? ($("#lasso").attr("style", this.lasso_style()), void $("#lasso").show()) : void $("#lasso").hide();
-        },
-        cursor_point_to_space: function(t) {
-            var e = this.vm.$root, s = {
-                left: 0,
-                top: 0
-            };
-            return t = fixup_touches(t), {
-                x: (parseInt(t.pageX) - parseInt(s.left) - e.bounds_margin_horiz) / this.space_zoom,
-                y: (parseInt(t.pageY) - parseInt(s.top) - e.bounds_margin_vert) / this.space_zoom
-            };
-        },
-        rect_to_points: function(t) {
-            return [ {
-                x: t.x,
-                y: t.y
-            }, {
-                x: t.x + t.w,
-                y: t.y
-            }, {
-                x: t.x,
-                y: t.y + t.h
-            }, {
-                x: t.x + t.w,
-                y: t.y + t.h
-            } ];
-        },
-        old_selection_rect: function() {
-            var t = this.vm.$root, e = t.selected_artifacts().map(function(e) {
-                return t.find_artifact_before_transaction(e);
-            }.bind(this));
-            return t.enclosing_rect(e);
-        },
-        snap_point: function(t, e, s) {
-            var o = this.vm.$root, i = 8, a = [];
-            if (s && a.push([ [ t - window.innerWidth / 2, Math.abs(e - window.innerHeight / 2) ], [ t - window.innerWidth / 2, Math.abs(e - window.innerHeight / 2) ] ]), 
-            o.grid_active) {
-                var n = o.grid.spacing / o.grid.subdivisions, r = o.grid.spacing / o.grid.subdivisions, d = parseInt(t / n) * n, c = parseInt(e / r) * r, h = (parseInt(t / n) + 1) * n, l = (parseInt(e / r) + 1) * r;
-                a = [ [ [ Math.abs(d - t), d ], [ Math.abs(c - e), c ] ], [ [ Math.abs(h - t), h ], [ Math.abs(l - e), l ] ] ];
-            } else a = o.unselected_artifacts().map(function(o) {
-                var i = this.rect_to_points(o.board), a = Math.abs(i[0].x - t), n = Math.abs(i[1].x - t), r = Math.abs(i[0].x + o.board.w / 2 - t), _ = Math.abs(i[0].y - e), d = Math.abs(i[2].y - e), c = Math.abs(i[0].y + o.board.h / 2 - e);
-                if (!s) {
-                    if (n < a) var h = n, l = i[1].x; else var h = a, l = i[0].x;
-                    if (d < _) var u = d, f = i[2].y; else var u = _, f = i[0].y;
-                }
-                if (s) var h = r, l = i[0].x + o.board.w / 2, u = c, f = i[0].y + o.board.h / 2;
-                return [ [ h, l ], [ u, f ] ];
-            }.bind(this));
-            a.push([ [ Math.abs(t), 0 ], [ Math.abs(e), 0 ] ]);
-            var u = _.unzip(a), f = _.sortBy(u[0], function(t) {
-                return t[0];
-            }), p = _.sortBy(u[1], function(t) {
-                return t[0];
-            }), m = {
-                snapx: f[0],
-                snapy: p[0]
-            };
-            return (!f[0] || f[0][0] > i) && (m.snapx = [ 0, t ]), (!p[0] || p[0][0] > i) && (m.snapy = [ 0, e ]), 
-            m;
-        },
-        offset_point_in_wrapper: function(t) {
-            var e = this.vm.$root, s = $(this.el)[0], o = e.viewport_zoom, i = parseInt($("#space").css("padding-top"));
-            return t.y = (t.y + s.scrollTop - i) / o, t.x = (t.x + s.scrollLeft) / o, t;
-        },
-        start_drawing_scribble: function(t) {
-            t.preventDefault(), t.stopPropagation();
-            var e = this.vm.$root, s = this.offset_point_in_wrapper(this.cursor_point_to_space(t)), o = e.highest_z() + 1;
-            e.deselect();
-            var i = {
-                space_id: e.active_space._id,
-                mime: "x-spacedeck/vector",
-                description: "",
-                control_points: [ {
-                    dx: 0,
-                    dy: 0
-                } ],
-                board: {
-                    x: s.x,
-                    y: s.y,
-                    z: o,
-                    w: 64,
-                    h: 64
-                },
-                style: {
-                    stroke_color: "#000000",
-                    stroke: 2,
-                    shape: "scribble"
-                }
-            };
-            e.save_artifact(i, function(s) {
-                e.update_board_artifact_viewmodel(s), e.active_space_artifacts.push(s), this.select(t, s), 
-                e.transform_ox = 0, e.transform_oy = 0, e.begin_transaction();
-            }.bind(this));
-        },
-        start_drawing_arrow: function(t) {
-            t.preventDefault(), t.stopPropagation();
-            var e = this.vm.$root, s = this.cursor_point_to_space(t);
-            this.offset_point_in_wrapper(s);
-            var o = e.highest_z() + 1, i = {
-                space_id: e.active_space._id,
-                mime: "x-spacedeck/vector",
-                description: "",
-                control_points: [ {
-                    dx: 0,
-                    dy: 0
-                }, {
-                    dx: 0,
-                    dy: 0
-                }, {
-                    dx: 0,
-                    dy: 0
-                } ],
-                board: {
-                    x: s.x,
-                    y: s.y,
-                    z: o,
-                    w: 64,
-                    h: 64
-                },
-                style: {
-                    stroke_color: "#000000",
-                    stroke: 2,
-                    shape: "arrow"
-                }
-            };
-            e.save_artifact(i, function(s) {
-                e.update_board_artifact_viewmodel(s), e.active_space_artifacts.push(s), e.select(t, i), 
-                e.selected_control_point_idx = 1, e.transform_ox = 0, e.transform_oy = 0, e.begin_transaction();
-            }.bind(this));
-        },
-        start_drawing_line: function(t) {
-            t.preventDefault(), t.stopPropagation();
-            var e = this.vm.$root, s = this.cursor_point_to_space(t);
-            this.offset_point_in_wrapper(s);
-            var o = e.highest_z() + 1, i = {
-                space_id: e.active_space._id,
-                mime: "x-spacedeck/vector",
-                description: "",
-                control_points: [ {
-                    dx: 0,
-                    dy: 0
-                }, {
-                    dx: 0,
-                    dy: 0
-                } ],
-                board: {
-                    x: s.x,
-                    y: s.y,
-                    z: o,
-                    w: 64,
-                    h: 64
-                },
-                style: {
-                    stroke_color: "#000000",
-                    stroke: 2,
-                    shape: "line"
-                }
-            };
-            e.save_artifact(i, function(s) {
-                e.update_board_artifact_viewmodel(s), e.active_space_artifacts.push(s), e.select(t, i), 
-                e.selected_control_point_idx = 1, e.transform_ox = 0, e.transform_oy = 0, e.begin_transaction();
-            }.bind(this));
-        },
-        snap_point_simple: function(t) {
-            var e = this.snap_point(t.x, t.y);
-            return {
-                x: e.snapx[1],
-                y: e.snapy[1]
-            };
-        },
-        handle_mouse_up_space: function(t) {
-            var e = this.vm.$root;
-            if (t.preventDefault(), "lasso" == this.mouse_state) {
-                var s = this.abs_rect(this.offset_point_in_wrapper(this.lasso));
-                if (s.w > 0 && s.h > 0) {
-                    var o = this.artifacts_in_rect(s);
-                    this.multi_select(o);
-                } else this._no_artifact_toolbar_this_round ? this._no_artifact_toolbar_this_round = !1 : e.start_adding_artifact(t);
-                this.lasso = null, this.render_lasso();
-            } else if (_.include([ "transform", "move", "vector_transform", "scribble" ], this.mouse_state)) for (var i = e.selected_artifacts(), a = 0; a < i.length; a++) _.include([ "text", "placeholder" ], e.artifact_major_type(i[a])) && (i[a].board.w < 10 && (i[a].board.w = 10), 
-            i[a].board.h < 10 && (i[a].board.h = 10));
-            if ("text_editor" != this.mouse_state) {
-                if (_.include([ "zoom" ], e.active_tool)) return this.mouse_state = "idle", e.mouse_state = this.mouse_state, 
-                e.end_transaction(), void e.deselect();
-                this.mouse_state = "idle", e.mouse_state = this.mouse_state, this.lasso = null, 
-                e.active_tool = "pointer", e.end_transaction(), e.show_toolbar_props();
-            }
-        },
-        handle_mouse_leave: function(t) {
-            var e = this.vm.$root;
-            this.mouse_state = "idle", this.lasso = null, e.active_tool = "pointer", e.end_transaction(), 
-            this.render_lasso();
-        },
-        handle_mouse_move: function(t) {
-            var e = this.vm.$root;
-            if (e.active_space) {
-                e.editing_artifact_id || (t.preventDefault(), t.stopPropagation()), e.handle_scroll();
-                var s = this.cursor_point_to_space(t), o = s.x - e.mouse_ox, i = s.y - e.mouse_oy, a = new Date().getTime() - this.last_mouse_move_time;
-                this.last_mouse_move_time = new Date().getTime();
-                var n = e.viewport_zoom || 1;
-                if (n && (o /= n, i /= n), o > 10 || i > 10 || a > 100) {
-                    var r = "anonymous";
-                    r = e.logged_in ? e.user.nickname || e.user.email : e.guest_nickname || "anonymous";
-                    var d = {
-                        action: "cursor",
-                        x: s.x / n,
-                        y: s.y / n,
-                        name: r,
-                        id: e.user._id || r
-                    };
-                    e.websocket_send(d);
-                }
-                if (e.snap_ruler_x = -1e3, e.snap_ruler_y = -1e3, e.mouse_moved = !0, e.transform_lock = t.shiftKey, 
-                e.transform_lock && ("transform" == this.mouse_state || (Math.abs(i) > Math.abs(o) ? o = 0 : i = 0)), 
-                "move" == this.mouse_state) {
-                    e.hide_toolbar_props();
-                    var c = 0, h = 0, l = e.selected_artifacts(), u = this.old_selection_rect();
-                    if (l.length && l[0]._id == e.editing_artifact_id) return;
-                    if (u) {
-                        var f = u.x1 + (u.x2 - u.x1) / 2, p = u.y1 + (u.y2 - u.y1) / 2, m = this.snap_point(u.x1 + o, u.y1 + i, !1), v = this.snap_point(u.x2 + o, u.y2 + i, !1), b = this.snap_point(f + o, p + i, !0);
-                        c = b.snapx[0] > 0 ? f + o - b.snapx[1] : v.snapx[0] > 0 ? u.x2 + o - v.snapx[1] : u.x1 + o - m.snapx[1], 
-                        h = b.snapy[0] > 0 ? p + i - b.snapy[1] : v.snapy[0] > 0 ? u.y2 + i - v.snapy[1] : u.y1 + i - m.snapy[1];
-                    }
-                    e.update_selected_artifacts(function(t) {
-                        var s = e.find_artifact_before_transaction(t);
-                        return s ? {
-                            board: _.extend(t.board, {
-                                x: s.board.x + o - c,
-                                y: s.board.y + i - h
-                            })
-                        } : {};
-                    }.bind(this));
-                } else if ("transform" == this.mouse_state) {
-                    var l = e.selected_artifacts(), y = this.old_selection_rect();
-                    if (!y) return void (this.mouse_state = "idle");
-                    e.hide_toolbar_props();
-                    var x = y.x2 - y.x1, w = y.y2 - y.y1, g = y.x1 + x * e.transform_ox, z = y.y1 + w * e.transform_oy, k = y.x1 + x * (1 - e.transform_ox) - g, M = y.y1 + w * (1 - e.transform_oy) - z, D = this.snap_point(g + k + o, z + M + i), I = D.snapx[1] - g, P = D.snapy[1] - z, T = k ? I / k : 1, K = M ? P / M : 1;
-                    e.transform_lock && (K = T), e.update_selected_artifacts(function(t) {
-                        var s = e.find_artifact_before_transaction(t), o = g + (s.board.x - g) * T, i = z + (s.board.y - z) * K, a = g + (s.board.x + s.board.w - g) * T, n = z + (s.board.y + s.board.h - z) * K;
-                        if (o > a) {
-                            var r = o;
-                            o = a, a = r;
-                        }
-                        if (i > n) {
-                            var r = i;
-                            i = n, n = r;
-                        }
-                        return {
-                            board: _.extend(t.board, {
-                                x: o,
-                                y: i,
-                                w: a - o,
-                                h: n - i
-                            })
-                        };
-                    }.bind(this));
-                } else if ("lasso" == this.mouse_state) this.lasso.w = o, this.lasso.h = i, this.render_lasso(); else if ("vector_transform" == this.mouse_state) {
-                    e.hide_toolbar_props();
-                    var L = this;
-                    e.update_selected_artifacts(function(t) {
-                        var s = e.find_artifact_before_transaction(t), a = _.cloneDeep(s.control_points), n = _.clone(s.board), r = a[e.selected_control_point_idx], d = L.snap_point(n.x + r.dx + o, n.y + r.dy + i);
-                        return o = d.snapx[1] - (n.x + r.dx), i = d.snapy[1] - (n.y + r.dy), r.dx += o, 
-                        r.dy += i, "arrow" == t.style.shape && 2 != e.selected_control_point_idx && (a[2].dx = (a[0].dx + a[1].dx) / 2, 
-                        a[2].dy = (a[0].dy + a[1].dy) / 2), L.normalize_control_points(a, n);
-                    });
-                } else if ("scribble" == this.mouse_state) {
-                    e.update_selected_artifacts(function(t) {
-                        var e = t, o = _.cloneDeep(e.control_points), i = _.clone(e.board), a = this.offset_point_in_wrapper({
-                            x: s.x,
-                            y: s.y
-                        });
-                        return o.push({
-                            dx: a.x - i.x,
-                            dy: a.y - i.y
-                        }), this.normalize_control_points(simplify_scribble_points(o), i);
-                    }.bind(this));
-                    var B = e.selected_artifacts();
-                    B.length && e.update_board_artifact_viewmodel(B[0]);
-                } else if ("pan" == this.mouse_state) {
-                    if (!$("#space").length) return;
-                    el = $("#space")[0], el.scrollLeft = this.old_panx - o * e.viewport_zoom, el.scrollTop = this.old_pany - i * e.viewport_zoom, 
-                    e.handle_scroll();
-                }
-            }
-        },
-        normalize_control_points: function(t, e) {
-            var s = _.min(t, "dx").dx, o = _.min(t, "dy").dy, i = _.max(t, "dx").dx, a = _.max(t, "dy").dy, n = -s, r = -o, d = t.map(function(t) {
-                return {
-                    dx: t.dx + n,
-                    dy: t.dy + r
-                };
-            }), c = Math.abs(i - s), h = Math.abs(a - o), l = 0, u = 0;
-            e.w < 0 && (l = -e.w), e.h < 0 && (u = -e.h);
-            var f = {
-                x: e.x + l - n,
-                y: e.y + u - r,
-                w: c,
-                h: h,
-                z: e.z
-            };
-            return {
-                board: f,
-                control_points: d
-            };
-        }
-    });
-}
-function setup_directives() {
-    if (Vue.directive("clipboard", {
-        bind: function() {
-            this.clipboard = new Clipboard(".clipboard-btn");
-        },
-        update: function(e) {},
-        unbind: function() {
-            this.clipboard.destroy();
-        }
-    }), Vue.directive("t", {
-        update: function(e, t) {
-            this.el.innerHTML = t;
-        }
-    }), "ontouchstart" in window) var e = "touchstart", t = "touchmove", a = "touchend"; else var e = "mousedown", t = "mousemove", a = "mouseup";
-    Vue.directive("videoplayer", {
-        update: function(t) {
-            var a = this.el, i = (this.vm.$root, a.querySelectorAll("video")[0]), r = a.querySelectorAll(".play")[0], n = a.querySelectorAll(".pause")[0], o = a.querySelectorAll(".stop")[0], d = "stop", s = function() {
-                try {
-                    t.player_view || (t.player_view = {}), t.player_view.state = d;
-                } catch (e) {}
-            }, c = function() {
-                i.play(), d = "playing", s();
-            }, u = function() {
-                try {
-                    i.pause(), d = "paused", s();
-                } catch (e) {}
-            }, l = function() {
-                try {
-                    d = "stop", i.pause(), i.currentTime = 0, s();
-                } catch (e) {}
-            };
-            a.addEventListener("remote_play", c), a.addEventListener("remote_pause", u), a.addEventListener("remote_stop", l), 
-            r.addEventListener(e, function(e) {
-                try {
-                    c(), spacedeck.presenter_send_media_action(t._id, "video", "play", i.currentTime);
-                } catch (a) {}
-            }, !1), n.addEventListener(e, function(e) {
-                u(), spacedeck.presenter_send_media_action(t._id, "video", "pause", i.currentTime);
-            }, !1), o.addEventListener(e, function(e) {
-                l(), spacedeck.presenter_send_media_action(t._id, "video", "stop", 0);
-            }, !1);
-        }
-    }), Vue.directive("audioplayer", {
-        update: function(t) {
-            var a = this.el, i = this.vm.$root, r = a.querySelectorAll(".play")[0], n = a.querySelectorAll(".pause")[0], o = a.querySelectorAll(".stop")[0], d = a.querySelectorAll(".timeline")[0], s = a.querySelectorAll(".set-inpoint")[0], c = a.querySelectorAll(".set-outpoint")[0], u = a.querySelectorAll(".reset-points")[0], l = "stop", p = 0, f = 0, m = a.querySelectorAll("audio")[0], v = function() {
-                try {
-                    t.meta ? (t.meta.play_to || (t.meta.play_to = m.duration), p = parseFloat(t.meta.play_from) || 0, 
-                    f = parseFloat(t.meta.play_to) || 0) : (p = 0, f = parseFloat(m.duration) || 0, 
-                    t.meta = {});
-                } catch (e) {}
-            }, _ = function() {
-                try {
-                    t.player_view || (t.player_view = {}), t.player_view.state = l, t.player_view.total_time_string = format_time(m.duration), 
-                    t.player_view.current_time_string = format_time(m.currentTime), t.player_view.current_time_float = m.currentTime / m.duration, 
-                    t.player_view.inpoint_float = p / m.duration, t.player_view.outpoint_float = f / m.duration, 
-                    t.player_view.duration = m.duration;
-                } catch (e) {}
-            }, h = function() {
-                try {
-                    m.pause(), l = "paused";
-                } catch (e) {}
-                _();
-            }, y = function() {
-                try {
-                    m.currentTime = p, m.pause(), l = "stop";
-                } catch (e) {}
-                _();
-            };
-            _(), m.addEventListener("loadedmetadata", function(e) {
-                v(), _();
-            }, !1), m.addEventListener("timeupdate", function(e) {
-                try {
-                    v(), m.currentTime >= f && "playing" == l && y(), _();
-                } catch (t) {}
-            }, !1);
-            var g = function() {
-                "stop" == l && (m.currentTime = p), l = "playing", v(), m.play(), _();
-            }, b = function() {
-                h(), _();
-            }, w = function() {
-                y(), _();
-            };
-            a.addEventListener("remote_play", g), a.addEventListener("remote_pause", b), a.addEventListener("remote_stop", w), 
-            r.addEventListener(e, function(e) {
-                try {
-                    g(), spacedeck.presenter_send_media_action(t._id, "audio", "play", m.currentTime);
-                } catch (a) {}
-            }, !1), n.addEventListener(e, function(e) {
-                b(), spacedeck.presenter_send_media_action(t._id, "audio", "pause", m.currentTime);
-            }, !1), o.addEventListener(e, function(e) {
-                w(), spacedeck.presenter_send_media_action(t._id, "audio", "stop", 0);
-            }, !1), d.addEventListener(e, function(e) {
-                var t = parseFloat(e.offsetX) / e.currentTarget.offsetWidth * m.duration;
-                isNaN(t) && (t = 0);
-                try {
-                    m.currentTime = t;
-                } catch (a) {}
-            }, !1), s.addEventListener(e, function(e) {
-                t.meta || (t.meta = {}), t.meta.play_from = m.currentTime, t.meta.play_to < t.meta.play_from && (t.meta.play_to = m.duration), 
-                v(), y(), _(), i.save_artifact(t);
-            }, !1), c.addEventListener(e, function(e) {
-                t.meta || (t.meta = {}), t.meta.play_to = m.currentTime, t.meta.play_to < t.meta.play_from && (t.meta.play_from = 0), 
-                v(), y(), _(), i.save_artifact(t);
-            }, !1), u.addEventListener(e, function(e) {
-                t.meta || (t.meta = {}), t.meta.play_from = 0, t.meta.play_to = m.duration, v(), 
-                y(), _(), i.save_artifact(t);
-            }, !1);
-        }
-    }), Vue.directive("sd-richtext", {
-        twoWay: !0,
-        update: function(e) {
-            this.mode = "rich", $(this.el).addClass("text-editing"), this.medium = new Medium({
-                element: this.el,
-                mode: Medium.richMode,
-                attributes: {
-                    remove: [ "class", "href", "onclick", "onmousedown", "onmouseup" ]
-                }
-            }), this.medium.value(e.description), this.medium.element.addEventListener("keyup", function() {
-                e.description = this.medium.value(), spacedeck.queue_artifact_for_save(e);
-            }.bind(this)), spacedeck.medium_for_object[e._id] = this.medium;
-        }
-    }), Vue.directive("focus", {
-        bind: function() {
-            var e = this.el;
-            window.setTimeout(function() {
-                if (e.contentEditable && "inherit" != e.contentEditable) {
-                    var t = document.createRange();
-                    t.selectNodeContents(e);
-                } else e.focus(), e.select();
-            }, 500);
-        }
-    }), Vue.directive("sd-draggable", {
-        update: function(e) {
-            var t = this.el;
-            t.addEventListener("dragstart", function(a) {
-                return $(t).find(".text-editing").length ? (a.stopPropagation(), void a.preventDefault()) : (a.dataTransfer.setData("application/json", JSON.stringify(e)), 
-                void $(t).addClass("dragging"));
-            }, !1);
-        }
-    }), Vue.directive("sd-droppable", {
-        isFn: !0,
-        bind: function() {
-            var e = this.el, t = this.expression, a = t.split(";"), i = a[0], r = a[1];
-            e.addEventListener("dragover", function(t) {
-                return t.dataTransfer.dropEffect = "copy", t.preventDefault && t.preventDefault(), 
-                e.classList.add("over"), !1;
-            }.bind(this), !1), e.addEventListener("dragenter", function(t) {
-                return e.classList.add("over"), !1;
-            }.bind(this), !1), e.addEventListener("dragleave", function(t) {
-                return e.classList.remove("over"), !1;
-            }, !1), e.addEventListener("drop", function(e) {
-                e.stopPropagation(), e.preventDefault(), $(e.currentTarget).find(".over").removeClass("over"), 
-                $(e.currentTarget).find(".dragging").removeClass("dragging");
-                var t = this.vm.$root[i].bind(this.vm.$root);
-                if (this._scope) var a = this._scope[r]; else var a = this.vm[r];
-                return t(e, a), !1;
-            }.bind(this), !1);
-        }
-    }), Vue.directive("sd-fader", {
-        bind: function(i) {
-            function r(e, t, a) {
-                return Math.max(t, Math.min(a, e));
-            }
-            var n = this.vm.$root;
-            this.fader_state = "idle", this.fader_mx = 0, this.fader_my = 0;
-            var o = $(this.el), d = o.find(".fader-selector"), s = o.find(".fader-indicator"), c = o.find(".fader-constraint");
-            c.length || (c = o);
-            var u = o.attr("sd-fader-var-x"), l = o.attr("sd-fader-var-y"), p = 0, f = 0, m = 0, v = 0, _ = 0, h = 0;
-            g && (h = n.$get(u));
-            var y = 0;
-            b && (y = n.$get(l));
-            var g = !!u, b = !!l, w = !d[0], L = parseFloat(o.attr("sd-fader-step")) || 1, E = parseFloat(o.attr("sd-fader-sens")) || 1, x = function() {
-                f = parseInt(o.attr("sd-fader-min-x")) || 0, m = parseInt(o.attr("sd-fader-min-y")) || 0, 
-                v = parseInt(o.attr("sd-fader-max-x")) || c.width() - 1, _ = parseInt(o.attr("sd-fader-max-y")) || c.height() - 1;
-            }, T = function() {
-                x(), h && !isNaN(h) || (h = 0), y && !isNaN(y) || (y = 0), d[0] && (g && (d[0].style.left = h + "px"), 
-                b && (d[0].style.top = _ - y + "px")), s[0] && (s[0].style.height = y + "px");
-            }.bind(this), q = function(e, t) {
-                x(), g && (h = r(e, f, v), n.$set(u, h)), b && (y = r(t, m, _), L < 1 && (y = y.toFixed(1)), 
-                n.$set(l, y));
-            }.bind(this), S = function(e) {
-                e = fixup_touches(e);
-                var t = parseInt((e.pageX - this.fader_mx) * E), a = parseInt((e.pageY - this.fader_my) * E);
-                t *= L, a *= L, q(this.fader_oldx + t, this.fader_oldy - a);
-            }.bind(this), A = function(e) {
-                this.fader_state = "idle", $("body").off(t, S), $("body").off("mouseleave " + a + " blur", A), 
-                window._sd_fader_moving = !1;
-            }.bind(this);
-            o.on(e, function(e) {
-                e.preventDefault(), e.stopPropagation(), e = fixup_touches(e);
-                var i = $(e.target).offset();
-                this.fader_state = "drag", w || q(e.pageX - i.left, _ - (e.pageY - i.top) + p / 2), 
-                b && (y = n.$get(l)), $("body").on(t, S), $("body").on("mouseleave " + a + " blur", A), 
-                this.fader_mx = e.pageX, this.fader_my = e.pageY, this.fader_oldx = h || 0, this.fader_oldy = y || 0, 
-                window._sd_fader_moving = !0;
-            }.bind(this)), T(), g && n.$watch(u, function(e) {
-                h = parseInt(n.$get(u)), T();
-            }), b && n.$watch(l, function(e) {
-                y = parseInt(n.$get(l)), T();
-            });
-        },
-        unbind: function() {
-            var e = (this.vm.$root, $(this.el));
-            e.attr("sd-fader-var-x"), e.attr("sd-fader-var-y");
-        }
-    });
-}
-function boot_spacedeck() {
-    console.log("booting..."), setup_directives(), setup_whiteboard_directives(), setup_exclusive_audio_video_playback();
-    var data = {
-        active_view: null,
-        online: !0,
-        was_offline: !1,
-        account: "profile",
-        logged_in: !1,
-        guest_nickname: null,
-        user: {},
-        active_profile: null,
-        active_profile_spaces: [],
-        active_dropdown: "none",
-        creating_user: !1,
-        signup_error: null,
-        login_error: null,
-        password_reset_send: !1,
-        password_reset_error: null,
-        password_reset_email: null,
-        password_reset_confirm_error: null,
-        reset_token: null,
-        global_spinner: !1
-    }, methods = {
-        activate_dropdown: function(e, t) {
-            return this.active_dropdown == e ? void (this.active_dropdown = "none") : void (this.active_dropdown = e);
-        },
-        close_dropdown: function(e) {
-            e && $(e.target).parents(".dropdown").length || (this.active_dropdown = "none");
-        },
-        translate: function() {
-            return i18n.t(arguments);
-        }
-    };
-    methods = _.extend(methods, SpacedeckUsers.methods), methods = _.extend(methods, SpacedeckWebsockets.methods), 
-    methods = _.extend(methods, SpacedeckSpaces.methods), methods = _.extend(methods, SpacedeckTeams.methods), 
-    methods = _.extend(methods, SpacedeckBoardArtifacts), methods = _.extend(methods, SpacedeckFormatting), 
-    methods = _.extend(methods, SpacedeckSections.methods), methods = _.extend(methods, SpacedeckAvatars.methods), 
-    methods = _.extend(methods, SpacedeckModals.methods), methods = _.extend(methods, SpacedeckAccount.methods), 
-    methods = _.extend(methods, SpacedeckRoutes), data = _.extend(data, SpacedeckUsers.data), 
-    data = _.extend(data, SpacedeckAccount.data), data = _.extend(data, SpacedeckWebsockets.data), 
-    data = _.extend(data, SpacedeckSpaces.data), data = _.extend(data, SpacedeckTeams.data), 
-    data = _.extend(data, SpacedeckSections.data), data = _.extend(data, SpacedeckAvatars.data), 
-    data = _.extend(data, SpacedeckModals.data), Vue.filter("select", function(array, key, operant, value) {
-        var res = _.filter(array, function(e) {
-            var test = eval(e[key] + " " + operant + " " + value);
-            return test;
-        });
-        return res;
-    }), Vue.filter("date", function(e, t) {
-        var a = moment(e);
-        return a.format(t).replace("'", "").replace("'", "");
-    }), Vue.filter("exceptFilter", function(e, t) {
-        var a = _.filter(e, function(e) {
-            return void 0 == e[t];
-        });
-        return a;
-    }), Vue.filter("size", function(e) {
-        return e.length;
-    }), Vue.filter("empty?", function(e) {
-        return 0 == e.length;
-    }), Vue.filter("urls_to_links", function(e) {
-        return urls_to_links(e);
-    }), window.spacedeck = new Vue({
-        el: "body",
-        data: data,
-        methods: methods
-    });
-    var lang = "en";
-    window.refreshLocale = function() {
-        spacedeck && spacedeck.user && spacedeck.user.preferences ? lang = spacedeck.user.preferences.language || "en" : window.browser_lang && (lang = window.browser_lang);
-    }, window.refreshLocale(), i18n.init({
-        lng: lang,
-        resStore: window.locales
-    }, function(e, t) {
-        console.log("i18n initialized: " + lang);
-    }), window.__ = function() {
-        var e = Array.prototype.slice.call(arguments);
-        return e.shift(), window.refreshLocale(), i18n.t(arguments[0], {
-            postProcess: "sprintf",
-            sprintf: e
-        });
-    }, spacedeck.setup_section_module(), spacedeck.load_user(function() {
-        spacedeck.route();
-    }, function() {
-        spacedeck.route();
-    }), window.addEventListener("paste", function(e) {
-        "INPUT" == e.target.nodeName || "TEXTAREA" == e.target.nodeName && "clipboard-ta" != e.target.id || e.target.contenteditable || spacedeck.active_space && spacedeck.handle_section_paste(e);
-    });
-}
-
-$(document).ready(function() {
-    window.smoke = smoke, window.alert = smoke.alert, FastClick.attach(document.body), 
-    boot_spacedeck();
-});
\ No newline at end of file
diff --git a/public/javascripts/spacedeck_routes.js b/public/javascripts/spacedeck_routes.js
index e294358c51af39f5e92d517e7f495778e88de70e..9d9b3823a56d615cf01efc693635e37662a405d0 100644
--- a/public/javascripts/spacedeck_routes.js
+++ b/public/javascripts/spacedeck_routes.js
@@ -252,8 +252,6 @@ var SpacedeckRoutes = {
       // #hash
       if (event.currentTarget.hash && event.currentTarget.hash.length>1) return;
 
-      console.log("clicked", event.currentTarget.pathname);
-
       // external link?
       if (event.currentTarget.host != location.host) return;
 
@@ -269,35 +267,6 @@ var SpacedeckRoutes = {
       event.preventDefault();
     }.bind(this));
 
-    if (location.host!=ENV.webHost) {
-      if (!subdomainTeam) {
-        location.href = ENV.webEndpoint;
-        return;
-      } else {
-        if(subdomainTeam.subdomain) {
-          var realHost = (subdomainTeam.subdomain + "." + ENV.webHost);
-          if (location.host != realHost) {
-            location.href = realHost;
-            return;
-          }
-        } else {
-          location.href = ENV.webEndpoint;
-          return;
-        }
-      }
-    } 
-
-    if (this.logged_in) {
-      if (this.user.team) {
-        if (this.user.team.subdomain && this.user.team.subdomain.length > 0) {
-          var realHost = (this.user.team.subdomain + "." + ENV.webHost);         
-          if (location.host != realHost) {
-            location.href = location.protocol + "//" + realHost + location.pathname;
-            return;
-          }
-        }
-      }
-    }
     this.internal_route(location.pathname);
   },
   
diff --git a/public/javascripts/spacedeck_users.js b/public/javascripts/spacedeck_users.js
index 4cbd60d32a3a6051bda4da5c6f3dfa2e299653ba..5b29cd741355d7b4597cd008dd56c5a700db1e3c 100644
--- a/public/javascripts/spacedeck_users.js
+++ b/public/javascripts/spacedeck_users.js
@@ -48,10 +48,6 @@ SpacedeckUsers = {
     },
 
     finalize_login: function(session_token, on_success) {
-      if(!window.socket_auth || window.socket_auth == '' || window.socket_auth == 'null') {
-        window.socket_auth = session_token;
-      }
-
       this.load_user(function(user) {
         if (this.invitation_token) {
           accept_invitation(this.invitation_token, function(memberships){
diff --git a/public/javascripts/spacedeck_websockets.js b/public/javascripts/spacedeck_websockets.js
index fd7bb9de14fe8cd09b5f21dd49ca000c02ed4988..f73d4106c39cb900236fe0db745fd7c9f7c7cac2 100644
--- a/public/javascripts/spacedeck_websockets.js
+++ b/public/javascripts/spacedeck_websockets.js
@@ -59,13 +59,13 @@ SpacedeckWebsockets = {
         else if (msg.action == "delete" && msg.object) {
           if (this.active_space) {
             var o = msg.object;
-            if(o._id){
+            if (o._id){
               var existing_artifact = this.find_artifact_by_id(o._id);
               if (existing_artifact) {
                 var idx = this.active_space_artifacts.indexOf(existing_artifact);
                 this.active_space_artifacts.splice(idx, 1);
               } else console.log("existing artifact to delete not found");
-            }else console.error("object without _id");
+            } else console.error("object without _id");
           }
         }
       }
@@ -101,11 +101,13 @@ SpacedeckWebsockets = {
       }
 
       if (this.websocket && this.websocket.readyState==1) {
+        var token = "";
+        if (this.user) token = this.user.token;
         var auth_params = {
           action: "auth",
           editor_auth: space_auth,
           editor_name: this.guest_nickname,
-          auth_token: window.socket_auth,
+          auth_token: token,
           space_id: space._id
         };
         console.log("[websocket] auth space");
diff --git a/routes/api/sessions.js b/routes/api/sessions.js
index 8c2fdba1280c25b84ac1382f2b47622a0ee7da4d..b8f7d9bde6c907227ec8542725110b1f1f0f261d 100644
--- a/routes/api/sessions.js
+++ b/routes/api/sessions.js
@@ -23,15 +23,11 @@ router.post('/', function(req, res) {
   db.User.findOne({where: {email: email}})
     .error(err => {
       res.sendStatus(404);
-      //res.status(400).json({"error":"session.users"});
     })
     .then(user => {
-      console.log("!!! user: ",user.password_hash);
-      
       if (bcrypt.compareSync(password, user.password_hash)) {
         crypto.randomBytes(48, function(ex, buf) {
           var token = buf.toString('hex');
-          console.log("!!! token: ",token);
 
           var session = {
             user_id: user._id,
@@ -47,7 +43,7 @@ router.post('/', function(req, res) {
               res.sendStatus(500);
             })
             .then(() => {
-              var domain = (process.env.NODE_ENV == "production") ? new URL(config.get('endpoint')).hostname : "localhost";
+              var domain = (process.env.NODE_ENV == "production") ? new URL(config.get('endpoint')).hostname : req.headers.hostname;
               res.cookie('sdsession', token, { domain: domain, httpOnly: true });
               res.status(201).json(session);
             });
@@ -60,16 +56,14 @@ router.post('/', function(req, res) {
 
 router.delete('/current', function(req, res, next) {
   if (req.user) {
-    /*var user = req.user;
-    var newSessions = user.sessions.filter( function(session){
-      return session.token != req.token;
-    });*/
-    //user.sessions = newSessions;
-    //user.save(function(err, result) {
-      var domain = new URL(config.get('endpoint')).hostname;
-      res.clearCookie('sdsession', { domain: domain });
-      res.sendStatus(204);
-    //});
+    var token = req.cookies['sdsession'];
+    db.Session.findOne({where: {token: token}})
+      .then(session => {
+        session.destroy();
+      });
+    var domain = (process.env.NODE_ENV == "production") ? new URL(config.get('endpoint')).hostname : req.headers.hostname;
+    res.clearCookie('sdsession', { domain: domain });
+    res.sendStatus(204);
   } else {
     res.sendStatus(404);
   }
diff --git a/routes/api/space_artifacts.js b/routes/api/space_artifacts.js
index c11b8ce7ac2c3ca75572a72eb4563d8861ef48d2..67a3a09a4fef7584d89bff3c63d21826c8ba27df 100644
--- a/routes/api/space_artifacts.js
+++ b/routes/api/space_artifacts.js
@@ -133,7 +133,7 @@ router.post('/:artifact_id/payload', function(req, res, next) {
     var progress_callback = function(progress_msg) {
       a.description = progress_msg;
       a.save();
-      redis.sendMessage("update", a, a.toJSON(), req.channelId);
+      redis.sendMessage("update", a, JSON.stringify(a), req.channelId);
     };
 
     stream.on('finish', function() {
@@ -171,6 +171,7 @@ router.put('/:artifact_id', function(req, res, next) {
   }}).then(rows => {
     db.unpackArtifact(newAttr);
     db.Space.update({ updated_at: new Date() }, {where: {_id: req.space._id} });
+    newAttr._id = a._id;
     res.distributeUpdate("Artifact", newAttr);
   });
 });
diff --git a/routes/api/space_exports.js b/routes/api/space_exports.js
index 2b7b15bd614a15b5bcdc37975ab1fd5ba547c762..237ba01781697780347903b63e6f482718aa0c9b 100644
--- a/routes/api/space_exports.js
+++ b/routes/api/space_exports.js
@@ -240,7 +240,6 @@ router.get('/zip', function(req, res, next) {
 });
 
 router.get('/html', function(req, res) {
-  console.log("!!!!! hello ");
   db.Artifact.findAll({where: {
     space_id: req.space._id
   }}).then(function(artifacts) {
diff --git a/routes/api/users.js b/routes/api/users.js
index f389bf9817b2af3992bcb60a31f9dacac68e4e48..a86316d5b1d706bc12d957a371747b2cb35d1e61 100644
--- a/routes/api/users.js
+++ b/routes/api/users.js
@@ -25,8 +25,15 @@ var glob = require('glob');
 
 router.get('/current', function(req, res, next) {
   if (req.user) {
-    console.log(req.user.team);
-    res.status(200).json(req.user);
+    var u = _.clone(req.user.dataValues);
+    delete u.password_hash;
+    delete u.password_reset_token;
+    delete u.confirmation_token;
+    u.token = req.cookies['sdsession'];
+
+    console.log(u);
+    
+    res.status(200).json(u);
   } else {
     res.status(401).json({"error":"user_not_found"});
   }
diff --git a/views/spacedeck.html b/views/spacedeck.html
index a9d720a6b81b0b60713b3f2b710cc85a76e787f6..bfaee5bca36074a055605beac097d0581f4569c2 100644
--- a/views/spacedeck.html
+++ b/views/spacedeck.html
@@ -22,29 +22,13 @@
       window.browser_lang = '[[locale]]';
       window.csrf_token = '[[csrf_token]]';
 
-      {% if process.env.NODE_ENV != "production" %}
-        var ENV = {
-          name: 'development',
-          webHost: "localhost:9666",
-          webEndpoint:"http://localhost:9666",
-          apiEndpoint: "http://localhost:9666",
-          websocketsEndpoint: "ws://localhost:9666"
-        };
-      {% else %}
-        var ENV = {
-          name: 'production',
-          webHost: location.host,
-          webEndpoint: location.origin,
-          apiEndpoint: location.origin,
-          websocketsEndpoint: location.origin.replace("https:","wss:").replace("http:","ws:")
-        };
-      {% endif %}
-
-      {% if subdomain_team %}
-        var subdomainTeam = [[ subdomain_team | json | safe ]];
-      {% else %}
-        var subdomainTeam = null;
-      {% endif %}
+      var ENV = {
+        name: 'development',
+        webHost: location.host,
+        webEndpoint: location.origin,
+        apiEndpoint: location.origin,
+        websocketsEndpoint: location.origin.replace("https:","wss:").replace("http:","ws:")
+      };
     </script>
 
     {% if process.env.NODE_ENV == "production" %}